0

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

通过使用implementation,我期望这些依赖项不会传递给库使用者。

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

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

4

1 回答 1

1

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

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

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

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

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

于 2022-02-18T16:01:50.070 回答