Kotlin Multiplatform 库在运行时未解决的依赖关系
Kotlin Multiplatform library unresolved dependency at runtime
我正在制作一个私有的 Kotlin Multiplatform 库,该库将位于托管在 Bitbucket 上的私有存储库中。
我的库依赖于另一个名为 Krypto 的库。
所以,自然地,我在库的公共模块中有以下依赖:
val commonMain by getting {
dependencies {
api("com.soywiz.korlibs.krypto:krypto:2.2.0")
}
}
现在,当我通过 Cocoapods 将库导入 iOS 项目时,它工作得非常好。但是,当我将 .jar 文件作为依赖项插入到我的 Android 项目时:
implementation files('libs/MyLibrary-jvm-1.0.0.jar')
它可以编译,但在运行时崩溃并出现以下错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/soywiz/krypto/SHA256Kt
如果我将 Krypto 依赖项添加到我的 Android 项目中,一切正常,但我希望这些依赖项已包含在我的库中。怎么做?
我也尝试添加 java-library 插件并在 java 构建块中添加依赖项,但它没有改变任何东西。
解决方案一直在文档中...https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#export-dependencies-to-binaries
在特定平台的二进制文件的 Gradle 配置中,我们需要使用 export() 来包含依赖项。为了还包括依赖项的依赖项,我们需要做 export(dep, transitiveExport = true).
kotlin {
sourceSets {
commonMain by getting {
dependencies {
api(project(":dependency"))
}
}
}
java().binaries {
framework {
export(project(":dependency"), transitiveExport = true)
}
}
}
我正在制作一个私有的 Kotlin Multiplatform 库,该库将位于托管在 Bitbucket 上的私有存储库中。
我的库依赖于另一个名为 Krypto 的库。
所以,自然地,我在库的公共模块中有以下依赖:
val commonMain by getting {
dependencies {
api("com.soywiz.korlibs.krypto:krypto:2.2.0")
}
}
现在,当我通过 Cocoapods 将库导入 iOS 项目时,它工作得非常好。但是,当我将 .jar 文件作为依赖项插入到我的 Android 项目时:
implementation files('libs/MyLibrary-jvm-1.0.0.jar')
它可以编译,但在运行时崩溃并出现以下错误:
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/soywiz/krypto/SHA256Kt
如果我将 Krypto 依赖项添加到我的 Android 项目中,一切正常,但我希望这些依赖项已包含在我的库中。怎么做?
我也尝试添加 java-library 插件并在 java 构建块中添加依赖项,但它没有改变任何东西。
解决方案一直在文档中...https://kotlinlang.org/docs/multiplatform-build-native-binaries.html#export-dependencies-to-binaries
在特定平台的二进制文件的 Gradle 配置中,我们需要使用 export() 来包含依赖项。为了还包括依赖项的依赖项,我们需要做 export(dep, transitiveExport = true).
kotlin {
sourceSets {
commonMain by getting {
dependencies {
api(project(":dependency"))
}
}
}
java().binaries {
framework {
export(project(":dependency"), transitiveExport = true)
}
}
}