web-dev-qa-db-ja.com

Gradleで次のビルド番号を取得する方法

Gradleのリポジトリに公開するときに次のバージョンを入手する方法はありますか?

たとえばリポジトリにバージョン3.0.1がある場合、公開バージョンを3.0.2にしたい。

ivyには、antという名前のタスク buildnumber があります。

<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>

gradleでそうする方法はありますか?そうでない場合、gradleのivyからantタスクにアクセスするにはどうすればよいですか?

私のbuild.gradleでは、antを呼び出しています

ant.importBuild 'build.xml'
27
Daniel Taub

長い仕事の後で、私はなんとかそれをすることができました。

私のbuild.gradleに、次のコードを追加しました

ant.importBuild 'build.xml'

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

antビルドファイルをインポートし、ivybuildnumber タスクを呼び出すタスクを作成しました。

私がいますbuild.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コンテンツ内、
インポートしたivy.jar私のルートディレクトリから(lib/ivy.jar

5
Daniel Taub

Gradleでのサポートはないと思いますが、Antタスクを使用してみることができます。 https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build

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

10
chenrui

はい。antのbuild.xmlファイルをgradleのbuild.gradleファイルにインポートすることで、antスクリプトからivyタスクにアクセスできます。以下はそのための構文です。

ant.importBuild 'build.xml'

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

8
sricheta ruj

ResearchGateリリースプラグインを使用することをお勧めします https://github.com/researchgate/gradle-release かなりのドキュメントがあります。読みやすい。また、個人プロジェクトでどのように使用したかを確認してください。 https://github.com/vatolinrp/bitcoin-esb/blob/master/build.gradle それはあなたにとって素晴らしい例でしょう。

6
rastaman
  • この正確な動作の場合、Antビルドをインポートせずに、純粋なGradleを使用してIvy buildnumberタスクを呼び出すことができます。
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
    }
}
  • 一般に、GradleにはMavenリリースプラグインに相当するバンドルが含まれていないため、プラグインに依存する必要があります。 1つの堅固なプラグインはResearchGateによる gradle-release で、もう1つはAllegro Techによる axion です。前者は古典的なMavenスタイルのバージョン管理であり、後者はSCM自体を唯一の真の情報源と見なし、ビルドファイルのバージョン管理を排除します。しかし、これらのプラグインのどちらも、要求された正確な動作を提供しません。

  • バージョン管理の問題に対する私の個人的な見解は、最初はいくつかのプラグインを使用することでした。私は仕事でBambooをCIサーバーとして使用しているので、文字通りGradleを使用してリリースプラグインで行ったすべてが遅かれ早かれCIサーバーでクラッシュしました。数週間は機能した可能性がありますが、サーバーの更新ごとに問題が発生しました。最終的には、SCMを使用しないアプローチを使用して単純な規則を作成しました。基本バージョンとしてブランチ名を使用し、ビルド番号と連結します(両方の値がCIサーバーによって提供されます)。

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を生成します。

利点は次のとおりです。
+ブランチがそれに応じて名前が付けられていると仮定して、バージョンは無料で提供されます
+自動インクリメントされたビルド番号も無料で提供されます
+カスタムリビジョンを簡単に公開できます
+プラグインがないということは、Gradleのバージョン更新に問題がないことを意味します
+このアプローチは非常にシンプルで、常に機能します

欠点は次のとおりです。
-タグには追加のスクリプトタスクが必要です
-明らかにいくつかのビルド番号がスキップされます(たとえば、3.5.76以降の次のバージョンは3.5.84になる可能性があります)

3
jihor