如何在构建时从 .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");
}
}
我想从 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"); } }