gpt4 book ai didi

java - 带 jar 目标的 Ant

转载 作者:行者123 更新时间:2023-12-04 10:32:09 25 4
gpt4 key购买 nike

我需要帮助,以了解用 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 的 bug 吗?

最佳答案

确切地说,不是错误。 Ant 只是在做你告诉它做的事情。
Main-Class模块加载器不使用 manifest 属性。 --main-class jar 的选项与 list 无关;它在 jar 的 module-info.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>

关于java - 带 jar 目标的 Ant ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60365587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com