Gradle:使构建版本可用于Java

2022-09-02 09:02:07

默认情况下,所有 gradle java 项目都有一个属性。通常,这看起来像这样:version

allprojects {
    apply plugin: 'java'
    // ...

    // configure the group and version for this project
    group = 'org.example'
    version = '0.2-SNAPSHOT'
}

有没有办法使这里定义的“version”属性可用于构建的java代码?我希望在项目中有一个这样的类:

public class BuildVersion {

    public static String getBuildVersion(){
        return // ... what was configured in gradle when project was built
    }

}

我想这可以通过某种源代码生成来完成。或者让 gradle 将变量写入 中的某种配置文件。在Gradle中是否有“标准”(即普遍接受)方法来做到这一点?src/main/resources


答案 1

假设您的 Gradle 脚本将 正确插入到 jar 清单中,如下所示:version

version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

您的代码将能够从该 jar 清单文件中获取版本:

public class BuildVersion {

    public static String getBuildVersion(){
        return BuildVersion.class.getPackage().getImplementationVersion();
    }

}

或者,编写一个 Gradle 任务,用于创建包含版本的属性文件,并将生成的属性文件包含在 jar 文件中,然后使用 访问它。getResouceAsStream()

当然,您也可以从 Gradle 任务生成文件,将版本直接嵌入为字符串文本,并确保任务在任务之前运行。BuildVersion.javacompile

但我建议只使用你已经包含的版本号(清单文件),Gradle和Java运行时都完全支持编写它,没有任何自定义Gradle任务或Java文件读取。


答案 2

推荐