2017-11-19 30 views
26

gradleのリポジトリに公開するときに次のバージョンを取得する方法はありますか?Gradleで次のビルド番号を取得する方法

リポジトリにバージョン3.0.1がある場合は、公開されたバージョンを3.0.2にします。 gradleでそうする方法はあり

<project xmlns:ivy="antlib:org.apache.ivy.ant" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<target name="ivyBuildNumber" description="Use ivy get the next build number"> 
    <ivy:buildnumber 
     resolver="url-chain" 
     organisation="${ivy.organisation}" 
     module="${ivy.module}" 
     revision="${version.base}"/> 

    <echoproperties prefix="ivy.new."/> 
</target> 

ivyはまさにそのbuildnumberという名前antのためのタスクを持っていますか?どうすればgradleのantからivyタスクにアクセスできますか?

build.gradleでは、私はant

ant.importBuild 'build.xml' 
+0

プラグインは次のバージョンをどのように理解できますか?あなたの場合、それは '3.0.2'か' 3.1.0'か '4.0.0'でしょう。いくつかのlibsは完全に異なるバージョン管理基準を持つかもしれません。例えば最新のhibernateバージョンは '5.2.12.Final'です。 –

+0

@OleksandrShpota antのivy:buildnumberタスクは[this](http://ant.apache.org/ivy/history/2.1.0/use/buildnumber)をよく見ています。html) –

+0

あなたのビルド番号を違ったものにした方がいいかもしれません。たとえば、私のバージョンが1.2.4の場合、私のビルド番号は010204になる可能性があります。あなたはデフォルトで1.2.4 - > 1.2.5と010204 - > 010205のような独自のプラグインを書くことができます。私はGradleこれまでのところ私はプラグインを手伝ってはいけません。 – TheKarlo95

答えて

4

長い仕事の後、私はそれをすることができました。私build.gradle

私はこの次のコード

ant.importBuild 'build.xml' 

task getNextBuild(dependsOn : ivyBuildNumber) { 
    doLast{ 
     def nextVersion = ant.properties['ivy.new.revision'] 
     println nextVersion 
    } 
} 

を追加しました私は私のantビルドファイルをインポートし、そしてivybuildnumberタスクを呼び出してタスクを作成しました。

私のがあります。XML

<project xmlns:ivy="antlib:org.apache.ivy.ant"> 

    <target name="ivyBuildNumber"> 
     <path id="ivy.classpath" path="lib/ivy.jar" /> 
     <typedef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.classpath" /> 
     <ivy:buildnumber 
      organisation="daniel" 
      module="hello"/> 
     <echoproperties prefix="ivy.new."/> 
    </target> 
</project> 

私のIDE(のIntelliJ)は、コンテンツ内ivy.jar
を持っていなかったので、私は私のルートディレクトリ(lib/ivy.jar)この正確な動作のために

9

に呼び出す私はGradleの中のサポートがあると思いませんが、Antタスクを使用しようとすることができます。

これを行うもう1つの方法は、プラグインを使用すること、またはバージョンを管理するためのカスタマイズされたタスクを使用することです。

7

はい、あなたはGradleののbuild.gradleファイルにAntのbuild.xmlファイルをインポートすることにより、Antスクリプトからツタタスクにアクセスすることができます。これを行うための構文は次のとおりです。

ant.importBuild 'のbuild.xml'

参照してください:https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build

1
  • からivy.jarを輸入し 、Ivy buildnumberタスクはAntビルドをインポートせずに純粋なGradleを使用して呼び出すことができます:
一般に
configurations { 
    antTasks // define a new configuration 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    antTasks("org.apache.ivy:ivy:2.4.0") // add Ivy library to it 
} 

ext { 
    // define the Ivy task, using the extra configuration as classpath extension 
    ant.taskdef(name: "ivyBuildNumber", 
       classname: "org.apache.ivy.ant.IvyBuildNumber", 
       classpath: configurations.antTasks.asPath) 

    ant.ivyBuildNumber(organisation: "daniel", module: "hello") 
    nextVersion = ant.properties["ivy.new.revision"] 
} 

task demo { 
    doLast { 
     println nextVersion 
    } 
} 
  • 1はプラグインに依存する必要があるので、Gradleのは、Mavenのリリースプラグインへのバンドル相当するものがありません。 1つの固体プラグインはResearchGateのgradle-releaseであり、もう1つはAllegro Techのaxionです。前者は古典的なMavenスタイルのバージョニングであり、後者はSCM自体を唯一の真実のソースとみなし、ビルドファイルのバージョン管理を排除します。しかし、これらのプラグインのどちらも正確な要求された動作を提供しません。

  • 個人的には、バージョン管理上の問題はいくつかのプラグインを使用していました。私はBambooを仕事場でCIサーバーとして使用していたため、文字通り、Gradleを使用してリリースプラグインを使用したすべてが、CIサーバーで遅かれ早かれクラッシュしました。数週間働いていたかもしれませんが、すべてのサーバーの更新でいくつかの問題が発生しました。 (両方の値は、CIサーバによって提供されている)、ベース・バージョンとして、支店名を使用してビルド番号とそれを連結します:私は、単純な規則でSCMレスのアプローチを使用して終了

ext { 
    branch = System.getProperty("branch", "develop") 
    buildNumber = System.getProperty("buildNumber", "latest") 
    isRelease = System.getProperty("isRelease", "false").toBoolean() 
    artifactVersion = "${branch}${(isRelease ? ".$buildNumber" : "-SNAPSHOT")}" 
} 

CIサーバその後、「リリース」ボタンが押されたとき

./gradlew -DisRelease=true -Dbranch=${git.branch} -DbuildNumber=${build.number} mavenPublish 

次のコマンドを実行するために設定することができます。たとえば、3.0ブランチのビルド12では、バイナリリポジトリにバージョン3.0.12が作成されます。

利点は以下のとおりです。
+バージョンでは、枝がそれに応じて命名されていると仮定すると、無料で来る
+自動インクリメントのビルド番号も簡単にカスタムリビジョンを
+なしのプラグイン公開することができます+
無料1のために来ますGradleのバージョンの更新に問題がないことを意味
+このアプローチは死んでシンプルであり、常に動作します

欠点がある:
- ノータグ(すべてでSCMで変更なし - ノーリリースブランチ、など)が、以来、 thビルド番号は常に知られていますが、CIビルド履歴のリビジョンを見ることができます
- いくつかのビルド番号はスキップされます。 3.5.76以降の次のバージョンは3.5.84になる可能性があります)

関連する問題