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

最佳答案

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

假设您的版本信息保存在名为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类。

10-06 01:35