【问题标题】:Change version constant before compile编译前更改版本常量
【发布时间】:2015-06-07 22:57:10
【问题描述】:

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

【问题讨论】:

    标签: java intellij-idea gradle compilation


    【解决方案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])
    }
    

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

    【讨论】:

    • 是的,这将是一个更好的方法。但是,由于项目的限制,我必须使用一个常量,然后在 Annotation "@Plugin(Name, ID, Version)" 中引用该常量
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多