IDEA gradle-kotlin 项目,引入自己写的 jar 包, IDEA 无法正常 import,报 Unresolved reference,但是实际上是生效的…

2021-05-26 17:13:19 +08:00
 heavyrainn
小弟用 IDEA 开发项目,引入了一个自己写的本地 jar 包,在 import 的时候飘红,提示 Unresolved reference,但是实际上,我可以正常 gradle build,也能通过 run 正常执行。但是这个无法正常提示实在是让人脑仁儿疼…
已经尝试过 invalidate caches,但是没啥帮助…请问各位有啥好的解决方法么…谢谢大家…
1631 次点击
所在节点    程序员
6 条回复
fdppzrl
2021-05-26 17:52:29 +08:00
盲猜一下 implement 或者 api 的问题吧。
Lonely
2021-05-26 17:54:55 +08:00
可以换个版本的 gradle
heavyrainn
2021-05-26 18:09:30 +08:00
@fdppzrl 请问可以具体说说么
fdppzrl
2021-05-26 18:43:37 +08:00
@heavyrainn 不好意思。打错了。应该是这两关键字 implementation 和 api 。引入依赖的时候是有区别的。这别人总结的,你可以看看能不能理解。implementation:该依赖方式所依赖的库不会传递,只会在当前 module 中生效。
api:该依赖方式会传递所依赖的库,当其他 module 依赖了该 module 时,可以使用该 module 下使用 api 依赖的库。
zerofancy
2021-05-27 08:14:13 +08:00
遇到过一次包名带 switch,switch 不是 Kotlin 的保留字但在 Java 里面无法正确 import,检查下有没有这个问题。
wjploop
2021-05-27 10:57:05 +08:00
最近遇到相似的问题,说下我的理解。
在 IDEA 的 Gradle 项目中,编译运行加载 Class 和 IDEA 索引 Class 是两套不同的东西,故存在可以编译通过而 IDEA 爆红提示没法索引到正确 Class 的情况。

如何理解证实这一点? IDEA 构建非 Gradle 项目,仍可以正确索引 Class,其代码组织结构信息放在*.iml 文件中,而在 Gradle 项目中,我们接触修改的一般是.gradle 文件,依赖信息也放在.gradle 文件中,但当 IDEA 索引相关的类时,还是需要将相关信息转化成.iml 文件来让 IDEA 获知。关于 Gradle,它扮演了一个组织配置文件信息与 IDE 无关的角色,这样 Gradle 项目可以容易导入到其他 IDE,如 Eclipse 或 VsCode 。

回到本问题,思路上应该是*.iml 未能正确生成的结果。我这边的情况是,引入了与系统类重复的 jar 包,编译运行解决的使用了-Xbootclasspath/p:xxx.jar 来告知 jvm 优先加载我的类,但这个告知信息却不能同步到*.iml 文件中,故能编译却爆红;解决方案是,自己手动去修改其中.iml 文件中 OrderEntry,OrderEntry 用来管理依赖检索顺序,将系统类的 OrderEntry 放到后面得以解决。

(居然 bb 这么多~)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX