>情况:
我是制作 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"