我正在尝试使用以下 Gradle 配置重新定位带有Shadow的包(具体来说是 OkHttp 4):
apply plugin: 'java'
apply plugin: 'com.github.johnrengelman.shadow'
shadowJar {
archiveBaseName.set('my_archive')
archiveClassifier.set(null)
version = null
relocate 'okhttp3', 'my.prefix.okhttp3'
relocate 'okio', 'my.prefix.okio'
}
dependencies {
implementation("com.squareup.okhttp3:okhttp:4.2.1") {
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
}
}
(我省略了buildscript
部分,重要的是使用的 Shadow 版本是5.1.0
. 包前缀等也已更改)
这在 OkHttp 3.12.0 及更早版本(纯 Java)之前有效。现在 OkHttp 4 是用 Kotlin 编写的,我在使用属性时遇到了麻烦,特别是在 Kotlin 代码中。当从 Java 中使用时,重新定位的 OkHttp 工作得很好。但是访问 Kotlin 中的属性,如下所示:
val cache = httpClient.cache
...导致异常:
java.lang.NoSuchMethodError: No virtual method getCache()Lmy/prefix/okhttp3/Cache; in class Lmy/prefix/okhttp3/OkHttpClient; or its super classes (declaration of 'my.prefix.okhttp3.OkHttpClient' appears in /data/app/redacted.redacted-0yalPGR5aw0RSY2Zdxnq7Q==/base.apk)
如您所见,该应用程序是一个 Android 应用程序,以防万一。
任何想法我的配置可能有什么问题?