IDEA gradle-kotlin 项目,引入自己写的 jar 包, IDEA 无法正常 import,报 Unresolved reference,但是实际上是生效的…
- 0次
- 2021-06-01 11:47:50
- idczone
小弟用 IDEA 开发项目,引入了一个自己写的本地 jar 包,在 import 的时抗投诉服务器候飘红,提示 Unresolved reference,但是实际上,我可以正常 gradle build,也能通过 run 正常执行。但是这个无法正常提示实在是让人脑仁儿疼…
已经尝试过 invalidate caches,但是没啥帮助…请问各位有啥好的解决方法么…谢谢大家…
盲猜一下 implement 或者 api 的问题吧。
可以换个版本的 gradle
请问可以具体说说么
不好意思。打错了。应该是这两关键字 implementation 和 api 。引入依赖的时候是有区别的。这别人总结的,你可以看看能不能理解。implementation:该依赖方式所依赖的库不会传递,只会在当前 module 中生效。
api:该依赖方式会传递所依赖的库,当其他 module 依赖了该 module 时,可以使用该 module 下使用 api 依赖的库。
遇到过一次包名带 switch,switch 不是 Kotlin 的保留字但在 Java 里面无法正确 import,检查下有没有这个问题。
最近遇到相似的问题,说下我的理解。
在 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 这么多~)