1. ホーム
  2. java

[解決済み] どのようにしたら、Gradleは2つの依存関係に同じバージョンを設定するように強制することができますか?

2022-03-08 19:35:13

質問

以下の2つの依存関係を使用しています。

compile 'com.google.guava:guava:14.0.1'
compile 'com.google.guava:guava-gwt:14.0.1'

どちらも同じバージョンでないと正しく動作しません。私の他の依存関係はより高いバージョンを使っているので、Gradleはそれぞれの依存関係に異なるバージョンを使用します。

を実行することで発見しました。 gradle dependencies :

compile - Compile classpath for source set 'main'.
 +--- com.google.guava:guava:14.0.1 -> 17.0
 +--- com.google.guava:guava-gwt:14.0.1
 |    +--- com.google.code.findbugs:jsr305:1.3.9
 |    \--- com.google.guava:guava:14.0.1 -> 17.0 

どのようにしたら、Gradleがこれら2つの依存関係に同じバージョンを設定するように強制できますか?

解決方法は?

依存関係の1つがguavaのバージョンを強制的に更新しています。使用方法 gradle dependencies を使って、どのライブラリがあなたのバージョンを回避しているのかを突き止めます。

あなたが抱えている問題は、無理に14.0.1を使うと他のライブラリが正常に動作しなくなる可能性があることです。17.0を依存先として使用することはできないのでしょうか?

build.gradleで個々のバージョン番号を管理するのではなく、私はバージョン番号のマッピングを持つdependencies.gradleファイルを使用し、それをbuild.gradleに引き込んでいます。そうすることで、私は単一のguavaバージョンを維持する必要があるだけです。ですから、あなたの例は次のようになります。

依存関係.gradle

ext {
    ver = [
        guava: '14.0.1'
    ]
}

で、build.gradle ファイルに記述します。

apply from: "dependencies.gradle"

dependencies {
    compile group: 'com.google.guava', module: 'guava', version: ver.guava
    compile group: 'com.google.guava', module: 'guava-gwt', version: ver.guava
}

であれば、17.0に移行するときにdependencies.gradleを変更すればいいだけです。

で推移的依存関係をfalseに設定するのも断然好きです。

configurations.compile { transitive = false }

この方法では、コンパイル時にいくつかの依存関係を回避することができますが、回避するライブラリが完全に後方互換性がない場合、実行時に問題が発生する可能性があります。しかし、コードを書いている以上、どのライブラリを使用しているかは知っておくべきだし、依存関係についても明示的に示すべきだろう。そうすることで、依存関係がアップグレードされ、あなたを混乱させることを防げます。