Я намагаюся запустити програму 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)?