Муравей с Джар Таргет - PullRequest
       1

Муравей с Джар Таргет

2 голосов
/ 23 февраля 2020

Мне нужна помощь, чтобы понять проблему упаковки банок с муравьем. Вот мой простой код:

  <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 .

Это просто работает! Это ошибка в муравье?

1 Ответ

2 голосов
/ 23 февраля 2020

Не баг, точно. Ant просто делает то, что вы сказали.

Атрибут манифеста Main-Class не используется загрузчиками модулей. Параметр --main-class jar не имеет ничего общего с манифестами; он устанавливает двоичный атрибут класса в записи 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...