IntelliJ IDEA 11导入依赖的问题
需要从subversion导入一个项目 – 这是一个maven项目。但是我在处理maven库依赖时遇到了问题,这导致不能自动地包含所有的maven依赖项 – 当我打开该类时,IDEA显示依赖错误。问题如下图所示:
想让所有的依赖关系被自动添加 – 这是否可行?还是说必须要通过所有的类文件来识别和添加maven依赖?
经过一些尝试,做了一些修改之后,发现了解决上述问题的一种可行方式,如下图所示:
但是,它不会提前引入和检查新的依赖关系吗?!…在intelliJ中是否有任何地方可以设置:自动导出依赖到classpath?
推荐的解决办法
只要POM兼容并且所有依赖关系可用,IntelliJ会自动将所有依赖项添加到项目的类路径(classpath)中。
当将Maven项目导入IntelliJ时,通常会提示是否要为Maven项目配置自动导入(Auto-Import)。这意味着如果对POM做任何更改,这些更改也会自动加载。
可以按如下方式启用此功能:进入文件>设置> Maven>导入
,有一个复选框,显示“自动导入Maven项目”。
如果上述办法无效,建议做一个完整的clean-up
并重新开始:
-
关闭项目窗口(和IntelliJ)并删除所有的
*.iml
文件和所有的.idea
文件夹(每个模块应该有一个) -
从命令行运行
mvn clean install
-
重新导入(Re-import)将项目引入IntelliJ,注意启用自动导入(auto-import)的提示
针对IntelliJ 2016更新的不同细节处理:
导入Maven项目的自动设置功能已被移动到IntelliJ首选项的构建,执行,部署>构建工具> Maven>导入
中。
次佳解决办法
解决方法是:到文件[菜单] – >设置 – > maven – >导入,取消选中“使用maven3导入项目”
参考:http://youtrack.jetbrains.com/issue/IDEA-98425(可能还有其他一些思路)
更新:对于IntelliJ 15,已经没有“使用maven3导入”选项可用了。原因是有时IntelliJ“不能正确解析maven依赖关系”,亦即,如果不能解析其中的任意一个,它就会放弃所有这些依赖。可以通过打开maven项目工具窗口(查看菜单 – >工具Windows – > Maven项目)来判断是否是这种情况。展开一个maven项目及其依赖项,如果依赖关系都以红色加下划线,那么问题来了:
可以通过鼠标悬停在项目名称上,可以看到真正的失败原因。
在上面的实例中,显示“问题:没有可用的XXX的版本”或“无法读取artifact org.xy.z的描述符”,参考:https://youtrack.jetbrains.com/issue/IDEA-128846和https://youtrack.jetbrains.com/issue/IDEA-152555
问题在于,处理一个没有关联的pom文件的jar(在maven nexus repo中,也是本地存储库)。如果大家遇到了同样的问题,“如果实际上不需要代码中使用那个jar中的类(例如只有一个传递性的maven依赖),那么你实际上可以从pom 注释掉该依赖(临时),到maven项目重新加载,然后取消注释。
第三种解决办法
尝试从IntelliJ IDEA的Maven Projects面板中重新导入(Re-Import)项目。这应该会自动下载并配置pom.xml
中定义的所有依赖项。
如果由于某种原因在IDEA中下载不能正常工作,请从命令行尝试mvn install
,看看是否可以获取依赖关系。
当然,所有必需的依赖项和任何自定义存储库都必须直接在pom.xml
文件中定义。
第四种思路
对于IntelliJ 2016-2.4(以及其他new-ish版本):
视图>工具Windows> Maven项目
在新显示的工具栏中,选择Maven设置(工具集的图标)。
当此屏幕打开时,展开Maven菜单,然后单击导入(‘Importing’)
然后单击“自动导入Maven项目”。另外,还要确保“JDK for Importer”选项与您使用的JDK版本相匹配。
单击确定。现在到pom.xml中的红色依赖,选择红色的灯泡,然后点击’更新Maven索引’。
第五种思路
导入项目时,应该选择pom.xml
而不是项目目录。
第六种思路
当创建一个新项目时,只需选择以下选项:
…从外部模型导入项目
在现有外部模型(Eclipse,Maven …)上创建IDEA项目结构…
在上述问题的情况下,可以关闭项目,只需创建一个新项目。选择之前旧项目的目录,这将覆盖它,使其成为一个Maven项目。
补充
如果导入相同的路径多次,则导入Maven依赖项可能会不起作用。这可能自动发生于导入现有的maven项目之后。出现这种情况的具体原因还不清楚按,但这应该是一个错误。
例如,如果项目是
hibernate
src/main
src/test
这三个路径可能被导入为顶级节点:
hibernate
src/main
src/test
如果是这种情况,依赖关系似乎是正确的,但是在删除多余路径(本例中为src/main
和src/test
)之前,它们将不会被使用。完成此操作后,刷新并单击Build>重建项目。 IDEA将提取依赖关系。
此问题的一个症状是,当手动检查库(问题的第二个屏幕截图)时,IDEA会警告有重复的路径。
有几种方法可以让重新读取依赖关系在需要的时候使用。如果访问“Maven Projects”选项卡,则在该选项卡的左上方有一个“Reimport All Maven Projects”图标。如果怀疑IDEA已经搞乱了依赖关系,可以点击文件>让缓存失效。