我已经在这里搜索了一个解决方案,但没有一个适合我:我有一个用Ant编写的构建脚本:
<project name="Musifx" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="out"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="properties.file" value="${src.dir}/qs_musifx.properties"/>
<property name="lib.dir" value="lib"/>
<property name="main-class" value="quakk.musifx.main.Main"/>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" classpath="${lib.dir}/Logger.jar" includes="${lib.dir}/*.jar"/>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" excludes="**/*.java"/>
</copy>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
<target name="run" depends="jar">
<java classname="${main-class}" fork="true"/>
</target>
<target name="clean-build" depends="clean,jar"/>
<target name="main" depends="clean,run"/>
</project>
我的文件夹结构是。/quakk/musifx/main/,我的包是quakk.musifx.main
正如我所说,我尝试了各种解决方案张贴在这里,但每次我试图运行我的"主要"目标在蚂蚁我得到以下错误
Fehler: Hauptklasse quakk.musifx.main.Main konnte nicht gefunden oder geladen werden
大致翻译为Mainclass: quake .musifx.main. main. main无法找到或加载
我还试图改变类路径或主类的名称,并试图将我的主类属性更改为简单的"Main"或"quake .musifx. Main"。或者在编译目标中包含类路径,但对我来说都不起作用。
顺便说一下,我使用的是JDK 8,这是一个JavaFX应用程序
编辑:jar tvf Musifx.jar的输出
0 Thu Jul 30 00:00:00 CEST 2015 META-INF/
139 Wed Jul 29 23:59:58 CEST 2015 META-INF/MANIFEST.MF
0 Wed Jul 29 23:59:58 CEST 2015 quakk/
0 Wed Jul 29 23:59:58 CEST 2015 quakk/musifx/
0 Wed Jul 29 23:59:58 CEST 2015 quakk/musifx/main/
425 Wed Jul 29 23:59:58 CEST 2015 qs_musifx.properties
1866 Wed Jul 29 23:59:58 CEST 2015 quakk/musifx/main/main.fxml
1076 Wed Jul 29 23:59:58 CEST 2015 quakk/musifx/main/styles.css
我只需要更改compile
和jar
的目标:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}">
<classpath>
<pathelement path="${lib.dir}/Logger.jar"/>
</classpath>
</javac>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}" excludes="**/*.java"/>
</copy>
</target>
和jar
目标
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<zipgroupfileset dir="${lib.dir}" includes="Logger.jar" />
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
现在它工作了,并编译到我的jar文件中,应用程序正常工作
您试图在不提供类路径的情况下运行主类。
我建议改成:
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>
,它将运行您刚刚构建的JAR(因为它在其清单中确实有一个Main-Class
),将运行它。