在 ANT 构建中设置类路径



>情况:

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

问题:

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

构建.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,但没有一个类文件,这就是无法加载 main 方法的原因。那么如何在我的构建中解决此问题.xml?

设置

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

假定您定义了以下消息:

public static void main(String[] args)

在名为 com.zakscode.FormulaManager.Main 的类中(方法必须是"main",而不是"Main")。 定义 Main-Class 时,不包含 main 方法名称,而是指定包含 main 的,因此,如果 main 方法位于 FormulaManager 中,则按如下方式设置 Main-Class:

Main-Class = "com.zakscode.FormulaManager"

相关内容

  • 没有找到相关文章

最新更新