通过在命令行中提供jvm和程序参数以及系统属性的maven执行Java程序

时间:2018-09-01 09:32:45

标签: java maven exec-maven-plugin

我的问题是非常基本的,我感到有点惊讶,我无法通过谷歌搜索或从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和程序参数。调用。

0 个答案:

没有答案