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

How to get value from gradle.properties in .class file at the time of build

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

如果你说出你的具体用例,会更容易回答。 了解您的应用程序也会有所帮助,例如它是 Spring(启动)应用程序吗?在那种情况下,使用 Spring 配置文件可能更有意义。

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

  • 创建一个属性文件并将其放在您的资源文件夹中。定义一个占位符,gradle 可以替换。例如文件 "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");
        }
    }