gpt4 book ai didi

java - Gradle中基于Git的自动版本控制

转载 作者:行者123 更新时间:2023-12-03 03:28:44 25 4
gpt4 key购买 nike

我想通过Git标签在Gradle中实现Java项目的自动版本控制。目前,我正在使用git describe命令生成版本字符串。版本字符串必须在 list 文件中使用,并且也可以通过编程方式检索。这就是为什么我实现了一种方法,将其保存在构建文件中包含的属性文件中,并且可以被Java代码读取的原因。

我目前拥有的是这个小Gradle插件(我真的是gradle的新手):

apply plugin: 'java'
apply plugin: VersioningPlugin

class VersioningPlugin implements Plugin<Project> {

private Project project;

private String getVersion() {
def stdout = new ByteArrayOutputStream()
project.exec {
commandLine 'git', 'describe', '--tags'
standardOutput = stdout
}
stdout.toString().trim()
}

@Override
void apply(Project project) {
this.project = project

project.extensions.create('versioning', VersioningPluginExtension)

project.versioning.version = getVersion()

project.task('writeVersionFile') {
doLast {
def versionPropsFile = project.versioning.versionFile
def versionProps = new Properties()
versionProps.put('version', getVersion())
versionProps.store(versionPropsFile.newWriter(), null)
}
}
}
}

class VersioningPluginExtension {
File versionFile
String version
}

compileJava.dependsOn writeVersionFile

我在构建脚本中使用它,如下所示:
apply from: 'versioning.gradle'
versioning {
versionFile = file('my/ressource/folder/version.properties')
}
println(versioning.version)

一切正常。我唯一的问题如下:我使用gradle构建和测试我的代码,然后提交代码并创建git标签。如果我现在要求gradle不先清理就打包jar文件,它不会将新的version.properties复制到jar文件中,因为它没有注意到文件已更改。所以我的应用程序显示了旧版本。

有什么我可以做的吗?如何获得通知以注意版本更改并使用当前 version.properties文件创建一个jar?

最佳答案

您需要做的是为TaskOutputs任务配置一个from(或Jar),以便它可以识别是否已更改并可以运行而无需显式调用clean。这可以通过以下方式完成:

jar {
from versioning.versionFile
}

其次。您可以用类似的方式配置 writeVersionFile。如果同时配置输入和输出,则任务将是可缓存的。 here可以看到它的变化方式, here可以找到一个演示。

另外,请注意,您的任务现在已在 afterEvaluate闭包中创建。这是为什么?因为这是在执行 versioning {}扩展并设置 versionFile属性并将其配置为输出之后。

您也可以在 jar文件中配置 versioning.gradle输入。

关于java - Gradle中基于Git的自动版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43074676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com