简体   繁体   English

使用Jarbundler和蚂蚁

[英]Using Jarbundler with ant

Im trying to use a jarbundler to create a .app file with ant. 我试图用jarbundler用ant创建一个.app文件。 But I'm getting the following error: 但是我收到以下错误:

taskdef class net.sourceforge.jarbundler.JarBundler cannot be found using the classloader AntClassLoader[/Users/Ida/NetBeansProjects/supernova/build/classes/lib/jarbundler-core-3.3.0.jar] 使用类加载器AntClassLoader [/Users/Ida/NetBeansProjects/supernova/build/classes/lib/jarbundler-core-3.3.0.jar]找不到taskdef类net.sourceforge.jarbundler.JarBundler

My build.xml looks like this: 我的build.xml看起来像这样:

 <path id="classpath">
        <fileset dir="dist/lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="clean">
        <delete dir="build"/>
    </target>

    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes">
            <classpath>
                <path refid="classpath"/>
                <path location="${jar.dir}/${ant.project.name}.jar"/>
            </classpath>
        </javac>
        <copy todir="build/classes">
            <fileset dir="src" excludes="**/*.java"/>
        </copy>
    </target>

    <target name="dist">
        <mkdir dir="build/classes/lib"/>
        <copy flatten="true" todir="build/classes/lib" includeemptydirs="false">
            <fileset dir="dist/lib">
                <include name="*.jar"/>
            </fileset>
        </copy>
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/SuperNova.jar" basedir="build/classes">
            <fileset dir="dist/lib">
                <include name="*.jar"/>
            </fileset>
            <manifest>
                <attribute name="Main-Class" value="com.lumenradio.supernova.SuperNovaApp"/>
            </manifest>
        </jar>
    </target>

    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/SuperNova.jar" basedir="build/classes">
            <fileset dir="dist/lib">
                <include name="*.jar"/>
            </fileset>
            <manifest>
                <attribute name="Main-Class" value="com.lumenradio.supernova.SuperNovaApp"/>
            </manifest>
        </jar>
    </target>

    <target name="run" depends="jar">
        <java fork="true" classname="com.lumenradio.supernova.SuperNovaApp">
            <classpath>
                <path refid="classpath"/>
                <path location="build/jar/SuperNova.jar"/>
            </classpath>
        </java>
    </target>



    <target name='package-app'>
        <taskdef name="jarbundler" classname="net.sourceforge.jarbundler.JarBundler">
            <classpath>
                <pathelement location="build/classes/lib/jarbundler-core-3.3.0.jar"/>
            </classpath>
        </taskdef>
        <jarbundler dir="dist" name="SuperNova" 
            mainclass="com.lumenradio.supernova.SuperNovaApp"
            jar="build/jar/SuperNova.jar"/>
    </target>

Does anybody now why I'm getting this error and how I should solve it? 现在有人为什么我得到这个错误以及我应该如何解决它?

EDIT 编辑

Thanks for your help. 谢谢你的帮助。 I can now build the .app file but when I'm trying to run it I get the following error: 我现在可以构建.app文件,但是当我尝试运行它时,我收到以下错误:

Error: Could not find or load main class com.lumenradio.supernova.SuperNovaApp 错误:无法找到或加载主类com.lumenradio.supernova.SuperNovaApp

My target now looks like this: 我的目标现在看起来像这样:

<target name='package-app'>
        <taskdef name="jarbundler" classpath="build/classes/lib/jarbundler-core-3.3.0.jar" 
        classname="com.ultramixer.jarbundler.JarBundler"/>

        <jarbundler dir="dist" name="SuperNova" 
            jar="build/jar/SuperNova.jar"
            mainclass="com.lumenradio.supernova.SuperNovaApp"
            icon="SuperNova copy.icns"
            stubfile="universalJavaApplicationStub"
            useJavaXKey="true"
            jvmversion="1.7+"/>
    </target>

I downloaded the jar to take a look, and I think the issue is that your classname is wrong. 我下载了jar来看看,我认为问题是你的classname错了。 The JarBundler class is located in com.ultramixer.jarbundler.JarBundler , so try this instead: JarBundler类位于com.ultramixer.jarbundler.JarBundler ,所以请尝试以下方法:

    <taskdef name="jarbundler" classname="com.ultramixer.jarbundler.JarBundler">
        <classpath>
            <pathelement location="build/classes/lib/jarbundler-core-3.3.0.jar"/>
        </classpath>
    </taskdef>

Also, since you're only loading a single library, there's no need use a nested classpath instead of taskdef 's classpath attribute, so you can simplify it somewhat: 此外,由于您只加载单个库,因此不需要使用嵌套类路径而不是taskdefclasspath属性,因此您可以稍微简化它:

    <taskdef
        name="jarbundler"
        classname="com.ultramixer.jarbundler.JarBundler"
        classpath="build/classes/lib/jarbundler-core-3.3.0.jar"
    />

The problem was that the lib folder was not in the destination with the jar so I solved it by editing my hole build.xml file to only look like this: 问题是lib文件夹不在jar的目标中,所以我通过编辑我的hole build.xml文件来解决它,看起来像这样:

<target name='package-app' depends='clean, jar'>
    <taskdef name="jarbundler" classpath="dist/lib/jarbundler-core-3.3.0.jar" 
    classname="com.ultramixer.jarbundler.JarBundler"/>

    <jarbundler dir="dist" name="SuperNova" 
        jar="dist/SuperNova.jar"
        mainclass="com.lumenradio.supernova.SuperNovaApp"
        icon="SuperNova copy.icns"
        stubfile="universalJavaApplicationStub"
        useJavaXKey="true"
        jvmversion="1.7+"/>

    <mkdir dir="dist/SuperNova.app/Contents/Resources/Java/lib"/>
    <copy flatten="true" todir="dist/SuperNova.app/Contents/Resources/Java/lib" includeemptydirs="false">
        <fileset dir="dist/lib">
            <include name="*.jar"/>
        </fileset>
    </copy>
</target>

Now it works perfect. 现在它完美无缺。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM