Open1
Duplicate class javax.inject.Injectをexcludeして解決する

問題
ライブラリを追加して競合が発生.
Duplicate class javax.inject.Inject found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
Duplicate class javax.inject.Named found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
Duplicate class javax.inject.Provider found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
Duplicate class javax.inject.Qualifier found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
Duplicate class javax.inject.Scope found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
Duplicate class javax.inject.Singleton found in modules jetified-javaee-api-6.0-1 (org.apache.openejb:javaee-api:6.0-1) and jetified-javax.inject-1 (javax.inject:javax.inject:1)
原因
Gradleにimplementationを追加した時発生したエラー.
重複するクラスが異なるモジュールで見つかったため発生した競合エラー.
詳しくいうとjavax.injectパッケージに関連するクラスが2つのモジュールからインポートされているために発生したエラーです.
具体的に僕は以下のライブラリを追加したら発生しました.
implementation 'io.minio:minio:8.5.1'
implementation 'org.apache.openejb:javaee-api:6.0-1'
なのでexcludeしました.
implementation 'io.minio:minio:8.5.1'
implementation ('org.apache.openejb:javaee-api:6.0-1') {
exclude module: "javax.inject"
}
minioとopenejbの競合回避はこの記事に書いてあります.
しかし同じエラーが発生しました.
解決
結論からいうと複数のライブラリで競合が発生していました.
このように競合が発生した場合"javax.inject"を含むすべてのライブラリにexclude module: "javax.inject"して下さい.
以下は一例です.
// Google Places API
implementation ('com.google.android.libraries.places:places:3.0.0'){
exclude module: "javax.inject"
}
// Android test support libraries
implementation 'androidx.test.ext:junit:1.1.5'
implementation ('androidx.test.espresso:espresso-core:3.5.1'){
exclude module: "javax.inject"
}
これでビルドが通るようになります.
ログインするとコメントできます