V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heavyrainn
V2EX  ›  程序员

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

  •  
  •   heavyrainn · 192 天前 · 783 次点击
    这是一个创建于 192 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小弟用 IDEA 开发项目,引入了一个自己写的本地 jar 包,在 import 的时候飘红,提示 Unresolved reference,但是实际上,我可以正常 gradle build,也能通过 run 正常执行。但是这个无法正常提示实在是让人脑仁儿疼…
    已经尝试过 invalidate caches,但是没啥帮助…请问各位有啥好的解决方法么…谢谢大家…
    6 条回复    2021-05-27 10:57:05 +08:00
    fdppzrl
        1
    fdppzrl  
       192 天前 via Android
    盲猜一下 implement 或者 api 的问题吧。
    Lonely
        2
    Lonely  
       192 天前 via iPhone
    可以换个版本的 gradle
    heavyrainn
        3
    heavyrainn  
    OP
       192 天前
    @fdppzrl 请问可以具体说说么
    fdppzrl
        4
    fdppzrl  
       192 天前
    @heavyrainn 不好意思。打错了。应该是这两关键字 implementation 和 api 。引入依赖的时候是有区别的。这别人总结的,你可以看看能不能理解。implementation:该依赖方式所依赖的库不会传递,只会在当前 module 中生效。
    api:该依赖方式会传递所依赖的库,当其他 module 依赖了该 module 时,可以使用该 module 下使用 api 依赖的库。
    zerofancy
        5
    zerofancy  
       192 天前 via Android
    遇到过一次包名带 switch,switch 不是 Kotlin 的保留字但在 Java 里面无法正确 import,检查下有没有这个问题。
    wjploop
        6
    wjploop  
       191 天前
    最近遇到相似的问题,说下我的理解。
    在 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 这么多~)
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1647 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 01:30 · PVG 09:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.