【问题标题】:Duplicate class in modules dagger-1.2.2.jar and dagger-2.22.jar模块 dagger-1.2.2.jar 和 dagger-2.22.jar 中的重复类
【发布时间】:2019-09-29 14:16:57
【问题描述】:

将所有库升级到 androidx 和最新版本的 Firebase 库后

我收到了 2 个不同版本的 dagger java 文件的错误,错误消息中的链接不起作用。问题出现在步骤:app:checkDebugDuplicateClasses

我不直接在我的代码中使用匕首,使用

./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.

【问题讨论】:

  • 作为一种解决方法,我使用 17.0.0 解决了问题。版本
  • 请您点击此链接stackoverflow.com/a/60629996/5108695 并提供dependency 图表。或者只是发布 Dependency 详细信息,以便我们调查,实际上是哪个依赖项造成了问题
  • 我可以解决这个问题,我在我的项目中做了很多这类工作,只需要你的依赖树

标签: android gradle dagger


【解决方案1】:

最简单的方法是分析依赖关系。

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

在控制台中运行:

./gradlew -q dependencies app:dependencies

在控制台收到依赖列表后,进入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

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'
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 2016-11-30
    相关资源
    最近更新 更多