如何在构建时从.class文件中的gradle.properties获取值

时间:2019-03-13 15:06:47

标签: java gradle build.gradle .class-file gradle.properties

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

1 个答案:

答案 0 :(得分:0)

如果您告诉了您特定的用例,回答起来会更容易。 知道您的应用程序也会有所帮助,例如,它是Spring(引导)应用程序吗?在这种情况下,使用Spring Profiles可能更有意义。

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

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

    greetingText=@greeting@
    
  • 将令牌(“ @”之间的文本)添加到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");
        }
    }