在ANT构建中设置类路径

时间:2016-01-19 18:37:39

标签: java ant build

情况:

我是制作ant构建的新手,我设法编写一个构建JAR并将必要文件(如图像和库)移动到输出文件夹中。

问题:

当我尝试运行新的JAR时,它抱怨它无法找到main方法(我在ANT脚本的manifest标签中指定了它)。我做了一些研究,我认为是因为我需要为已编译的类定义一个类路径,但是我无法让它工作。

的build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="formula_manager" default="rebuild">

  <property name="out" value="${basedir}/out/FormulaManager"/>

  <target name="clean">
    <delete dir="${out}"/>
    <mkdir dir="${out}"/>
  </target>

  <target name="build" description="Build all artifacts">
    <property name="tmp" value="${out}/temp"/>
    <mkdir dir="${tmp}"/>
    <property name="tmpJar" value="${tmp}/Formula Manager.jar"/>
    <property name="tmpFolder" value="${tmp}/FormulaManager"/>
    <jar destfile="${tmpJar}" duplicate="preserve" filesetmanifest="mergewithoutmain">
      <zipfileset dir="${out}"/>
      <zipfileset src="${basedir}/resources/pdfbox-app-1.8.10.jar"/>
      <zipfileset src="${basedir}/resources/ftp4j-1.7.2.jar"/>
      <manifest>
        <attribute name="Main-Class" value="com.zakscode.FormulaManager.Main"/>
      </manifest>
    </jar>
    <copy file="${tmpJar}" tofile="${tmp}/Formula Manager.jar"/>
    <mkdir dir="${out}"/>
    <copy todir="${out}">
      <fileset dir="${tmp}"/>
    </copy>
    <copy file="icon.png" todir="${out}" />
    <copy file="splash.png" todir="${out}" />
    <copy file="logo.png" todir="${out}" />
    <copy file="configuration.properties" todir="${out}" />
    <mkdir dir="${out}/resources" />
    <copydir src="resources" dest="${out}/resources" />

    <!-- Delete temporary files -->
    <delete dir="${tmp}"/>
  </target>

  <target name="rebuild" depends="clean, build"/>
</project>

输出:

$ java -jar "Formula Manager.jar"
Error: Could not find or load main class com.zakscode.FormulaManager.Main

修改 我在7zip中打开了JAR,没有任何类文件,这就是为什么主方法无法加载的原因。那么如何在我的build.xml中解决这个问题呢?

1 个答案:

答案 0 :(得分:0)

设置

Main-Class = "com.zakscode.FormulaManager.Main"

假设您已定义以下消息:

public static void main(String[] args)

在名为com.zakscode.FormulaManager.Main的类中(方法必须为&#34; main&#34;,not&#34; Main&#34;)。定义Main-Class时,不要包含主方法名称,指定包含main的,因此如果main方法在FormulaManager中,则按如下方式设置Main-Class :

Main-Class = "com.zakscode.FormulaManager"