【问题标题】:Using Jarbundler with ant将 Jarbundler 与 ant 一起使用
【发布时间】:2017-12-18 06:51:50
【问题描述】:

我正在尝试使用 jarbundler 创建一个带有 ant 的 .app 文件。但我收到以下错误:

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

我的 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>

现在有人知道为什么我会收到此错误以及我应该如何解决它吗?

编辑

感谢您的帮助。我现在可以构建 .app 文件,但是当我尝试运行它时出现以下错误:

错误:无法找到或加载主类 com.lumenradio.supernova.SuperNovaApp

我的目标现在看起来像这样:

<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>

【问题讨论】:

    标签: java ant


    【解决方案1】:

    我下载了jar来看看,我认为问题是你的classname是错误的。 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>
    

    此外,由于您只加载单个库,因此无需使用嵌套类路径代替 taskdefclasspath 属性,因此您可以稍微简化一下:

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

    【讨论】:

    • 我编辑了原来的帖子,因为我遇到了一个新问题。
    • 在您的项目的 jar 中看起来像一个类似的路径问题,但如果无法访问该 jar 文件,我无法准确说出问题所在。
    • 见下面第二个问题的答案。
    【解决方案2】:

    问题是 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>
    

    现在它完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      相关资源
      最近更新 更多