我已在这里搜索过一个解决方案,但没有一个对我有用: 我有一个用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
正如我所说的,我尝试了各种解决方案,但每次我尝试运行我的&#34; main&#34; Ant中的目标我得到以下错误
Fehler: Hauptklasse quakk.musifx.main.Main konnte nicht gefunden oder geladen werden
大致翻译为Mainclass:quakk.musifx.main.Main无法找到或加载。
我还尝试更改类路径或Mainclass的名称,并尝试将我的main-class属性更改为&#34; Main&#34;或&#34; quakk.musifx.main&#34; 或者在编译目标中包含类路径,但对我没有任何作用。
顺便说一句,我使用的是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
答案 0 :(得分:1)
我只需要更改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文件,应用程序按原样运行
答案 1 :(得分:0)
您尝试在不提供类路径的情况下运行主类。
我建议改为:
<target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
</target>
会运行您刚刚构建的JAR(因为它的清单中有一个Main-Class
会运行它。