我想通过Git标签在Gradle中为java-projects实现自动版本控制。目前我正在使用git describe命令来生成版本字符串。版本字符串必须在清单文件中使用,也可以通过编程方式检索。这就是为什么我实现了一种方法将其保存在构建中包含的属性文件中,并且可以通过Java代码读取它。基于Git的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
我用它在我的构建scrips这样的:
apply from: 'versioning.gradle'
versioning {
versionFile = file('my/ressource/folder/version.properties')
}
println(versioning.version)
一切正常OK 。我遇到的唯一问题是:我使用gradle构建并测试我的代码,然后提交代码并创建一个git标记。如果我现在要求gradle首先打包一个jar文件而不进行清理,它不会将新的version.properties复制到jar文件中,因为它没有注意到该文件已更改。所以我的应用程序显示旧版本。
我能做些什么吗?我如何才能使Gradle注意到版本更改并使用当前的version.properties
文件创建一个jar?
看起来您需要让插件更新'project.version'属性,或者在写入时更改jar名称。 – cjstehno
你见过我的回答吗?它解决了问题吗? – Opal