编译前更改版本常量

Change version constant before compile

我正在寻找一个简单的解决方案来在编译之前查找和替换常量。例如 @Version@ 替换为 1.0.0,因此程序可以访问正确的版本 #s

我认为比更改源代码更好的方法是将版本信息保存在 jar 的属性文件中。 (例如 src/main/resources/versioninfo.properties)。可以在构建过程中使用 ReplaceTokens 过滤器简单地更改此文件:

processResources {
    inputs.property "version", project.version
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: [version: project.version])
}

然后您可以从单例中读取此版本信息class。

如果由于项目限制,您确实需要更改源,这可能对您有用:

假设您的版本信息保存在名为 VersionInfo.java 的 class 中,以下代码段将原始 VersionInfo 源从默认文件夹复制到生成的文件夹中,并通过更新版本信息处理文件.您的 compileJava 任务将此生成的文件作为另一个来源并忽略原始文件以避免编译期间出现重复的 class 名称错误:

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 class.