2013-12-18 2 views
9

Мне было интересно, можно ли установить системное свойство для приложения Java, используя Gradle?Как установить системное свойство с помощью gradle?

Я попытался с помощью gradle.properties файла и определение свойств, как

systemProp.name = my name 

но потом, когда я пытаюсь получить это свойство из приложения Java с помощью

System.getProperty("name") 

свойства не найдено.

build.gradle и gradle.properties находятся в корневой папке проекта.

Это то, что мой build.gradle выглядит следующим образом:

apply plugin: 'war' 
apply plugin: 'appengine' 

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.google.appengine:gradle-appengine-plugin:1.8.6' 
    } 
} 

appengine { 
    httpPort = 8081 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile group: 'com.google.inject', name: 'guice', version: '3.0' 
    compile group: 'com.google.inject.extensions', name: 'guice-servlet', version: '3.0' 
    compile group: 'javax.servlet', name: 'servlet-api', version: '2.5' 
    compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '4.2.0.Final' 
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.27' 
    compile 'com.google.protobuf:protobuf-java:2.5.0' 
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.8.6' 
    compile 'com.google.template:soy:2012-12-21' 
    compile 'org.json:json:20090211' 
} 

И это то, что мои build.properties выглядеть следующим образом:

systemProp.firstName=Marko 
systemProp.lastName=Vuksanovic 

Это часть приложения AppEngine и я его запускаю используя следующую команду:

gradle appengineRun 
+0

Как ваш билд код выглядеть, который запускает приложение Java? Отправьте сообщение 'build.gradle'. –

ответ

3

Системное свойство, установленное в gradle.properties, будет быть доступным только в JVM, где работает Gradle.

Из gradle-appengine-plugin документации:

appengineRun: Запускает локальный сервер, на котором выполняется ваш проект кода.

jvmFlags: флаги JVM передаются на локальный сервер разработки.

Если вам нужно, чтобы ваши свойства системы были доступны в движке приложения, который является отдельным JVM, вы должны использовать свойство jvmFlags.

Явное:

appengine { 
    jvmFlags = ['-DfirstName=Marko', '-DlastName=Vuksanovic'] 
} 

С gradle.properties:

appengine { 
    jvmFlags = ['-DfirstName=$firstName', '-DlastName=$lastName'] 
} 
5

Я просто наткнулся на это для использования с Gradle плагин приложения. Добавьте в задачу выполнения. Работает отлично:

run { 
    systemProperties['MYPROP'] = '/my/prop/value' 
} 
+2

Это не работает для меня, получая '> Не удалось найти метод run() для аргументов [build_3q2qbgis9k2n97muogsnwks4i $ _run_closure5 @ 3172da27]' – gromit190

4

Это, как я это сделать, установив реквизит для Selenide испытательной базы:

test { 
    systemProperty "browser", "chrome" 
    systemProperty "webdriver.chrome.driver", "$projectDir/drivers/chromedriver" 
} 
Смежные вопросы