使用javac Main Class编译Ant编译

时间:2015-07-29 21:50:07

标签: java ant javafx

我已在这里搜索过一个解决方案,但没有一个对我有用: 我有一个用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

2 个答案:

答案 0 :(得分:1)

我只需要更改compilejar的目标:

<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会运行它。