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'
長い仕事の後で、私はなんとかそれをすることができました。
私のbuild.gradleに、次のコードを追加しました
ant.importBuild 'build.xml'
task getNextBuild(dependsOn : ivyBuildNumber) {
doLast{
def nextVersion = ant.properties['ivy.new.revision']
println nextVersion
}
}
ant
ビルドファイルをインポートし、ivy
buildnumber
タスクを呼び出すタスクを作成しました。
私がいます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
)
Gradleでのサポートはないと思いますが、Antタスクを使用してみることができます。 https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build
これを行う別の方法は、ある種のプラグイン、またはバージョンを管理するためのカスタマイズされたタスクを使用することです。
はい。antのbuild.xmlファイルをgradleのbuild.gradleファイルにインポートすることで、antスクリプトからivyタスクにアクセスできます。以下はそのための構文です。
ant.importBuild 'build.xml'
参照してください: https://docs.gradle.org/current/userguide/ant.html#sec:import_ant_build
ResearchGateリリースプラグインを使用することをお勧めします https://github.com/researchgate/gradle-release かなりのドキュメントがあります。読みやすい。また、個人プロジェクトでどのように使用したかを確認してください。 https://github.com/vatolinrp/bitcoin-esb/blob/master/build.gradle それはあなたにとって素晴らしい例でしょう。
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になる可能性があります)