在IntelliJ IDEA中导入Maven依赖项


208

我对IntelliJ IDEA 11有一个小问题。我刚刚从subversion导入了一个项目-它是maven项目。但是我在maven库依赖项方面遇到问题,因此我无法自动包含所有maven依赖项-IDEA仅在打开该类时才显示依赖项错误,这就是我在这里得到的:

在此处输入图片说明

因此,我希望所有依赖项都自动添加-是可能的还是我必须遍历所有类文件才能识别并添加Maven依赖项?

更新:经过一些修改后,我发现了如何以某种方式解决我的问题。那就是我所做的: 在此处输入图片说明

但我认为从逻辑上讲,它将不包括并提前检查新的依赖关系吗?!... intelliJ中是否有任何设置区域-自动将依赖关系导出到classpath吗?


9
它会下载所有依赖项,但似乎并没有将所有依赖项都添加到类路径中……
Zaur Guliyev 2012年

3
另一个问题是intelliJ仅在打开该Java文件时才向我显示带红色下划线的错误...
Zaur Guliyev 2012年

4
出现此红线的一个实例是,如果您具有带分类器的SNAPSHOT依赖项,则存在一个没有分类器的较新版本的依赖项。这在Maven中是完全合法的,但是IntelliJ试图在本地Maven存储库中找到物理文件的路径时会感到困惑。
RCross

4
仅供参考,这仍可能在15.0.2中发生。只是发生在我身上。必须吹走我的.iml文件和.idea文件夹,然后重新导入。我花了两个小时与之抗衡,令人难以置信的b / c,最终丢失了我所有精心设计的运行配置。
凯文·保利

3
@KevinPauli不需要为此删除IDEA项目文件,只需在“ Maven项目”选项卡下“重新导入所有Maven项目”即可进行手动重新导入。
Zaur Guliyev 2015年

Answers:


282

只要您的POM兼容并且所有依赖项都可用,IntelliJ应该自动下载所有依赖项并将其添加到项目的类路径中。

将Maven项目导入IntelliJ时,通常会出现一个信息框,询问您是否要配置自动导入为Maven项目。这意味着,如果您对POM进行任何更改,这些更改将自动加载。

您可以通过转到“文件”>“设置”>“ Maven”>“导入”来启用此功能,其中有一个复选框显示“自动导入Maven项目”。

如果那没有帮助,那么我建议进行彻底清理并重新开始:

  • 关闭项目窗口(和IntelliJ)并删除所有*.iml文件和所有.idea文件夹(每个模块应有一个)
  • 运行mvn clean install命令行
  • 将项目重新导入IntelliJ,并在要求您启用自动导入时注意

IntelliJ 2016更新

导入Maven项目”自动设置已在IntelliJ首选项中移至“ 构建”,“执行”,“部署”>“构建工具”>“ Maven”>“导入”


所以您的解决方案是将依赖项标记为已导出?那真是怪了!我经常使用IntelliJ和Maven,但我的项目(其中一些是多项目)都没有启用导出功能...是Community Edition还是Ultimate?
阿隆索·多明格斯

1
它是终极版,但是我导入的项目是在Eclipse上构建的,因此启用了.classpath,但是IntelliJ使用.iml-因此,如果该项目没有.iml,则我认为这是第一次包含这些库是合乎逻辑的文件之前..?!
Zaur Guliyev

1
哦,好吧-您是否尝试过将其作为Maven项目而不是Eclipse项目导入?在使用Maven项目时,我通常不将与IDE相关的文件检入源存储库:如果是Maven项目,则使用Maven规则
Alonso Dominguez,2012年

2
您可以在首选项/设置中启用自动导入。打开首选项/设置,然后搜索“自动导入maven项目”。它位于“构建,执行,部署”>“构建工具”>“ Maven”>“导入”下
Seyed Jalal Hosseini

2
@JustinBlank对此并不感到惊讶,因为这是2012年的答案。设置仍然存在,它们只是被移到了其他位置(答案已更新)。
阿隆索·多明格斯

66

在IntelliJ 14之前修复

