Как получить значение из gradle.properties в файле .class во время сборки - PullRequest
0 голосов
/ 13 марта 2019

Я хотел бы получить значение свойства из Gradle.properties в классе Java.В Java значение должно быть заменено во время сборки, а в файле .jar (.class) значение будет приходить, но не в файле .java.Так что мы можем изменить значение непосредственно в gradle.properties и не нужно менять код.Можно ли добиться?

1 Ответ

0 голосов
/ 14 марта 2019

Было бы проще ответить, если бы вы указали свой конкретный вариант использования. Также это поможет узнать ваше приложение, например, это приложение Spring (Boot)? В этом случае, вероятно, было бы более разумно использовать Spring Profiles для этого.

В любом случае, вот возможное решение:

  • Создайте файл свойств и поместите его в папку ресурсов. Определите заполнитель, который может заменить gradle. Например, файл "myapp.properties"

    greetingText=@greeting@
    
  • Добавьте токен (текст между '@') в ваш gradle.properties:

    greeting=Hello world!
    
  • Заставьте build.gradle заменить токен значением из gradle.properties, настроив задачу processResources:

    processResources {
        inputs.file file('gradle.properties')
        filter(
                ReplaceTokens, 
                tokens: [
                        greeting: project.ext.greeting
                ]
        )
    

    }

  • Во время выполнения загрузить значение из файла свойств:

    public String getGreeting() throws IOException {
        try (
            InputStream inputStream = Thread.currentThread().getContextClassLoader().getResource("myapp.properties").openStream();
        ) {
            Properties appProps = new Properties();
            appProps.load(inputStream);
            return appProps.getProperty("greetingText");
        }
    }
    
...