Я пытаюсь запустить приложение Java с командной строкой через Gradle как часть теста быстрой интеграции. Я переношу свои скрипты сборки из Maven, где это легко было сделать с помощью exec-maven-plugin
. Мои два больших требования:
- Возможность передавать свойства системы исполняемому Java-коду
- Возможность передавать аргументы командной строки исполняемому Java-коду
Обратите внимание, что я не пытаюсь прочитать эти свойства в сборке script, я пытаюсь прочитать их в программе Java, которую создает и выполняет script.
Я нашел два других сообщения SO, которые адресуют выполнение Java-программы через Gradle: один с ответом, который защищает использование apply plugin: "application"
в файле сборки и gradle run
на командной строки и другой с ответами, защищающими этот подход, а также используя task execute(type:JavaExec)
в файле сборки и gradle execute
в командной строке. Я пробовал оба подхода и не добился успеха.
У меня две проблемы:
(1) Я не могу заставить исполняемый файл Java читать свойства системы
Выполняю ли я это:
build.gradle
apply plugin: 'application'
mainClassName = "com.mycompany.MyMain"
Командная строка:
gradle run -Dmyproperty=myvalue
Или это:
build.gradle
task execute (type:JavaExec) {
main = "com.mycompany.MyMain"
classpath = sourceSets.main.runtimeClasspath
}
Командная строка:
gradle execute -Dmyproperty=myvalue
В любом случае myproperty
не проходит. Код, начинающийся с MyMain.main (...)
, считывает системное свойство myproperty
как null/missing.
(2) Я не могу передать аргументы командной строки
Это, вероятно, связано с первой проблемой. В exec-maven-plugin
, например, аргументы командной строки сами были переданы через системное свойство. Это случай с Gradle, или есть другой способ передать аргументы командной строки?
Как мне получить эти переменные? Кроме того, лучше использовать apply plugin: 'application'
или task execute (type:JavaExec)
?