使用Maven 'EXEC:EXEC' 与参数(Using Maven 'e

2019-07-20 08:44发布

我已经配置建立和使用Maven运行项目。 该项目依赖于特定平台的本地库,而且我发现使用策略这里来管理这些依赖关系。

本质上, .dll.so针对特定平台的文件被打包成一个罐子,并推到Maven的服务器用的分类器识别目标平台。 Maven的依赖性,插件,然后解压缩特定于平台的罐子,并复制本地库到目标文件夹。

通常我会用mvn exec:java运行Java程序,但exec:java运行在同一个JVM的Maven,它使我从修改类路径的应用程序。 由于本机的依赖必须添加到classpath中,我不得不使用mvn exec:exec代替。 这是POM的相关片段:

...
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-Djava.library.path=target/lib</argument>
            <argument>-classpath</argument>
            <classpath />
            <argument>com.example.app.MainClass</argument>
        </arguments>
    </configuration>
</plugin>
...

这工作正常的应用程序的默认配置,但我希望能够在命令行中指定一些可选参数。 理想情况下,我想这样做:

mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>"

不幸的是,指定exec.args变量将覆盖我的POM(这是建立在类路径和运行应用程序所需)的参数。 有没有解决的办法? 什么是不覆盖我有什么POM中指定在命令行的一些可选参数的最佳方式?

Answer 1:

我设法找到使用Maven的环境变量相当优雅的解决我的问题。

缺省值被定义为在POM中的属性,并加入到exec插件作为参数:

...
<properties>
    <argumentA>defaultA</argumentA>
    <argumentB>defaultB</argumentB>
</properties>
...
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.2.1</version>
    <configuration>
        <executable>java</executable>
        <arguments>
            <argument>-Djava.library.path=${project.build.directory}/lib</argument>
            <argument>-classpath</argument>
            <classpath />
            <argument>com.example.app.MainClass</argument>
            <argument>-a</argument>
            <argument>${argumentA}</argument>
            <argument>-b</argument>
            <argument>${argumentB}</argument>
        </arguments>
    </configuration>
</plugin>
...

现在,我和我一样以前可以使用默认参数完全相同运行:

mvn exec:exec

我可以很容易地覆盖在使用命令行的每个参数的缺省值:

mvn exec:exec -DargumentA=alternateA -DargumentB=alternateB


文章来源: Using Maven 'exec:exec' with Arguments