【发布时间】:2019-02-03 19:30:19
【问题描述】:
我有一个为其他项目提供共享功能的库项目。实现是用 Kotlin 编写的。但是,我确保库的公共接口不使用 Kotlin 提供的任何类。
如果我们将此库作为依赖项添加到纯 Java 项目,它会传递地引入 kotlin-stdlib 和 kotlin-runtime。 Kotlin-stdlib 中的类现在可能(但错误地)用于纯 Java 消费者项目中。
有没有办法防止这种类型的泄漏?我能想到的一些选项:
在 Maven 中将
kotlin-stdlib-*标记为provided: 这会在运行时导致任何问题吗? (ClassNotFoundException等)Shade + relocate
kotlin-stdlib-*和/或kotlin-runtime: 如果我们依赖多个 Kotlin 库项目,我可以预见到使用着色时会出现问题。另外,我不确定这是否真的会隐藏 Kotlin 类型。
注意:问题Using a kotlin library in java code 不适用于此处(误导性标题)。我特别避免这种情况。
【问题讨论】:
-
这听起来更像是 IDE 配置问题,而不是构建问题。你用的是什么IDE?当您说“[...] 他们现在看到模棱两可的库类型 [...]”时,您是指自动完成和导入语句吗?
-
@RobbyCornelissen,我的目的是防止 Kotlin stdlib 类在 Java 项目中可用。其他一切都是装饰性的。
-
如果它们不可用,你的 Kotlin 库如何使用它们?
-
@RobbyCornelissen,是的,这就是问题所在。我想不出封装这些依赖项的方法,因此它们仅可用于我的库实现(Java 9 模块,有人吗?)。
标签: java maven kotlin shared-libraries