在dagger-1.2.2.jar和dagger-2.22.jar模块中存在重复的类。

5
在将所有库升级为androidx和最新版本的Firebase库后,我遇到了两个不同版本的dagger Java文件错误。错误信息中的链接无法使用。问题发生在步骤: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.

2
我通过使用17.0.0版本来解决问题,作为一种解决方法。 - Anton
请跟随此链接https://dev59.com/kGEi5IYBdhLWcg3wG45o#60629996,并提供“dependency”图表。或者只需发布“依赖项”详细信息,以便我们可以调查哪个依赖项实际上在创建问题。 - Dupinder Singh
我可以解决这个问题,我在我的项目中经常做这种工作,只需要你的依赖树。 - Dupinder Singh
1个回答

5
我可以帮您进行翻译。这段话的意思是:“最简单的方法是分析依赖关系。”

解决方案 #1(仅限控制台)

在控制台中运行:

./gradlew -q dependencies app:dependencies

enter image description here

在控制台接收到依赖项列表后,转到Analyze部分(位于Solution #2下方)。


解决方案 #2(生成HTML)

1)添加插件以生成报告

app/build.gradle中(包括compileSdkVersiontargetSdkVersionbuildTypes),在顶部添加:

apply plugin: 'project-report'

其中之一附近:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

这些在顶部。

2)生成报告

只需从控制台运行:

 ./gradlew htmlDependencyReport

或者从Android Studio。
Tasks > other > htmlDependencyReport

enter image description here

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'

enter image description here

4) 分析报告

点击每个位置后,都会出现依赖项: enter image description here

要展开所有依赖项,可以在开发者控制台中使用以下代码:

$('#dependencies').html(function(index, html) {
    return html.split('style="display: none;"')
               .join('style="display: block;"')
               .split('<h3 class="closed">')
               .join('<h3>')
});

分析

1) 查找旧的依赖项

在您的情况下,您正在搜索短语dagger:1

enter image description here

或者在控制台中:

enter image description here

2) 排除依赖项

在报告中找到库名称,并从此导入中排除组。

在您的build.gradle(其中包含所有依赖项)中修改“有问题”的库,排除dagger v1。

例如:

implementation("some.old.library.using.dagger1:1.0.0") {
    exclude group: 'com.squareup.dagger', module: 'dagger'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接