Gradle-依存関係の最新リリースバージョンの取得


93

Gradle次のことを伝える最も簡単な方法は何でしょうか。

「junit」依存関係を取得し、最新の「リリース」バージョンを取得します。

MavenおよびIvyリポジトリーの管理は、私にとっては初めてのことです。次の手順を実行したところ、Could not resolve dependency ...エラーが発生しました。

  • compile "junit:junit:latest.release"リポジトリーのみを設定して書き込みます(ただし、「junit:junit:4.10」と言っても機能しますmavenCentral() )。

  • compile "junit:junit:latest.release"リポジトリセットを使用して次のように記述します。

    ivy {
        // I also tried 'http://maven.org' and other possible variants.           
        url "http://repo1.maven.org" 
        layout "maven"
    }
  • Spring Source Ivyリポジトリを使用しようとしました:

    ivy {
        artifactPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
        ivyPattern "http://repository.springsource.com/ivy/libraries/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
    }

多分私は何かを誤解しています。依存関係の最新バージョンを取得するのがそれほど難しい作業になるのはなぜですか?


動的バージョンは、利用可能な最新バージョンのプレースホルダーにすることができますlatest.integration動的バージョンの
Gradle

回答:


48

Gradleは現在、Maven RELEASE(めったに使用されず、非推奨)をサポートしていませんが、Ivyをサポートしていlatest.releaseます。ただし、一般的な推奨事項は、正確なバージョンに対してビルドすることです。そうでなければ、ビルドは宝くじになる可能性があります。


MavenはRELEASEもサポートしていません。固定バージョン番号のみ。
khmarbaise 2012

10
私は再確認しました。MavenはサポートしていますRELEASEバージョン2と3の両方で、
ピーターNiederwieser

あなたが正しいです。プラグインのバージョンと間違えたので、Maven 3ではRELEASE / LATESTが許可されなくなりました。ただし、そのようなバージョン識別子を使用することはもちろん悪い習慣です。
khmarbaise 2012

Mavenリリースリポジトリのアーティファクトは、可能なすべての自動化された(おそらく手動の)テストを完了したものです。そのプロセスには、API互換性チェック、回帰テストなどが含まれます。なぜそのビルドは宝くじになるのですか?十分にテストされていないアーティファクトを「解放」する場合のみ。
RCross 2014年

2
グレードは「latest.release」をサポートします(「RELEASE」はサポートしません)。これは、独自の内部ライブラリが最新の実証済みバージョンであることを確認するのに非常に役立ちます。もちろん、Peterが上記と同じ理由で、外部/サードパーティライブラリの使用を推奨することはありません。
RCros

257

最新のリリースを取得することは非常に便利です。たとえば、独自の依存関係を頻繁にリリースする場合などです。

次のような最新バージョンを入手できます

compile "junit:junit:+"

または、少なくとも次のようなメジャーバージョンを指定します

compile "junit:junit:4.+"

27
参考までに、それは確かに二重引用符である必要があります。私はほとんどの依存関係宣言に単一引用符を使用してcode 'junit:junit:4.+'いて、それが機能しないことがわかりました
azonli

1
@azonliは、少なくともローカル依存関係では、一重引用符で私のために働くようです。どのようなエラーが発生しますか?
David Moles 14

3
「コンパイル」ではなく「testCompile」にすべきではありませんか?リリースにはアーティファクトは必要ないため
MartinDürrmeier、

6
常に再現可能なビルドが必要なわけではありません。
Lakatos Gyula 2016

2
@SimonForsberg ...確かに、開発中の場合は、(a)最先端を行くか、(b)vのバグ修正が4.+プロジェクトで最新に保たれるようにする必要があります。 アルファ、ベータ、-RCまたは-RELEASEステージに到達すると、これらのバージョンをポールに「釘付け」する必要があることに完全に同意します。私はproperties' file to set version specifiers: コンパイル "junit:junit:$ { junitVer }" ` を使用します。
意志

25

Gradle-Versions-Pluginをチェックしてください。それはあなたが望むものを正確に行います:https : //github.com/ben-manes/gradle-versions-plugin

インストールについては、githubのページを参照してください。基本的に、次の2行をbuild.gradle-プロジェクトファイルに追加する必要があります。

apply plugin: 'com.github.ben-manes.versions'

buildscript {
    [...]
    dependencies {
        classpath 'com.github.ben-manes:gradle-versions-plugin:0.8'
        [...]
    }
}
[...]

次に、プロジェクトのディレクトリのターミナルで次のコマンドを実行して、プラグインを使用できます。

./gradlew dependencyUpdates -Drevision=release

そして、どの依存関係が古いかが表示されます!


すべてのプロジェクトにプラグインを含めたくない場合は、これをinitscriptに追加することもできます。詳細については、別の質問に対するこの回答を参照してください。
ローレンスゴン

依存関係が同じリポジトリにあり、常に最新バージョンが必要な場合はどうなりますか?
バリーケリー

8

最新のGradleユーザーガイドでは、プラスサインインバージョンについて言及および説明しています。

7.2から依存関係の宣言

dependencies {
    compile group: 'org.hibernate', name: 'hibernate-core', version: '3.6.7.Final'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

...ビルドスクリプトは、プロジェクトのテストをコンパイルするためにjunit> = 4.0が必要であることも示しています。

23.7から依存関係の解決の仕組み

依存関係が動的バージョン(1. +など)として宣言されている場合、Gradleはこれをリポジトリで利用可能な最新の静的バージョン(1.2など)に解決します。Mavenリポジトリの場合、これはmaven-metadata.xmlファイルを使用して行われますが、Ivyリポジトリの場合、これはディレクトリリストによって行われます。


1
重要なヒント:+は必ずしも最新バージョンを取るとは限りません。上記の私のコメントを参照してください。
ハリーG.

3

Android Studioの場合:

あなたが使用している場合は+、バージョンのために、とされているバージョンを知りたい、実際に使用されて、選択Projectサイドバーにして、下のExternal Librariesご使用中の実際のバージョン番号が表示されます。


特定のIDEを参照していますか?:-)
Inego

Inego:はい、答えに追加しました;-)
lenooh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.