понимание цели exec в maven

Я пытаюсь создать собственный установщик для приложения javafx 8 с помощью fxlauncher, как описано в http://fxldemo.tornado.no/

В представленном примере pom.xml я не понимаю, что делает выполнение embed-manifest-in-launcher.

Вопрос. Может кто-нибудь объяснить, что там происходит?

Первое выполнение является прямым, оно указывает класс java, который имеет основной метод и предоставляет аргументы.

<execution>
    <id>create-manifest</id>
    <phase>package</phase>
    <goals>
        <goal>java</goal>
    </goals>
    <configuration>
        <mainClass>fxlauncher.CreateManifest</mainClass>
        <arguments>
            <argument>${app.url}</argument>
            <argument>${app.mainClass}</argument>
            <argument>${app.dir}</argument>
        </arguments>
    </configuration>
</execution>

<!-- Embed app.xml inside fxlauncher.xml so we don't need to reference app.xml 
    to start the app -->
<execution>
    <id>embed-manifest-in-launcher</id>
    <phase>package</phase>
    <goals>
        <goal>exec</goal>
    </goals>
    <configuration>
        <executable>jar</executable>
        <workingDirectory>${app.dir}</workingDirectory>
        <arguments>
            <argument>uf</argument>
            <argument>fxlauncher.jar</argument>
            <argument>app.xml</argument>
        </arguments>
    </configuration>
</execution>

person user68883    schedule 26.02.2016    source источник
comment
Внутри этого pom.xml происходит много волшебства, но поскольку он будет называться javapackager, я бы предложил использовать javafx-maven-plugin для JavaFX-разработки с использованием maven. Например, проекты, пожалуйста, посмотрите на тест-проекты. Отказ от ответственности: я являюсь сопровождающим этого maven-плагина.   -  person FibreFoX    schedule 28.02.2016
comment
@FibreFoX Мне удалось создать установщик с помощью указанного вами плагина. Но я не могу установить имя файла jnlp out. Вот ссылка на вопрос о том же самом stackoverflow.com/questions/35758949/   -  person user68883    schedule 03.03.2016
comment
Я дал решение по этому вопросу ;)   -  person FibreFoX    schedule 03.03.2016


Ответы (1)


Комментарий чуть выше выполнения уже дает первую подсказку:

Вставьте app.xml в fxlauncher.xml, чтобы нам не нужно было ссылаться на app.xml для запуска приложения.

Запись конфигурации executable имеет значение jar, поэтому будет выполняться команда jar.

Затем он передаст ему параметры uf из jar. help мы видим, что:

-u update existing archive
-f specify archive file name

Следовательно, опция f также ожидает параметр, который действительно является записью fxlauncher.jar.

Таким образом, полная команда, которая будет выполнена, будет выглядеть так:

jar uf fxlauncher.jar app.xml

Что обновит существующий и предоставленный файл fxlauncher.jar, добавив в файл app.xml, как указано в комментарии выше.

Такое выполнение имеет привязку к фазе package в проекте с упаковкой jar (по умолчанию , поэтому указывать его не нужно), который будет выполняться после привязки по умолчанию к этому пакету для этой фазы (например, подключаемый модуль Maven Jar). Следовательно, сборка сначала создаст/упакует файл jar, а затем запустит эти исполнения, чтобы изменить/обновить его.

person A_Di-Matteo    schedule 27.02.2016
comment
Спасибо за подробное объяснение - person user68883; 29.02.2016