Мой вопрос довольно простой, и я немного удивлен, что не мог легко найти ответ, прибегая к помощи googling или документации maven-exec-plugin.
Мне нужно выполнить мою java-программу в моем проекте maven, предоставив оба аргумента jvm, системные свойства и аргументы программы из командной строки во время вызова .
Я ожидаю, что maven предоставит classpass, а также основной класс из pom.xml, чтобы мне не приходилось писать их при вызове моей программы.
Поскольку аргументы 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: what», «-Dexec.systemProperties» и т. Д. Являются просто местозаполнителями для разъяснения моего намерения и могут быть заменены любыми другими целями и аргументами).
Частичный ответ:
Я знаю, что могу использовать exec:java
goal и предоставлять как программные аргументы, так и системные свойства, например:
mvn -Dp1=v1 -Dp2=v2 exec:java -exec:args="a b c"
Это прекрасно работает, так как exec:java
не форкирует новый процесс, поэтому системные свойства, предоставляемые maven, также доступны моей программе. Но тогда я не знаю, как передать флаги jvm, такие как -XX: PringGCDetails, из командной строки.
Конечно, у меня всегда есть возможность создать толстую банку, а затем использовать обычную команду java
для ее вызова.
Тем не менее, я хотел бы знать, есть ли способ настроить maven-exec-plugin или аналогичный, чтобы вызывать мою программу без создания толстого фляги, и все же позволить мне предоставлять системные свойства, jvm и программные аргументы во время призывание.