Kotlin库导出为Jar,可在Java代码中使用,但在Kotlin代码中不可用

时间:2019-04-04 18:18:03

标签: java gradle kotlin

我已经为Kotlin中正在研究的项目编写了实用程序库。该项目具有许多依赖项(例如AWS库)。我想将该库打包为“胖” .jar,以便可以在其他项目中使用该库而不会出现问题。

当前,我正在使用gradle shadow插件。我能够成功地在Java代码/项目中使用.jar类。但是,当在Kotlin项目/代码中使用.jar类时(或试图这样做),我遇到了可见性问题(代码无法编译未解析引用的b / c)。我不知道我在做什么错,也不确定这是否是常见问题。

我已经尝试过:

  • Gradle Shadow插件here
  • 修改gradle jar任务以包括我自己的所有依赖项

在两种情况下都成功创建了胖子jar,并且可以在Java代码中使用胖子jar,但是Kotlin无法解析引用。但是,当我创建一个非胖jar时,这些类是可见的,但是显然是损坏的(缺少依赖项的BC)。因此,从本质上讲,只有当我创建一个胖.jar时,只有我的Kotlin代码才能使用该库。

有人有什么见识吗?

2 个答案:

答案 0 :(得分:0)

您重新包装的JAR很可能丢失了原始JAR中的META-INF/*.kotlin_module文件。这些是Kotlin编译器必须能够从类中读取顶级声明的Kotlin软件包元数据文件。

如果这些文件丢失,则顶级声明和扩展名将面临可见性问题。

您需要配置胖JAR工具,以将这些文件也复制到生成的JAR中。

答案 1 :(得分:0)

在编译库 jar 文件时,您还需要添加编译时和运行时依赖项。

添加它们的一种方法是例如:

Jill, Allen
Golden , Monkey
Washington,DC
q