将 Jarbundler 与 ant 一起使用
Using Jarbundler with ant
我正在尝试使用 jarbundler 通过 ant 创建一个 .app 文件。但我收到以下错误:
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]
我的 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 文件,但是当我尝试 运行 它时,我收到以下错误:
Error: Could not find or load main class
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>
我下载了jar来看看,我觉得问题是你的classname
不对。 JarBundler class 位于 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>
此外,由于您只加载一个库,因此无需使用嵌套的 class 路径代替 taskdef
的 classpath
属性,因此您可以简化它有点:
<taskdef
name="jarbundler"
classname="com.ultramixer.jarbundler.JarBundler"
classpath="build/classes/lib/jarbundler-core-3.3.0.jar"
/>
问题是 lib 文件夹不在 jar 的目标位置,所以我通过编辑我的洞 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>
现在完美了。
我正在尝试使用 jarbundler 通过 ant 创建一个 .app 文件。但我收到以下错误:
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]
我的 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 文件,但是当我尝试 运行 它时,我收到以下错误:
Error: Could not find or load main class 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>
我下载了jar来看看,我觉得问题是你的classname
不对。 JarBundler class 位于 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>
此外,由于您只加载一个库,因此无需使用嵌套的 class 路径代替 taskdef
的 classpath
属性,因此您可以简化它有点:
<taskdef
name="jarbundler"
classname="com.ultramixer.jarbundler.JarBundler"
classpath="build/classes/lib/jarbundler-core-3.3.0.jar"
/>
问题是 lib 文件夹不在 jar 的目标位置,所以我通过编辑我的洞 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>
现在完美了。