我已经为Kotlin中正在研究的项目编写了实用程序库。该项目具有许多依赖项(例如AWS库)。我想将该库打包为“胖” .jar,以便可以在其他项目中使用该库而不会出现问题。
当前,我正在使用gradle shadow插件。我能够成功地在Java代码/项目中使用.jar类。但是,当在Kotlin项目/代码中使用.jar类时(或试图这样做),我遇到了可见性问题(代码无法编译未解析引用的b / c)。我不知道我在做什么错,也不确定这是否是常见问题。
我已经尝试过:
在两种情况下都成功创建了胖子jar,并且可以在Java代码中使用胖子jar,但是Kotlin无法解析引用。但是,当我创建一个非胖jar时,这些类是可见的,但是显然是损坏的(缺少依赖项的BC)。因此,从本质上讲,只有当我创建一个胖.jar时,只有我的Kotlin代码才能使用该库。
有人有什么见识吗?
答案 0 :(得分:0)
您重新包装的JAR很可能丢失了原始JAR中的META-INF/*.kotlin_module
文件。这些是Kotlin编译器必须能够从类中读取顶级声明的Kotlin软件包元数据文件。
如果这些文件丢失,则顶级声明和扩展名将面临可见性问题。
您需要配置胖JAR工具,以将这些文件也复制到生成的JAR中。
答案 1 :(得分:0)
在编译库 jar 文件时,您还需要添加编译时和运行时依赖项。
添加它们的一种方法是例如:
Jill, Allen
Golden , Monkey
Washington,DC
q