【发布时间】:2017-09-20 22:22:28
【问题描述】:
我有一个大型的多模块 maven 项目。当我在 IDEA 中加载这个项目时,从 nexuses 导入所有依赖项,使 'mvn clean install' 填充本地 repo,对于 maven 来说一切似乎都很好,因为它能够成功解决所有问题。但在 IDEA 中,某些类显示为红色,工具提示“无法解析...”
重要的一点是,一些远程类包被打包到 2 个或多个 jar 中(而不是通常制作的一个),具有相同的 manifest.mf(因此具有相同的工件名称)。它们包含相同的包,但一个保留一半的类,另一个保留最后一个。范围是编译。
这就像我们在包 com.pack1 中有 2 个类 A 和 B,它们被打包到 2 个 jar 中 foo.jar(包含 com.pack1.A.class)和 foo-impl.jar(包含 com .pack1.B.class) 具有相同的清单。
似乎 maven 正确处理了这个问题,但 IDEA 没有:在项目的结构中,只有一个来自 jar-bundle 的 jar 存在(没有其他名称部分的那个,例如 "-impl" 或 “-web”)。所以有些类(来自其余的 jars)是红色的,不能通过 ctrl+LMB 打开或用 ctrl-N 找到。本地 m2 存储库中也只有一个 jar(与 IDEA 的项目设置相同)。
神奇的是,IDEA 仍然可以使用 double-shift 找到丢失的类并按原样打开代码(没有反编译警告)。如果我在编辑器中打开这个类,项目结构面板上的 scroll from source 将不起作用。看起来 IDEA 以某种方式设法将类加载到内存中的类路径,但不知道在文件系统上的哪里可以找到相应的 jar。它确实不存在,因为“本地 m2 仓库中也只有一个罐子”
所以我的问题是怎么可能?以及如何使 IDEA 和 maven 成为朋友,以便它们在处理依赖项时表现相同?
(除了手动将缺少的 jar 添加到项目结构中)
我尝试在右侧 maven 导航栏上重新导入,使 IDEA 的缓存无效,清理本地 m2 存储库,从文件 -> 新建 -> 项目重新导入整个项目从现有来源,在设置 -> 构建、执行、部署 -> 构建工具 -> Maven-> 存储库中更新存储库并使用不同的 maven 版本。
Maven 3.0.4,IDEA 17.1
【问题讨论】:
-
您是否尝试过使想法无效并清理项目?
-
试图删除本地m2 repo,并在idea中重新导入项目。认为它与重新创建idea的项目文件具有相同的效果。对吗?
-
Idea 维护自己的缓存。这与 ~/.m2/repository 无关 - 它是纯 mvn。
-
删除本地.m2文件夹不会删除idea缓存。
-
如果你展开右边的导航栏,里面有maven,你会看到刷新符号,试试这个也会刷新peroject中的maven依赖
标签: java maven intellij-idea dependencies