Аргументы JVM в NetBeans с gradle

У меня возникли трудности с передачей аргументов JVM в NetBeans в мой проект Gradle. Мои предыдущие попытки не увенчались успехом, и, возможно, кто-то может мне помочь.

Вот то, что я пробовал до сих пор:
Я добавляю аргумент JVM, щелкнув правой кнопкой мыши на project -> Properties — > > Build In Tasks ->>> Run — > > > > > помещая значение JVM в назначенное поле

-Dtest=mytestvalue

(К сожалению, моя репутация недостаточно высока, чтобы добавить встроенные изображения)
Когда я запускаю проект после этого с помощью правой кнопки мыши и запустить его дисплей:

Executing: gradle :run
Arguments: [-PcmdLineArgs=, -c, D:NetBeansProjectsappsettings.gradle]
JVM Arguments: [-Dtest=mytestvalue]

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run

10:54:55.899 [main] System.getProperty('test') null

Таким образом, аргументы отображаются, JVM Arguments: [-Dtest=mytestvalue]но не передаются в приложение, кажется, и System.getProperty('test')приводит к null. Я также попытался использовать пользовательские задачи с тем же эффектом.

Если я создаю файл jar и передаю аргументы, все работает так, как ожидалось:

λ java -Dtest=mytestvalue -jar app.jar
System.getProperty('test') mytestvalue

System.getProperty('test') результаты mytestvalueВ.

Мой текущий обходной путь должен установить аргументы JVM в сборке.gradle файл, который работает хорошо, но я хочу избавиться от записи аргументов непосредственно в этот файл.

Я использую Gradle 3.3 и NetBeans 8.2

3 ответа

  1. Существует разница между передачей свойства gradle build и передачей его приложению. Вы уже знаете, что вы можете установить свойство в вашем build.gradle(это описано в разделе https://docs.gradle.org/current/userguide/application_plugin.html ). То, что вы можете сделать, это передать свойство Gradle и внутри buildfile искать его и передать его дальше в запущенное приложение.
    BTW: при этом вы можете передать системное свойство (- D) или свойство проекта (-P) Gradle, как описано в разделе https://docs.gradle.org/current/userguide/build_environment.html#properties

  2. Спасибо @MarvinFrommhold и его сообщению https://stackoverflow.com/a/26141841/7220665 наконец-то я нашел то, что хотел.

    Я просто должен был продлить задачу run с

    run {
        systemProperties = System.properties
    }
    

    и мои аргументы передаются в мое приложение, где я могу его использовать.

    ОБНОВЛЕНИЕ

    Описанный выше подход работает по назначению, но если вы не хотите делегировать все свойства, вы можете указать те, которые вам нужны. Например, вы хотите установить mytestvalue

    вы проходите через NetBeans

    -Dtest=mytestvalue
    

    и в build.gradle

    run {
        // delegate the property 'mytestvalue' to the jvm 
        systemProperty "mytestvalue", System.getProperty("mytestvalue")
    
        // confirm that the property has been delegated
        println "mytestvalue: " + systemProperties["mytestvalue"]
    }