我正在寻找一个简单的解决方案来在编译之前查找和替换常量。例如@Version@
替换为1.0.0
,因此程序可以访问正确的版本#s
。
答案 0 :(得分:1)
我认为比更改源代码更好的方法是将版本信息保存在jar中的属性文件中。 (例如src/main/resources/versioninfo.properties
)。在构建过程中,可以使用ReplaceTokens过滤器简单地更改此文件:
processResources {
inputs.property "version", project.version
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.version])
}
然后,您可以从单例类中读取此版本信息。
答案 1 :(得分:0)
如果您因项目限制确实需要更改资源,这可能对您有用:
假设您的版本信息保存在名为VersionInfo.java
的类中,以下代码段将原始VersionInfo源从默认文件夹复制到生成的文件夹中,并通过更新版本信息处理该文件。 compileJava任务将此生成的文件作为另一个源并忽略原始文件以避免在编译期间出现重复的类名错误:
task preprocessVersionInfo(type:Copy){
include "VersionInfo.java"
from "src/main/java"
into "$buildDir/preprocessedJava"
inputs.property "version", project.version
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.version])
}
compileJava {
source preprocessVersionInfo.outputs.files
exclude {
it.file.absolutePath.endsWith("src/main/java/VersionInfo.java")
}
}
旁注:此方法保持IDE设置不变,意味着在开发期间您将继续使用未修改的VersionInfo类。