文件[菜单]->设置-> maven- >导入,然后取消选中 “使用maven3导入项目”

参考:http: //youtrack.jetbrains.com/issue/IDEA-98425(可能还有其他一些想法)

修复IntelliJ 15+

再次使用IntelliJ 15再次解决这个问题,它不再提供“使用maven3导入”选项。原因是IntelliJ有时“无法正确解析Maven依赖项”,并且如果无法正确解析其中的一个,显然会放弃所有这些依赖项。您可以通过打开Maven项目工具窗口(查看菜单->工具窗口-> Maven项目)来判断是否是这种情况。然后,展开您的一个Maven项目及其依赖项。如果所有依赖项都用红色下划线标出,“休斯顿,我们有问题”。 在此处输入图片说明

您实际上可以通过鼠标悬停在项目名称本身上来查看真正的失败。

在此处输入图片说明

在我的情况下它说:“问题:无版本为XXX”或“无法读取神器org.xy.z描述符” REF:https://youtrack.jetbrains.com/issue/IDEA-128846https://开头youtrack.jetbrains.com/issue/IDEA-152555

在这种情况下,我似乎正在处理一个没有关联pom文件的jar(在我们的maven nexus repo中,还有我的本地存储库中)。如果这也是您的问题,请“紧急解决:如果您实际上不需要在自己的代码中使用该jar中的类(例如,仅适用于可传递的Maven依赖项),则可以从pom注释掉它(临时),重新加载maven项目,然后对其取消注释。在这之后,IntelliJ会以某种方式“记住”它的旧工作依赖关系。 ”

可能有所帮助的另一件事是使用比捆绑的3.0.5更高的Maven版本。为了将其设置为默认值,请关闭所有intellij窗口,然后打开首选项->构建,执行和部署->构建工具-> maven,并更改maven主目录,它应显示为“默认“项目”位于顶部,但您也可以针对特定项目进行调整,只要您在调整后“重新导入”即可。

清除缓存

删除您的intellij缓存文件夹(Windows:HOMEPATH /。{IntellijIdea,IdeaC} XXX linux〜/ .IdeaIC15)和/或卸载并重新安装IntelliJ本身。这也可以通过转到File [菜单]->来完成Invalidate Caches / Restart...。点击invalidate and restart。这将重新索引整个项目并使用IntelliJ解决许多难以追踪的问题。


2
奇怪的是,几乎所有其他帖子都建议选中“使用Maven3导入项目”选项来解决此问题,而实际上不选中它会为我解决该问题。为什么?我不知道。谢谢!
janhink 2014年

3
在v14 Ultimate中,我选择了一个外部Maven,一切恢复正常。
AlikElzin-kilaka 2015年

@ AlikElzin-kilaka将Maven主目录更改为外部Maven主目录确实有很大帮助。在将IDEA更新为v14 Ultimate之后,由于“未找到tomcat6插件”而无法在IDEA中启动我的项目,但是我可以使用mvn命令启动项目,并将maven主目录更改为外部目录即可解决它
JerseyGood

在IntelliJ 2016.2.1中,禁用自动导入将更Maven home directory改为我们的堆栈使用的版本(3.3.9)为我解决了此问题。
惠勒

1
改变maven home directoryBundle (Maven 3)到我的Maven是安装路径.../maven/3.6.1/libexec为我工作
马塞洛泽维尔

37

导入项目时,请选择pom.xml而不是项目目录。它应该工作。


1
有时单击“ Maven项目”窗口下的“重新导入所有Maven项目”选项
vikramvi '18

1
也许这是最优雅,最干净的解决方案(并且intellij有点尴尬,对您的猜测没有帮助)
Matanster,

IntelliJ Community Edition 2019.3.4也为我工作。谢谢您这么简单的解决方案。:)
asymmetryFan

22

尝试从IntelliJ IDEA的“ Maven项目”面板中重新导入项目。它应该下载并pom.xml自动配置您定义的所有依赖项。

如果由于某种原因无法从IDEA下载文件mvn install,请从命令行尝试,查看是否可以获取依赖项。

