带有罐子目标的蚂蚁
Ant with Jar Target
我需要帮助,了解用ant打包jar的问题。这是我的简单代码:
<target name="build" depends="compile,test">
<jar
basedir="${bin}/swing.gui"
destfile="${mod}/swing.gui.jar">
<manifest>
<attribute name="Main-Class" value="swing.main.Main"/>
</manifest>
</jar>
</target>
这个小程序是模块化的,正如你所看到的,模块swing.gui应该被打包在一个jar文件中。这里的问题是,当我尝试使用以下命令启动模块时:
java --module-path bin/mod --module swing.gui
它不起作用。错误消息说没有 MainClass 属性,我应该尝试 -m / 代替。
当我在控制台上执行这一行时:
jar --create --file=bin/mod/swing.gui.jar --main-class=swing.main.Main -C bin/src/swing.gui .
它很管用!这是蚂蚁中的错误吗?
完全不是错误。 Ant 只是按照您的指示去做。
模块加载器不使用 Main-Class
清单属性。 jar
的 --main-class
选项与清单无关;它在 jar 的模块-info.class 条目上设置二进制 class 属性。
因此,您的 Ant 构建文件正在执行与您的 jar
命令完全不同的操作。
直到 Ant 的 任务直接支持这个,解决方法是直接调用 JDK 的 jar
命令。像这样:
<condition property="exec-suffix" value=".exe" else="">
<os family="windows"/>
</condition>
<property name="jar.tool"
location="${java.home}/bin/jar${exec-suffix}"/>
<exec executable="${jar.tool}" failonerror="true">
<arg value="-u"/>
<arg value="-f"/>
<arg file="${mod}/swing.gui.jar"/>
<arg value="-e"/>
<arg value="swing.main.Main"/>
</exec>
我需要帮助,了解用ant打包jar的问题。这是我的简单代码:
<target name="build" depends="compile,test">
<jar
basedir="${bin}/swing.gui"
destfile="${mod}/swing.gui.jar">
<manifest>
<attribute name="Main-Class" value="swing.main.Main"/>
</manifest>
</jar>
</target>
这个小程序是模块化的,正如你所看到的,模块swing.gui应该被打包在一个jar文件中。这里的问题是,当我尝试使用以下命令启动模块时:
java --module-path bin/mod --module swing.gui
它不起作用。错误消息说没有 MainClass 属性,我应该尝试 -m / 代替。 当我在控制台上执行这一行时:
jar --create --file=bin/mod/swing.gui.jar --main-class=swing.main.Main -C bin/src/swing.gui .
它很管用!这是蚂蚁中的错误吗?
完全不是错误。 Ant 只是按照您的指示去做。
模块加载器不使用 Main-Class
清单属性。 jar
的 --main-class
选项与清单无关;它在 jar 的模块-info.class 条目上设置二进制 class 属性。
因此,您的 Ant 构建文件正在执行与您的 jar
命令完全不同的操作。
直到 Ant 的 jar
命令。像这样:
<condition property="exec-suffix" value=".exe" else="">
<os family="windows"/>
</condition>
<property name="jar.tool"
location="${java.home}/bin/jar${exec-suffix}"/>
<exec executable="${jar.tool}" failonerror="true">
<arg value="-u"/>
<arg value="-f"/>
<arg file="${mod}/swing.gui.jar"/>
<arg value="-e"/>
<arg value="swing.main.Main"/>
</exec>