2016-05-06 7 views
1

バージョン管理システムでリリース管理を自動化し、関連する成果物を公開したいと考えています。gradle dynamic公開版の計算

そこで私は限り私はタスクの実行中にバージョンプロパティを変更しないと正常に動作するスクリプト(テスト用簡易版)

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では許可されていません。 (既に試してみました) 手動でバージョンを設定しても、この作業の主な理由は自動的に新しいバージョンを計算するためです。 現時点では、gradleを2回呼び出すバッチファイルを使用しています。最初にgradle.propertiesファイルのversionプロパティを更新し、新しいバージョンを使用して残りの作業を行います。 しかし、私はそれを1回の呼び出しで行うことを好むでしょう。 – Horst

+0

@Horst私のif文の中にあなたのタスクのコードを置くことができますか?質問に追加して何が起こっているのかを確認することができます – AdamSkywalker

+0

申し訳ありませんが分かりませんが、どういう意味ですか?私のビルドスクリプトで "gradle doit"を呼び出すことで、私の問題を再現することができます。間違った(最初に設定された)バージョンで公開します – Horst

関連する問題