了解maven中的目标执行者

时间:2016-02-26 20:25:14

标签: maven javafx-8 maven-3 exec-maven-plugin

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

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

问题:有人可以解释那里发生的事情吗?

第一次执行是直接的,它指定了一个java类,它有main方法并提供了参数。

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

1 个答案:

答案 0 :(得分:0)

执行上方的评论已经提供了第一个提示:

  

在fxlauncher.xml中嵌入app.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文件。

这样的执行绑定到包含packagedefault one的项目中的jar阶段,因此无需指定它,这将在{{之后执行3}}这个阶段的包装(例如Maven Jar插件)。因此,构建将首先创建/打包jar文件,然后运行这些执行来更改/更新它。