2つのプロジェクトがMain
ありInfrastructure
、どちらもGradleでビルドされているとし4.10.3
ます。その依存関係でInfrastructure
宣言SomeOtherDependency
します:
repositories {
// jcenter is needed for "SomeOtherDependency"
jcenter()
}
dependencies {
// ...
implementation 'com.othercompany.someotherdependency:8.2.16'
}
そして次に、その依存関係としてMain
宣言Infrastructure
します。
dependencies {
// ...
implementation 'com.myprojects.infrastructure:1.22.0'
}
Main
これが物事の状態であるとき、構築に失敗しています:
java.lang.NoClassDefFoundError:io / gsonfire / GsonFireBuilder
ない限り、私は、jcenter()
中Main
の依存関係にも。そうすれば、すべてうまくいきます。しかし、これはGradleの依存関係が機能することになっている方法ではないと思いますか?
それGsonFireBuilder
がSomeOtherDependency
依存するクラスであることは知っていjcenter()
ますが、消費しているプロジェクトのリポジトリに表示されない場合、なぜ到達できないのInfrastructure
ですか?
ところで:私は使用している場合、それは問題ではありませんcompile
/ api
/implementation
宣言する際にSomeOtherDependency
依存関係を。
私は確かにここにいくつかのことを誤解している:私は取り除くことができる方法Main
の依存関係を宣言する責任のその依存関係を、Infrastructure
?
ここでは2つの概念を混ぜ合わせていると思います。依存関係は、必要なもう1つのパッケージ(「何」)です。リポジトリは、依存関係(「どこから」)を見つける場所です。依存関係が複数のリポジトリにある場合があります。
たとえば、ローカルリポジトリを実行して、これまでに使用したすべてのパッケージをキャッシュできます。リポジトリと依存関係が相互に関連付けられている場合は、すべての依存関係をアップグレードして、それらをキャッシュリポジトリにポイントする必要があります。実際、依存関係の依存関係でリポジトリが指定されている場合は、それらすべてを手動で調べて、キャッシュリポジトリを指す必要があります。これは、自動依存関係管理の目的をほぼ無効にします。したがって、リポジトリと依存関係を別々に指定します。
Gradleの依存関係管理に関する図を参照してください:ローカルパス、Gradleキャッシュ、クラウド内のリポジトリ---依存関係を毎回調整するのは面倒です。
これにより、依存関係が使用するリポジトリを指定する必要がなくなる可能性があります。あなただけ設定する必要があります任意のあなたの依存関係の必要な依存関係を持っているリポジトリを。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加