当然,所有必需的依赖项和任何自定义存储库都必须在pom.xml文件中直接定义。


14

对于IntelliJ 2016-2.4(我相信其他新版本):

查看>工具窗口> Maven项目

在新显示的工具栏中,选择Maven设置(工具集的图标)。

打开此屏幕后,展开Maven菜单,然后单击“导入”

在这里,单击“自动导入Maven项目”。还要确保“ JDK for Importer”选项与您要使用的JDK版本相匹配。

单击确定。现在转到pom.xml中的红色依赖项,选择红色灯泡,然后单击“更新Maven索引”。


1
为进口商选择合适的JDK帮助了我。我还必须运行mvn idea:clean idea:idea来关闭最后一个问题。
Vincent F


7

如果某些Maven模块未编译,请检查其pom.xml是否在“忽略的文件”列表中。在IntelliJ goto中

首选项->项目设置-> Maven->被忽略的文件

并检查相关的pom.xml是否被忽略。


5

打开IntelliJ Idea,依次转到 文件>其他设置>默认设置...> Maven(首选项)>导入 或| Preferences > Maven > Importing

在此处输入图片说明

单击控制台中的启用自动导入

在此处输入图片说明


4

创建新项目时,只需选择以下选项:

...
导入项目从外部模型
在现有的外部模型创建IDEA项目结构(Eclipse中,Maven的...)
...

您会从那里直接找到它。
而且,根据您的情况,您可以关闭项目并仅创建一个新项目。选择项目的目录,它将覆盖它,从而使其成为Maven项目。


同意 几乎可以肯定,OP只是错误地导入了项目。
kaqqao

4

如果多次导入同一路径,则可能无法导入Maven依赖项。导入现有的Maven项目后,这可能会自动发生。我不知道为什么会这样,所以我倾向于认为这是一个错误。

例如,如果我的项目是

hibernate
  src/main
  src/test

这三个路径可以作为顶级节点导入:

hibernate
src/main
src/test

如果是这种情况,则依赖关系似乎是正确的,但是直到您删除了多余的路径(在本例中为src/mainsrc/test)后,它们才会被使用。完成此操作后,刷新并单击Build> Rebuild Project。IDEA将选择依赖项。

此问题的症状是,当您手动检查库时,IDEA会警告您路径重复(问题中的第二张屏幕截图)。

有多种方法可以在需要时重新读取依赖项。如果转到“ Maven项目”选项卡,则在该选项卡的左上方有一个“重新导入所有Maven项目”图标。如果您怀疑IDEA感到困惑,则可以单击文件>无效缓存。


3

进入项目结构,在项目设置,模块下,选择依赖表。对于每个依赖项,将范围从“测试”更改为“编译”。



3

首先检查为用户设置文件指定的路径设置->生成,执行,开发->生成工具-> Maven中。该字段应具有Maven 的settings.xml的路径。而且settings.xml应该具有正确的远程存储库路径。


这对我有用,在settings.xml文件中,嵌套在<mirror>标记中的<url>标记条目已经过时。我与同事商谈以获取更新的条目值。我对〜/ .m2 / settings.xml进行了更改,关闭了intelliJ并再次启动了它。重新启动后,什么也不做,在Maven视图中显示的红色下划线消失了。奇怪的是,在执行此修复之前和之后,大多数突出显示的根依赖项始终存在于Project视图的“外部库”条目中。
史蒂夫T

3

我有一个类似的问题,就我而言,我使用的settings.xml不是从IntelliJ中挑选的自定义。

解决方案:(
File > Settings > Build, Execution, Deployment > Maven: User settings file在这里选择我的自定义settings.xml)。


3

我遇到了同样的问题,并尝试了此处提到的所有答案,但均无济于事。

简单的解决方案是转到您的项目文件夹并删除所有.idea和.iml文件,然后重新启动IntelliJ ide。有用。无需对设置进行任何操作。


2

