web-dev-qa-db-ja.com

Gradle 5 JUnit BOMおよびSpring Bootの誤ったバージョン

Gradle 5のBOM(部品表) feature を使用しています。これは、JUnit 5の依存関係について説明する方法です。

_testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testImplementation("org.junit.jupiter:junit-jupiter-params")
_

私の想定では、BOMを提供すると、依存関係のバージョンが_5.4.0_に解決されるということです。ただし、それらは_5.1.1_に解決されます。理由はわかりません。 (指定したバージョンをロックするためにenforcedPlatform()もリクエストします)

enter image description here

検査 JUnit 5のBOM すべての_org.junit.jupiter_依存関係がバージョン_5.4.0_(プロジェクトで5.1.1に解決)とともにリストされ、すべての_org.junit.platform_依存関係がリストされていることがわかりますプロジェクトで正しく解決されるバージョン_1.4.0_を使用します。

私は何が欠けているのかわからないので、ここで助けを得たいと思っていました。ありがとう!

編集:

Sormuras応答を使用して、すべてのBOMを_dependencies {}_ブロックの先頭に移動しましたが、バージョン_5.4.0_がまだ取得されていませんでした。次に、私が使用している Gradle Spring Dependency Management プラグインに由来しているのではないかと疑ったので、コメントアウトすると、バージョンJUnit 5.4.0が取得されました。 Gradle Spring Dependency ManagementプラグインからのJUnitを無効にするにはどうすればよいですか?

Gradle Spring Dependency Management plugin

最後に:

Spring Boot Dependencies BOM を直接使用して、Gradleプラグインを削除することにしました。

implementation(platform("org.springframework.boot:spring-boot-dependencies:2.0.5.RELEASE"))

プラグインは、BOMファイルを使用できないGradle 5より前のバージョンのGradle用に作成されたと思います。 BOMのサポートにより、直接含めることができます。このように、JUnitのバージョンはenforcedPlatform()ブロックで指定したとおりです。

以下のSam Brannenの回答は、問題の発生方法と解決方法についてよく説明しており、Gradleの古いバージョンを使用しているユーザーに関係があると思うので、受け入れました。

10

Gradle Spring Dependency ManagementプラグインからのJUnitを無効にするにはどうすればよいですか?

まず、Springの依存関係管理プラグインを使用している場合は、junit-bomをインポートしないでください。インポートすると、それらの依存関係の管理が重複します(競合する可能性があります)。

それとは別に、Springの依存関係管理プラグインを使用していて、マネージバージョンをオーバーライドする場合は常に、プラグインが使用するBOMで定義されているバージョンの正確な名前をオーバーライドする必要があります。

これは、Spring Boot Gradleの場合 および Mavenの場合 に記載されています。

Spring Bootの場合、JUnit Jupiterバージョンの名前は「junit-jupiter.version」です。 Spring Boot 2.1.2のすべての管理対象バージョンの名前を見つけることができます here

したがって、Gradleでは、次のようにオーバーライドします。

ext['junit-jupiter.version'] = '5.4.0'

here を正確に実行したことがわかります。

Mavenでは、次のようにオーバーライドします。

<properties>
    <junit-jupiter.version>5.4.0</junit-jupiter.version>
</properties>

詳細な背景情報: https://docs.spring.io/platform/docs/current/reference/html/getting-started-overriding-versions.html

36
Sam Brannen

JUnit 5.4.0はアーティファクトを簡素化し、Jupiterに単一のアーティファクトを提供するようになりました-org.junit:junit-jupiter。つまり、Gradleファイルも簡略化する必要があります。

testImplementation(enforcedPlatform("org.junit:junit-bom:5.4.0")) // JUnit 5 BOM
testImplementation("org.junit.jupiter:junit-jupiter")
3
Mureinik

JUnitを参照する他のBOMの前にJUnitのBOMbeforeを必ず含めてください。最初のBOMが勝ち、以降のすべてのアーティファクトのバージョンをロックします。

MavenとSpring Bootを使用した同様の設定については、この問題を参照してください: https://github.com/sormuras/junit-platform-maven-plugin/issues/29#issuecomment-456958188

1
Sormuras