2016-05-06 68 views
1

我想在版本控制系統中自動發佈管理併發布相關的工件。gradle動態計算髮布版本

所以我用下面的構建腳本(簡化版本進行測試)

apply plugin: 'java' 
apply plugin: 'maven-publish' 

// --- Setup artifactory server repository --- 
    artifactory_contextUrl="http://vie2rhp02904" 
    artifactory_user="admin" 
    artifactory_password="..." 
    repositories { 
    maven { url "${artifactory_contextUrl}/libs-release" } 
    } 
// ------------------------------------------- 

defaultTasks 'doit' 

group = 'release-test' 

version = "13.7-SNAPSHOT" 

// --- Setup publishing parameters --- 
    publishing.repositories { 
    maven { 
     credentials { 
     username "${artifactory_user}" 
     password "${artifactory_password}" 
     } 
     if (project.version.endsWith('-SNAPSHOT')) { 
     url "${artifactory_contextUrl}/libs-snapshot-local" 
     } else { 
     url "${artifactory_contextUrl}/libs-release-local" 
     } 
    } 
    } 

    project.publishing.publications { 
    mavenJava(MavenPublication) { 
     from components.java 
    } 
    } 
// ------------------------------------------- 

task createReleaseVersion << { 
    println("Version at start: $version") 
    // Doing release management, which builds a tagged version without the "-SNAPSHOT" phrase 
    version = "13.7.0" 
    println("actual version: $version") 
} 

task doit (dependsOn: ['createReleaseVersion', 'publish']) << { 
} 

publish.mustRunAfter createReleaseVersion 

萬物很好,只要我沒有任務的執行中改變版本性質的作品。 (在createReleaseVersion完成任務)

如果我更改版本,JAR文件與正確的名稱創建的,但出版要根據舊版本使用的名稱。

如何使用在任務執行期間計算的版本進行發佈?

回答

0

發生這種情況是因爲publishing是在任務執行前配置的。

我不確定在執行過程中是否可以安全地更新publishing配置(可以嘗試)。解決這個問題的更好方法是使用項目參數。例如,你可以改變build.gradle這樣的:

version = "13.7" 
if (!project.hasProperty('buildRelease')) { 
    version += "-SNAPSHOT"; 
} 

如果你可以簡單的運行任務,版本將13.7-SNAPSHOT

但是,如果你設置項目屬性buildRelease,版本將是13.7

要設置項目屬性使用-P前綴當您運行任務時,例如:

gradle publish -PbuildRelease=true 
+0

T爲了你的回答,我知道原因是因爲執行的順序。 但我希望有一種解決方法。 後續配置編輯不被gradle允許。 (已經嘗試過) 手動設置版本不會讓我更進一步,因爲此任務的主要原因是自動計算新版本。 我現在的woarkaround是使用批處理文件,它會調用gradle兩次。我第一次更新gradle.properties文件中的版本屬性,然後使用新版本來完成其餘部分。 但我寧願做它在一個呼叫 – Horst

+0

@Horst你可以把你的任務的代碼我的if語句裏面?您可以將其添加到問題中,以便我們可以看到發生了什麼 – AdamSkywalker

+0

對不起,我不知道,你是什麼意思?可以通過使用我的構建腳本調用「gradle doit」來重現我的問題。它以錯誤的(最初設置的)版本發佈 – Horst