我遇到了一个问题,即在IntelliJ 2016.3.X中无法解决某些从属问题。可以通过将“ Maven home directory设置”>“构建,执行,部署”>“构建工具”>“ Maven”从Bundled (Maven 3)更改为来解决此问题。/usr/share/maven

之后,像以前的IntelliJ版本一样,所有从属关系都得到解决。


2

Maven-重新导入对我不起作用。我在STS(Eclipse)中有Spring项目,而我的解决方案是将项目导入IDEA,如下所示:

1)文件-新建-从现有源中进行项目...-选择目录-选择Eclipse。
2)在设置中将Maven自动导入设置为true。
3)然后右键单击pom.xml并选择Add as Maven Project。

在此之后,它已导入了所有内容。


2

我的Macbook遇到了类似的问题,只是做了很小的更改pom.xml,它开始下载所有依赖项:

较早的依赖项是针对Windows计算机编写的,如下所示:

<dependencies>
 <dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4</version>
</dependency>
</dependencies>

我刚刚删除了<dependencies>and </dependencies>标签,它开始下载所有依赖项:

<dependency>
  <groupId>javax.mail</groupId>
  <artifactId>mail</artifactId>
  <version>1.4</version>
</dependency>

我不确定它是否对您有用..但是对我来说很好。

谢谢


1

如果在右下角显示“ 2个进程正在运行...”或类似内容,则可能需要等待该过程完成,因为下载所有jar可能要花一些时间。


1

我通过使用正确的镜像配置更新我的settings.xml文件来解决此问题,似乎intellij会在每次导入maven模块时尝试从存储库下载元数据。


1

进行劫持以添加最终对我有用的东西:

进入Maven ProjectsIDE右侧的侧栏,并验证您的依存关系正确地列在其中的模块下。假设它们是,只需要求IDEA重新导入(顶部的第一个按钮,看起来像两个蓝色的箭头,形成一个逆时针的圆圈)。

一旦这样做,并让IDEA为我重新加载项目,就可以神奇地理解我的所有依赖关系。

供参考:这是与 IDEA 13.1.2


1

我遇到了同样的问题,并尝试了所有无法解决问题的建议,我使用的是Intellij版本13.1.3

最终,在花费了几个小时的时间来修复它之后,我决定尝试升级版本并在14.1.4版中打开该项目,最终解决了该问题。我认为这是以前版本中可能的错误。

我希望这有帮助!


1

我可以通过从项目设置->模块列表中删除不必要的模块来解决该问题。

在此处输入图片说明

事实证明,当我通过从项目文件夹导入(而不是通过打开pom.xml)创建IntelliJ项目时,这些附加模块是由IntelliJ IDEA自动创建的。然后,在将该项目声明为Maven项目之后,创建了正确的模块,并且现有模块与它们冲突。在项目创建过程中也可以排除那些模块。



1

就我而言,其中一个模块由于某种原因而被忽略了。解决此问题的方法:右键单击有问题的模块,然后选择“取消忽略项目”。

不可忽视的项目实例


1

在我的情况下,MAVEN使用的JAVA路径未设置为机器上配置的JAVA_HOME。因此,它甚至没有尝试下载依赖项。我遵循的步骤解决了这个问题,

  1. 检查JAVA路径,设置>>构建>>构建工具>>导入>> JDK for importer。将其指向JAVA_HOME。

  2. mvn clean install -U

    上面的命令用于强制依赖项下载。

  3. 重新导入Maven项目



0

在Maven中,当我删除了dependencyManagement xml部分并在项目部分的正下方有依赖项时,就为我包含了依赖项


0

问题似乎在于,尽管在pom.xml中列出了您的依赖项,但是在您运行项目时,IntelliJ IDEA不会重建那些依赖项。

对我有用的是:

转到“运行”->“编辑配置...”,找到您的应用程序,确保已展开“启动前:”部分,单击绿色加号,然后选择“构建项目”。

在此处输入图片说明


0

我能够通过在pom.xml文件中的build标记后添加以下代码行来修复我的问题,我从正在运行的项目中对其进行了比较,发现两者之间的区别,现在我一切都很好。

<repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.