为 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
。
api
和 implementation
之间的区别在于,使用 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
我正在使用 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
。
api
和 implementation
之间的区别在于,使用 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