Я намагаюся запустити програму Java з командного рядка через Gradle в рамках швидкого тесту інтеграції. Я переношу свої сценарії збірки з Maven, де це було легко зробити за допомогою exec-maven-plugin
. Мої дві великі вимоги:
- Можливість передавати властивості системи виконуваному коду Java
- Можливість передавати аргументи командного рядка виконуваному коду Java
Зверніть увагу, що я не намагаюся прочитати ці властивості у сценарії побудови, я намагаюся прочитати їх у програмі Java, яку створює та виконує сценарій.
Я знайшов дві інші публікації 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
системну властивість як нульову / відсутню.
(2) Я не можу передавати аргументи командного рядка
Ймовірно, це пов’язано з першою проблемою. В exec-maven-plugin
, наприклад, в командному рядку арг були самі пройшли в с допомогою системного властивості. Це випадок із Gradle, чи є інший спосіб передачі аргументів командного рядка?
Як отримати ці змінні? Крім того, чи краще використовувати apply plugin: 'application'
чи task execute (type:JavaExec)
?