【发布时间】:2015-06-07 22:57:10
【问题描述】:
我正在寻找一个简单的解决方案来在编译之前查找和替换常量。例如@Version@ 替换为1.0.0,因此程序可以访问正确的版本#s。
【问题讨论】:
标签: java intellij-idea gradle compilation
我正在寻找一个简单的解决方案来在编译之前查找和替换常量。例如@Version@ 替换为1.0.0,因此程序可以访问正确的版本#s。
【问题讨论】:
标签: java intellij-idea gradle compilation
我认为比更改源代码更好的方法是将版本信息保存在 jar 的属性文件中。 (例如src/main/resources/versioninfo.properties)。可以在构建过程中使用 ReplaceTokens 过滤器简单地更改此文件:
processResources {
inputs.property "version", project.version
filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.version])
}
然后您可以从单例类中读取此版本信息。
【讨论】:
如果由于项目限制您确实需要更改来源,这可能对您有用:
假设您的版本信息保存在名为VersionInfo.java 的类中,以下 sn-p 将原始 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 类。
【讨论】: