情况:
我是制作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中解决这个问题呢?
答案 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"