为 JVM 导出依赖项的 Kotlin 多平台库

Kotlin multiplatform library exporting dependencies for JVM

我正在使用 Gradle 在 kotlin 上为 jvm 和 iOS 创建一个多平台。 对于 jvm,即使我将我的依赖项定义为 implementation,它们也包含在生成的 .pom 库中并具有 runtime 范围。

通过使用实现,我原以为这些依赖项不会传递给库使用者。

但是,当我在我的其他 jvm 项目中使用这个库时,Gradle 正在导入特定于库的版本。不是我在应用程序依赖项中设置的那个。

在这种情况下,我正在降级。该库正在使用依赖版本 1.4.1,在我想使用版本 1.4.0.1 的应用程序上。

By using implementation, I was expecting that these dependencies are not passed to the library consumer.

如果您希望消费者自己提供那些传递依赖项,您应该使用 compileOnly 而不是 implementation

apiimplementation 之间的区别在于,使用 api 声明的传递依赖项将仅取决于您的库(在编译时看到并且运行)。使用 implementation,传递依赖项在运行时仍会存在,但在使用应用程序的编译类路径中不可见,因此您不能在应用程序代码中使用传递依赖项的声明。

看看这里的 table: https://docs.gradle.org/current/userguide/java_library_plugin.html

如果您坚持使用 implementation,您仍然可以通过使用 strictly 或通过排除它并自己重新声明它来为 Gradle 中的传递依赖强制一个版本。请参阅文档: https://docs.gradle.org/current/userguide/dependency_downgrade_and_exclude.html