在模块 dagger-1.2.2.jar 和 dagger-2.22.jar 中复制 class
Duplicate class in modules dagger-1.2.2.jar and dagger-2.22.jar
将所有库升级到 androidx 和最新版本的 Firebase 库后
我在使用 2 个不同版本的 dagger java 文件时遇到错误,错误消息中的 link 不起作用。问题出现在步骤 :app:checkDebugDuplicateClasses
。
我没有在我的代码中直接使用 dagger,使用
./gradlew app:dependencies
我发现 com.google.android.gms:play-services-cast-framework:17.1.0
使用 com.google.dagger:dagger:2.22
,但没有关于 1.2.2
的信息。
Cause 1: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class dagger.Lazy found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.MembersInjector found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Module found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Provides found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class javax.inject.Inject found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Named found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Provider found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Qualifier found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Scope found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Singleton found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Go to the documentation to learn how to Fix dependency resolution errors.
最简单的方法是分析依赖关系。
解决方案 #1(仅限控制台)
运行 在控制台中:
./gradlew -q dependencies app:dependencies
在控制台中收到依赖项列表后,转到 Analyze
部分(在 Solution #2
下方)。
解决方案 #2(生成 html)
1) 添加插件生成报告
在app/build.gradle
(这与compileSdkVersion
、targetSdkVersion
或buildTypes
)中,在顶部添加:
apply plugin: 'project-report'
其中之一附近:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
哪个在上面。
2) 生成报告
刚从控制台运行:
./gradlew htmlDependencyReport
或来自Android工作室
Tasks > other > htmlDependencyReport
3) 打开报告
在控制台你会发现URL:
./gradlew htmlDependencyReport
> Task :app:htmlDependencyReport
See the report at: file:///Users/user_name/your_path/project_name/app/build/reports/project/dependencies/index.html
然后转到 project ':app'
4) 分析报告
点击每个位置后有依赖关系:
要全部展开,你可以在开发者控制台这样的代码:
$('#dependencies').html(function(index, html) {
return html.split('style="display: none;"')
.join('style="display: block;"')
.split('<h3 class="closed">')
.join('<h3>')
});
分析
1) 查找旧依赖项
在您的情况下,您正在搜索词组 dagger:1
或者在控制台中:
2) 排除依赖项
在报表库名称中查找,并且只是 exclude group
来自此导入。
在你的 build.gradle
中(你有所有的依赖项)修改“有问题的”库,不包括 dagger v1。
例如:
implementation("some.old.library.using.dagger1:1.0.0") {
exclude group: 'com.squareup.dagger', module: 'dagger'
}
将所有库升级到 androidx 和最新版本的 Firebase 库后
我在使用 2 个不同版本的 dagger java 文件时遇到错误,错误消息中的 link 不起作用。问题出现在步骤 :app:checkDebugDuplicateClasses
。
我没有在我的代码中直接使用 dagger,使用
./gradlew app:dependencies
我发现 com.google.android.gms:play-services-cast-framework:17.1.0
使用 com.google.dagger:dagger:2.22
,但没有关于 1.2.2
的信息。
Cause 1: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class dagger.Lazy found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.MembersInjector found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Module found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class dagger.Provides found in modules dagger-1.2.2.jar (dagger-1.2.2.jar) and dagger-2.22.jar (com.google.dagger:dagger:2.22)
Duplicate class javax.inject.Inject found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Named found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Provider found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Qualifier found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Scope found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Duplicate class javax.inject.Singleton found in modules javax.inject-1.jar (javax.inject-1.jar) and javax.inject-1.jar (javax.inject:javax.inject:1)
Go to the documentation to learn how to Fix dependency resolution errors.
最简单的方法是分析依赖关系。
解决方案 #1(仅限控制台)
运行 在控制台中:
./gradlew -q dependencies app:dependencies
在控制台中收到依赖项列表后,转到 Analyze
部分(在 Solution #2
下方)。
解决方案 #2(生成 html)
1) 添加插件生成报告
在app/build.gradle
(这与compileSdkVersion
、targetSdkVersion
或buildTypes
)中,在顶部添加:
apply plugin: 'project-report'
其中之一附近:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
哪个在上面。
2) 生成报告
刚从控制台运行:
./gradlew htmlDependencyReport
或来自Android工作室
Tasks > other > htmlDependencyReport
3) 打开报告
在控制台你会发现URL:
./gradlew htmlDependencyReport
> Task :app:htmlDependencyReport
See the report at: file:///Users/user_name/your_path/project_name/app/build/reports/project/dependencies/index.html
然后转到 project ':app'
4) 分析报告
点击每个位置后有依赖关系:
要全部展开,你可以在开发者控制台这样的代码:
$('#dependencies').html(function(index, html) {
return html.split('style="display: none;"')
.join('style="display: block;"')
.split('<h3 class="closed">')
.join('<h3>')
});
分析
1) 查找旧依赖项
在您的情况下,您正在搜索词组 dagger:1
或者在控制台中:
2) 排除依赖项
在报表库名称中查找,并且只是 exclude group
来自此导入。
在你的 build.gradle
中(你有所有的依赖项)修改“有问题的”库,不包括 dagger v1。
例如:
implementation("some.old.library.using.dagger1:1.0.0") {
exclude group: 'com.squareup.dagger', module: 'dagger'
}