在 nebula/gradle 之内,如何将正在发布的版本注入到正在发布的 jar 中?

WIthin nebula/gradle, how can I inject the version being released into the jar being published?

我们有一个从命令行运行的工具。其中一个命令是 -version.

在我们转换到 nebula 发布插件之前,版本在 gradle.properties 文件中,作为构建的一部分,我们将它从那里复制到一个 src/main/resources/version.txt 文件,即稍后通过工具读取输出版本。

但现在该版本永远不会在签入 git 的文件中。相反,它只在星云释放过程中才为人所知。

我们想在nebula发布过程中获取那个版本,注入到nebula即将发布的jar中。例如,它可以添加到清单中。

我们已经尝试弄清楚如何执行此操作,但没有在网上看到任何示例,文档中也没有相关内容。

简单的创建一个task缓存Nebula动态推断的版本

由于您最初 copied/created src/main/resources/version.txt,我们将使用该模型来完成我们的任务。

假设一个 simple/standard Java 项目,使用 Kotlin DSL:

val cacheNebulaVersion by tasks.registering {
    mustRunAfter(tasks.named("release"))
    doLast {
        val sourceSets = project.extensions.getByName("sourceSets") as SourceSetContainer
        sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).output.resourcesDir?.let {

            // If there are not existing resources in your project then you must create
            // the resources dir otherwise a FileNotFoundException will be thrown.
            if (!it.exists()) {
                it.mkdirs()
            }

            File(it, "version.txt").printWriter().use { out ->
                out.println(project.version)
            }
        }
    }
}

当我调用 ./gradlew clean build snapshot cacheNebulaVersion 时,Nebula 生成的版本是 build 输出中 src/main/resources/version.txt 处的 cached/created。上面的任务 没有 将其与 jar 捆绑在一起。

希望这能让您知道该怎么做。