我有一个项目配置为使用 Maven 构建和运行。该项目依赖于平台特定的本机库,我正在使用此处找到的策略来管理这些依赖项。
本质上,特定平台的.dll
or文件被打包到一个 jar 中,并通过识别目标平台的分类器推送到 Maven 服务器。.so
然后 maven-dependency-plugin 解包平台特定的 jar,并将本机库复制到目标文件夹。
通常我会mvn exec:java
用来运行 Java 程序,但exec:java
在与 Maven 相同的 JVM 中运行应用程序,这会阻止我修改类路径。由于必须将本机依赖项添加到类路径中,因此我被迫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 中的内容的最佳方法是什么?