Java 带Jar目标的蚂蚁

Java 带Jar目标的蚂蚁,java,module,jar,ant,Java,Module,Jar,Ant,我需要帮助,了解ant的罐子包装问题。下面是我的简单代码: <target name="build" depends="compile,test"> <jar basedir="${bin}/swing.gui" destfile="${mod}/swing.gui.jar"> <manifest> <attribute name="Main-Class" value="swing

我需要帮助,了解ant的罐子包装问题。下面是我的简单代码:

  <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>
它不起作用。错误消息说没有MainClass属性,我应该尝试使用-m/来代替。 当我在控制台上执行这一行时:

jar --create --file=bin/mod/swing.gui.jar --main-class=swing.main.Main -C bin/src/swing.gui .

它只是工作!这是ant中的一个bug吗?

完全不是bug。蚂蚁只是在做你让它做的事

Main类
manifest属性不被模块加载程序使用。
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>

好的,我明白了。顺便说一句,我也做了变通。但是有了主类选项,它就可以工作了!非常感谢你的帮助。
<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>