关于javafx 8:了解maven中的goal exec

understanding goal exec in maven

我正在尝试使用 fxlauncher 为 javafx 8 应用程序创建本机安装程序,如 http://fxldemo.tornado.no/

中所述

在示例提供的pom.xml中,我不明白执行embed-manifest-in-launcher在做什么。

问题:有人能解释一下那里发生了什么吗?

第一次执行很简单,它指定了一个具有 main 方法并提供参数的 java 类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<execution>
    <id>create-manifest</id>
    <phase>package</phase>
    <goals>
        <goal>java</goal>
    </goals>
    <configuration>
        <mainClass>fxlauncher.CreateManifest</mainClass>
       
            ${app.url}</argument>
            ${app.mainClass}</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>
       
            uf</argument>
            fxlauncher.jar</argument>
            app.xml</argument>
        </arguments>
    </configuration>
</execution>


执行上面的注释已经提供了第一个提示:

Embed app.xml inside fxlauncher.xml so we don't need to reference app.xml to start the app

executable 配置条目设置为 jar,因此它将运行 jar 命令。

然后它将参数uf传递给它,从jar帮助命令中我们可以看到:

1
2
-u update existing archive
-f specify archive file name

因此,f 选项也需要一个参数,这确实是 fxlauncher.jar 条目。

因此,将执行的完整命令为:

1
jar uf fxlauncher.jar app.xml

这将更新现有的和提供的 fxlauncher.jar 文件添加到 app.xml 文件中,根据上面的评论。

这样的执行绑定到项目中的 package 阶段,打包 jar (默认的,因此不需要指定它),它将在此阶段的默认绑定到此打包后执行(例如 Maven Jar 插件)。因此,构建将首先创建/打包 jar 文件,然后运行这些执行来更改/更新它。