Gradle.properties не передан в мое приложение Java - PullRequest
1 голос
/ 12 июня 2019

Issue

У меня есть файл gradle.properties уровня проекта, который определяет различные значения systemProp.* (особенно прокси). Я получил эту идею из документации .

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

Однако, похоже, что ни одно из этих значений systemProp не передается.

Я неправильно понимаю, как это должно работать?

Повторяющийся пример

Я создал небольшое репозиторий GitHub, который показывает это в действии: https://github.com/gmacster/gradle-system-properties-passthrough

У меня есть пользовательский systemProp, определенный в gradle.properties, который называется some-sample-prop. Мой метод main() читает значение этого свойства и регистрирует его.

Я просто запускаю gradlew run без лишних аргументов.

Информация о версии

------------------------------------------------------------
Gradle 5.4.1
------------------------------------------------------------

Build time:   2019-04-26 08:14:42 UTC
Revision:     261d171646b36a6a28d5a19a69676cd098a4c19d

Kotlin:       1.3.21
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          11.0.2 (Oracle Corporation 11.0.2+9-LTS)
OS:           Windows 10 10.0 amd64

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Системные свойства, определенные в gradle.properties, передаются только JVM, на которой запущен сам Gradle, а не JVM, которые разветвляются каким-либо плагином, который вы используете для запуска своего приложения. Поэтому, чтобы передать системные свойства из Gradle в приложение, которое запускается Gradle, вам необходимо вручную скопировать их в свойство systemProperties задачи JavaExec. Предполагая, что вы используете задачу run, предоставляемую плагином приложения , и у вас есть systemProp.proxy.host=example.proxy.host.com в вашем файле gradle.properties, вам нужно это сделать (см. Также старый ответ на форумах Gradle):

task.named('run') {
    systemProperties = [
        'proxy.host': System.getProperty('proxy.host')
    ]
}

Но позвольте мне спросить вас, зачем вам эта косвенность. Я предполагаю, что вам нужны только эти свойства для запуска приложения. В этом случае было бы проще определить их непосредственно в сценарии сборки:

task.named('run') {
    systemProperties = [
        'proxy.host': 'example.proxy.host.com'
    ]
}
0 голосов
/ 12 июня 2019

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

Я предлагаю вам иметь application.properties в src / main / resources и прочитайте файл оттуда.

Но, если вы хотите сохранить его в gradle.properties, вот как вы можете получить его:

public static void main(String[] args) throws IOException {

    FileInputStream input = new FileInputStream("gradle.properties");

    // load a properties file
    Properties prop = new Properties();
    prop.load(input);

    System.out.println(prop.getProperty("systemProp.some-sample-prop"));
}

Будет напечатано:

hello world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...