0

我想从 Java 类中的 Gradle.properties 获取属性值。在 Java 中,应该在构建时替换该值,并且在 .jar(.class) 文件中会出现该值,但不会出现在 .java 文件中。这样我们就可以直接在 gradle.properties 中更改值,而无需更改代码。有没有可能实现?

4

1 回答 1

1

如果您告诉您的具体用例,会更容易回答。了解您的应用程序也会有所帮助,例如它是 Spring(Boot)应用程序吗?在这种情况下,使用 Spring Profiles 可能更有意义。

无论如何,这是一个可能的解决方案:

  • 创建一个属性文件并将其放在您的资源文件夹中。定义一个占位符,该 gradle 可以替换。例如文件“myapp.properties”

    greetingText=@greeting@
    
  • 将令牌('@'s 之间的文本)添加到您的 gradle.properties:

    greeting=Hello world!
    
  • 通过配置 processResources 任务,使 build.gradle 用 gradle.properties 中的值替换令牌:

    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");
        }
    }
    
于 2019-03-14T10:00:54.503 回答