[英]How to resolve gradle dependency conflicts on library root dependency?
在我的项目中,我有两个依赖 okio 作为传递依赖冲突。 理论上,gradle应该选择最高版本来解决,但是没有用。
我一直在尝试一切,从排除直到从 okio lib 强制版本,但没有任何效果。 查看外部库路径,我意识到其中一个依赖项包含 okio 作为依赖项的路径,我相信这就是问题所在。 但是我该如何解决呢?
这是一个简单的 gradle 示例,其中包含我的两个依赖项。 注释行是我解决问题的失败尝试:
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.72'
}
repositories {
mavenCentral()
}
//configurations.all {
// resolutionStrategy.force('com.squareup.okio:okio:2.4.3')
//}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
// -> dependency one
implementation "com.squareup.retrofit2:retrofit:2.7.2"
// implementation ("com.squareup.retrofit2:retrofit:2.7.2"){
// exclude group: 'com.squareup.okio'
// }
// -> dependency two
implementation "com.eternitywall:java-opentimestamps:1.18"
// implementation ("com.eternitywall:java-opentimestamps:1.18") {
// exclude group: 'com.squareup.okio'
// }
// implementation "com.squareup.okio:okio:2.4.3"
// implementation "com.squareup.okio:okio"
// constraints {
// implementation("com.squareup.okio:okio:2.4.3") {
// because 'transitive version conflict'
// }
// }
}
要得到错误,只需有一个包含代码的 Main.kt 文件:
import okhttp3.OkHttpClient
fun main(args: Array<String>) {
OkHttpClient.Builder()
}
得到的错误是:
Exception in thread "main" java.lang.NoSuchMethodError: 'boolean okio.ByteString.startsWith(okio.ByteString)'
at okio.Options.of(Options.java:64)
at okhttp3.internal.Util.<clinit>(Util.java:73)
at okhttp3.OkHttpClient.<clinit>(OkHttpClient.java:124)
at okhttp3.OkHttpClient$Builder.<init>(OkHttpClient.java:449)
at MainKt.main(Main.kt:4)
最后,这是我提到的依赖于包含的 okio 的库根目录
如果您能帮助我,我将不胜感激。 提前致谢!!
好吧,似乎唯一的解决方案是将应用程序分成模块,将每个依赖项放在不同的模块中。 尽管我很不情愿,但这是我找到的唯一方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.