我想通過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