我有一个大型多模块maven项目。当我在IDEA中加载这个项目时,从nexuses导入所有依赖项,使'mvn clean install'填充本地repo,maven的一切似乎都可以,因为它能够成功解决所有问题。但在IDEA中,某些类显示为红色,工具提示“无法解决...”。
重要的一点是,一些远程类包被打包到2个或更多的jar(而不是通常制作的一个)中,具有相同的manifest.mf(因此具有相同的工件名称)。它们包含相同的包,但是一个保留了一半的类,另一个保留了最后一个。范围是编译。
就像我们在com.pack1包中有2个A类和B类,它们被装入2个罐子foo.jar(contaning com.pack1.A.class)和foo-impl.jar( com.pack1.B.class)具有相同的清单。
看起来maven正确地处理了这个问题,但IDEA却没有:在项目的结构中,只有jar-bundle中的一个jar存在(没有其他名称的部分,如“ - impl “或” - 网络“)。所以一些类(来自其余的罐子)是红色的,不能通过 ctrl + LMB 打开或通过 ctrl-N 找到。当地m2 repo中只有一个罐子(IDEA的项目设置也是如此)。
奇怪的是,IDEA仍然可以通过双班找到缺少的类并按原样打开代码(没有反编译警告)。如果我在编辑器中打开此类,则项目结构面板上的从源滚动不起作用。它看起来像IDEA以某种方式设法将类加载到内存中的类路径,但不知道在文件系统上找到相应的jar的位置。并且它确实缺席,因为“本地m2 repo中只有一个罐子”
所以我的问题是怎么可能?我怎样才能使IDEA和maven成为朋友,以便在处理依赖关系时他们的行为相同?
(手动将缺失的罐子添加到项目结构中除外)
我尝试重新导入正确的maven导航栏,使IDEA的缓存无效,清理本地m2 repo,从File重新导入整个项目 - >新的 - >来自现有来源的项目,更新设置中的存储库 - >构建,执行,部署 - >构建工具 - > Maven->存储库并使用不同的maven版本。
Maven 3.0.4,IDEA 17.1
答案 0 :(得分:1)
首先确保在添加新依赖项后重新导入maven。或者激活autoimport(右键单击项目 - > Maven - > Reimport)。
下一篇:Intellij Idea捆绑了maven。您可以默认设置您正在使用的那个。
转到: 设置 - >构建,执行,部署 - >构建工具 - >行家强>
在Maven主目录中选择您的maven主文件夹并保存。从现在开始,intellij将使用与系统中相同的maven。