【问题标题】:Ant with Jar Target带罐子目标的蚂蚁
【发布时间】:2020-06-07 11:21:42
【问题描述】:

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

【问题讨论】:

    标签: java module jar ant


    【解决方案1】:

    确切地说,不是错误。 Ant 只是在做你告诉它做的事情。

    模块加载器不使用Main-Class 清单属性。 jar 的 --main-class 选项与清单无关;它在 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>
    

    【讨论】:

    • 好的,我明白了。顺便提一句。我也做了解决方法。但是有了主类选项,它就可以工作了!非常感谢您的帮助。
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多