我的问题是非常基本的,我感到有点惊讶,我无法通过谷歌搜索或从maven-exec-plugin文档中轻松找到答案。
我需要在我的maven项目中执行Java程序,同时在调用时从命令行提供 jvm参数,系统属性和程序参数。
我希望maven提供pom.xml的classpass和主类,这样我在调用程序时就不必编写它们。
由于jvm参数,系统属性和程序参数因调用而异,因此无法在pom.xml中指定它们。
我想做这样的事情:
调用1:
mvn exec:whatever -Dexec.systemProperties='p1=v1' -Dexec.jvmArguments='-XX:NewRatio=1' -Dexec.args='a b c'
调用2:
mvn exec:whatever -Dexec.systemProperties='p2=v2 p3=v3' -Dexec.jvmArguments='-Xmx=10g -XX:PrintGCDetails' -Dexec.args='f h g'
(“ exec:whatever”,“-Dexec.systemProperties”等只是占位符,目的是阐明我的意图,并且可以用任何其他目标和参数代替)。
部分答案:
我知道我可以使用exec:java
目标并提供程序参数和系统属性,如下所示:
mvn -Dp1=v1 -Dp2=v2 exec:java -exec:args="a b c"
这很有效,因为exec:java
不会派生新进程,因此我的程序也可以访问提供给maven的系统属性。但是然后我不知道如何从命令行传递jvm标志,例如'-XX:PringGCDetails'。
当然,我总是可以选择创建一个胖子罐,然后使用常规的java
命令来调用它。
但是我想知道是否有一种方法可以调整maven-exec-plugin或类似的方法来调用我的程序而无需创建一个胖jar,并且仍然允许我在系统运行时提供系统属性,jvm和程序参数。调用。