Eclipse项目中缺少Maven依赖项


108

我们有一个与Maven一起解决依赖关系的项目。它通常可以正常工作,但是现在我试图在新PC上编译并运行它,但是在Eclipse中缺少依赖项时遇到了问题。

有趣的是,如果我在控制台或Eclipse中运行“ mvn软件包”,它可以正常工作,甚至产生包含所有必要jar的战争。只有Eclipse抱怨“该项目未构建,因为它的构建路径不完整。找不到org.slf4j.Logger的类文件...”。如果将项目与其他计算机(项目可以正常运行)进行比较,我会注意到Eclipse中“ Maven依赖项”列表下缺少很多库。即使它们处于打包战争中,也可以在存储库文件夹下找到它们。

因此,罐子只是Eclipse不会在“ Maven依赖项”下列出它们。我能做什么?

计算机在具有64位Java和Eclipse的Windows 7上运行。


是否像jira.codehaus.org/browse/MNG-2045这样的范围问题?
VonC

1
这不值得发布答案,但是对于以后阅读此书的任何人来说,您似乎需要至少键入三个不带通配符的字符。例如,键入“ t”或“ to”将不会显示任何结果,但是会显示“ tom”。信不信由你,我花了大约一个小时的时间才因各种原因而进行搜索,然后才意识到这一点。
克里斯·尼夫

Answers:


117

好吧,我尝试了此处发布的所有内容,但不幸的是,在我的情况下,没有任何效果。因此,尝试使用不同的组合,得出了解决我的问题的组合。

1)在Eclipse项目的根目录下打开.classpath文件。

2)在文件中插入以下条目:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
        </attributes>
</classpathentry> 

然后,在eclipse上重建项目(Project-> Clean-Build)。现在,您可以在“库”选项卡的Maven依赖项中检查项目的Java Build Path: 在此处输入图片说明


3
这是每个人都应该尝试的第一件事。用记事本打开将在项目目录中的.classpath文件,并添加提及的行并刷新您的项目。
阿米特·库玛

9
这在其他所有失败的地方起作用。但是我必须为我创建的每个项目都这样做吗?为什么不自动运行?真正的问题是什么?
yeaaaahhhh..hamf hamf 2015年

igh,这在m2e 1.6.2.20150902-002中仍然没有解决。在Mac OS X / JDK 1.8上全新安装了香草Eclipse的情况下进行了测试。用于Java开发人员的Eclipse IDE版本:Mars.2版本(4.5.2)Build ID:20160218-0600我想知道此插件是否需要Eclipse Java EE才能正常工作吗?
Mat Gessel '16

1
这个答案应该是第一个。唯一有效的;-) thx
Manuel Manhart

1
魔法!仍然有效的Eclipse 4.4.2
versvs

89

问题解决了!

我不知道到底能解决什么,但是我在Eclipse中做了四件事:

  • 窗口->首选项:Maven->安装:全局设置->打开文件和硬编码的localRepository
  • 项目->清洁
  • 右键单击项目:Maven->更新依赖项
  • 右键单击项目:Maven->更新项目配置

我猜这是Update依赖项,因为在前两个之后就没有变化。


2
我知道“ Project-> Clean”,我已经尝试过了,但是起初并没有帮助。
hostnik 2010年

7
这是最后一点。更新项目配置将为您的项目添加一个“ Maven Dependencies”库。
爱德华·维奇

2
仅供参考,我首先必须右键单击我的项目,转到“配置”并“转换为Maven项目”。
duma 2014年

2
在扩展Eduard Wirch的答案时,我还必须选中在Maven-> Update Project ...窗口中找到的“强制更新快照/发布”框。我缺少的工件是快照,如果不强制使用它,更新就不会很好。
evaldeslacasa 2015年

1
我必须将用户设置“ settings.xml”更改为“ .m2”目录下的用户设置。它以前在Maven安装目录下设置为1。
杰克·斯特劳

34

我也是Eclipse的新手,并且遇到了类似的问题,即使所有迹象都表明已成功下载了依赖项,Eclipse仍无法识别导入语句。

您应该通过转到命令行并输入以下内容来检查您的依赖文件是否已实际下载:

mvn dependency:tree

如果您在那看到软件包,但是Eclipse不认可它,那么对我而言(有时)有用的是转到终端,将CD放入项目文件夹,然后键入

mvn eclipse:clean 然后 mvn eclipse:eclipse

最终在Eclipse中刷新项目

我不知道为什么会这样,有时不起作用一次,然后再做一次就可以了,所以值得一试!


通过向我显示settings.xml文件存在问题,这为我指明了正确的方向!谢谢@rogueleaderr!
slashp

是的,它为我的朋友工作,解决了她所有的问题和头痛。不幸的是对我没用。
Zack Zilic

它也对我有用,但是有人可以解释幕后发生的事情吗?
YouAreAwesome

31

我的项目刚刚搞砸了。这是我为Eclipse Indigo x64(J2EE 3.7.3)修复的方式:

  1. 删除了我的POM文件(当然是备份的)。
  2. 项目上下文菜单 > Maven > 禁用Maven自然
  3. 删除项目(但不删除磁盘上的内容)。
  4. 重新导入为导入 > 常规 > 现有项目
  5. 项目的上下文菜单 > 配置 > 转换为Maven项目......
  6. 从Maven向导接受默认值。
  7. 用备份的POM覆盖POM。(现在您有了Maven Dependencies文件夹)。
  8. Maven的更新/清洁措施。

希望能对某人有所帮助。:)


这对我有帮助!我不知道出了什么问题,但是我使用的是64位Juno / Springsource 3,它始终无法正确导入我的Maven项目。如果我作为常规项目签出,请重命名我的POM,然后按照步骤5开始的指示进行操作。否则,除了mvn eclipse:eclipse可怕的命令行之外,我尝试的所有操作都不会将Maven依赖项添加到我的项目中。
ngreen 2012年

我这样做了,但仍然没有Maven依赖项文件夹。这是我的pom.xml文件,我认为这就是为什么我有这个问题: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>antlr.tuto.calco</groupId> <artifactId>CalculatriceAntlr</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
Anatch

我真的不知道问题出在哪里,但我已按照上述步骤操作,并且工作正常。它会导致错误,例如找不到类,找不到xml dtd。但是现在解决了。谢谢哥们。赞成。
Sagar007 '17

29

对于其他项目中创建的依赖项,我遇到了这个问题。下载的第三方依赖项在构建路径中显示良好,但不是我创建的库。

SOLUTION: 在未正确构建的项目中,

  • 右键单击该项目,然后选择“属性”,然后选择“ Maven”。

  • 取消勾选框“ 从工作区项目解决依赖性

  • 单击“应用”,然后单击“确定”。

  • 再次右键单击您的项目,然后执行Maven-> Update Snapshots(或Update Dependencies)

并且,在您的项目重建时,错误应该消失(如果启用了自动构建,则将自动消失)。


谢谢,这解决了我的问题。似乎指出这是一个Eclipse错误。
Scott McIntyre

1
嘿,没有Maven-> Update Snapshots(或Update Dependencies)之类的东西。如果我单击右键,是否没有Maven选项?您所描述的位置在哪里?我在寻找,但是在您点击“申请”后找不到描述
DarioBB

1
@DarioBB这个答案将近5岁了。我已经在Eclipse工作了一年多了。我不知道该选项是否仍然可用。我可能没有使用最新版本。
IceBox13 '16

1
该解决方案在Eclipse neon中对我有用。之后执行Maven>更新项目(而不是更新快照)。
伊凡娜

9

好吧,我尝试了此处发布的所有内容,但不幸的是,在我的情况下,没有任何效果。因此,尝试使用不同的组合,得出了解决我的问题的组合。

1)在Eclipse项目的根目录下打开.classpath文件。

2)在文件中插入以下条目:

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
        </attributes>
</classpathentry> 

然后,在eclipse上重建项目(Project-> Clean-Build)。


谢谢!这个解决方案对我来说是最有效的,只有一个更难解决的问题,我不得不关闭并重新打开该项目。
塔伦·古普塔

精彩。这也为我工作。在我的项目中,我看不到Maven依赖项。现在可见,并且也添加到构建路径中。谢谢!
塔希尔·穆罕默德

7

以防万一有人尝试了所有其他选项而您仍然陷于困境,请尝试右键单击项目文件夹,转到Maven选项,然后单击“添加依赖项”按钮。由于某种原因,Eclipse 第一次尝试时不会从pom.xml中手动更新依赖项。

菜单选择的屏幕截图



5

对我来说,问题是maven找不到位于myMavenFolder \ conf中settings.xml文件。

我要解决的问题是从eclipse中选择settings.xml文件的正确位置:
窗口->首选项-> Maven->用户设置

最后,点击“应用”并更新您的项目


4

因此,我参加这个聚会大约要晚4到5年,但是在退出我们的回购协议后,我遇到了这个问题,在我看来,该线程中没有其他解决方案可以消除这些警告/错误。

这对我有用:

从Eclipse转到窗口->首选项-> Maven(展开)->错误/警告。最后一个选项显示为“生命周期配置未涵盖的插件执行”-使用此选项的下拉菜单,然后依次选择“忽略”,“应用”和“确定”。(在“需要更新Maven项目”提示下,单击“确定”)。

更多信息:

这可能不一定“解决”潜在问题,也可能不被某些人称为“最佳实践”,但是它应该删除/抑制这些警告在Eclipse中出现,并至少让您前进。具体来说-我使用的是带有Arch Dashboard和Spring IDE Core(3.6.3)的Eclipse Luna Service Release 1(4.4.1),以及安装在Arch Linux和OpenJDK 1.7上的m2e(1.5)。我将项目导入为现有的Maven项目,并在警告现有警告/错误时选择“确定”(以供日后使用)。

禁止/删除“插件执行未覆盖...”警告Eclipse-Maven

(对不起,我不是设计师,但为清楚起见添加了图片。)


4

对于我来说,以下步骤适用:

1 在Eclipse上,右键单击所需的项目Maven-> Disable Maven Nature

2 再次右键单击,然后转到“ 属性”。删除所有有关外部Maven依赖的证据,仅保留JRE系统库。

3在项目上再右键单击一次,然后转到“ 配置”->“转换为Maven项目”


3

上面的解决方案都不适合我,因此此答案适用于我所遇到的其他情况。我最终自己发现了问题,并找到了另一种解决方案。pom.xml文件包含一个包装依赖关系的dependencyManagement标记,并且当存在时,M2Eclipse不会添加Maven Dependencies文件夹。因此,我删除了这个标签,然后执行了Ualter Jr.提供的解决方案,Eclipse立即添加了丢失的文件夹!


3

这是我遵循的步骤。
1.从eclipse中删除了maven项目。
2. 从我的源文件夹中删除了src和pom 以外的所有文件(.setting / .classpath / target)。
3.再次导入为Maven项目
。4.再次构建它,您应该能够看到Maven依赖项。


2

我的答案与@JerylCook的答案类似:.classpath在正常工作的Maven项目中查找另一个文件,将不良文件编辑为正常工作的文件。关键是要添加

<attributes>
    <attribute name="maven.pomderived" value="true"/>
</attributes>

在每种<classpathentry>类型con和类型中src。别忘了更改<classpathentry .... /><classpathentry ...>xxx</classpathentry>

最后,更新maven项目并在maven中重新安装/重建。


这为我做到了。谢谢。
NuCradle

1

如果在执行Maven->更新项目配置后出现“嵌套路径”错误(或者在Juno中是“更新配置...”),那么您的构建路径配置错误。

右键单击项目->构建路径->配置构建路径

确保仅包含“ / src”和该级别的目录。如果存在例如“ / src”和“ / src / main / resources”,则这是不正确的。第二个资源('/ src / main / resources')位于第一个('/ src')之下,“嵌套”,这导致您无法导入资源,因为它可以防止Eclipse看到Maven依赖项。


1

我的问题听起来很相似,所以我将添加讨论。我取消了将现有的maven项目导入Eclipse的操作,这导致该项目无法进行更新,并且无法正确完成Work Space的构建。

解决该问题所要做的就是选择,Run As... -> Maven build...然后在“目标”下输入dependency:go-offline并运行该目标。

然后,我右键单击该项目,然后选择Maven -> Update Project...并更新该特定项目。

最终,它允许它创建源文件夹并完成导入。


1

我可以通过以下方法解决错误:1)右键单击(您的maven项目)-> maven-> maven安装

成功安装后

2)右键单击(您的maven项目)-> maven->更新项目。并解决了Maven的整个错误!


1

对我来说,在.project文件中添加一个buildCommand(org.eclipse.m2e.core.maven2Builder)和一个性质(org.eclipse.m2e.core.maven2Nature)就足够了,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>iText</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
        <buildCommand>
            <name>org.eclipse.m2e.core.maven2Builder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
        <nature>org.eclipse.m2e.core.maven2Nature</nature>
    </natures>
</projectDescription>

我有 在此处输入图片说明


1

这就是我解决的方法

  • 窗口->首选项:Maven->用户设置(在出现的窗口中单击“打开文件”,或仅使用外部文本编辑器(如记事本)编辑settings.xml)确保localRepository(在此窗口中显示)正确。我的档案中有错字。
  • 更正settings.xml后,单击“更新设置”,该设置位于同一“首选项”->“ Maven”->“用户设置”屏幕上。

现在进行重建,它将在正确的位置安装最新的JAR。


1

我有一个类似的问题,并尝试了这篇文章中的所有答案。解决这个问题最接近的方法是结合Joseph Lust和Paul Crease解决方案。在删除并重新导入项目之后,我添加了备份的pom.xml文件,直到删除了pom.xml中的依赖项管理标签并且神奇地存在依赖项文件夹之后,什么都没有显示。

但是,它破坏了子POM的功能,因为它们需要父pom.xml依赖项管理才能运行,结果是我的MVN在Eclipse或命令行上的项目上均无法正常运行,从而导致pom.xml错误。

如果所有方法都失败了,最后的解决方案是手动导入项目所需的.jar文件。右键单击项目的属性-> Java构建路径->库,然后添加外部Jar。

如果您的MVN在命令行中正常工作,并且您已在项目上成功完成构建,则将在.m2 / repository文件夹中拥有所有需要的存储库。添加在pom.xml的依赖项标签中提到的所有外部jar,您将在Eclipse中看到一个引用的库部分,并且消除了所有讨厌的红色错误。

这不是最佳解决方案,但是它将使您能够在Eclipse中工作而不会丢失依赖项而出错,并且还允许您从Eclipse和命令行构建Maven项目。


1

我也遇到了同样的问题,这是因为回购问题导致下载jar时出现错误,并通过中的红色标记表示pom.xml

我添加了另一个存储库,以便pom.xml消失的红旗和Eclipse再次加载了pom,解决了它的问题,并在Project Explorer中列出了maven依赖项。解决可见的问题听起来很简单而且很明显,但是由于Eclipse非常乐于运行maven并成功构建,因此,红旗和回购问题不是其不愿意解析pom和列出maven的根源,这一点并不明显。依存关系



1

将.classpath更新为以下将每次都起作用。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry excluding="WEB-INF/" kind="src" path="src/main/webapp"/>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

1

Maven依赖关系:在Eclipse中为我解决了什么?我在“ pom”文件中添加了依赖项。我进行了构建,但是在Eclipse中看不到Maven依赖关系。下一步:关闭项目。然后重新打开该项目。我可以看到Maven依赖项。


1

Pom发生错误时出现此错误。

  1. 在控制台上运行mvn eclipse:eclipse命令以检查pom是否可解析。
  2. 如果无法解析,则搜索错误。

我在cygwin下运行,我注意到只有该项目不在eclipse下构建,尽管我在命令行上成功构建(使用mvn)。运行后,mvn eclipse:eclipse所有依赖项都添加到了eclipse项目中的类路径中,该项目看起来还不错。++
Bill Naylor

0

令人惊讶的是,这个问题有很多不同的原因和可能的解决方案。我找到了另一个对我有用的解决方案。

嗯,这不是一个解决方案,而是一个发现:我可以在Package Explorer中看到Maven Dependencies节点,这是Java透视图的默认节点,但是我不能看到它在Java EE透视图,其采用的工程资源管理器默认。乍一看,这两个资源管理器看起来都非常相似,因此您可能希望在两者中都能看到Maven依赖关系。

当我试图弄清楚这一点时,我还没有意识到这种差异,所以最终这对我来说并不是真正的问题。



0

在Eclipse STS中,如果“ Maven Dependencies”消失了,则必须检查并修复pom.xml。我这样做了(两次),我解决了。这不是一个依赖项问题,而是一个字符串生成并在my中随机移动到一个位置pom.xml



0

这么多答案。您会看到,可能有很多原因,为什么这没有按预期进行。就我而言,我也没有意识到依赖项周围的-Tag。面容

例:

...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

这仅定义此版本以及具有所需版本的所有子项目的依赖关系!这就是它在主POM中的外观。要在当前项目中真正使用lib,您还需要添加依赖关系,如下所示:

...
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${org.slf4j.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>
</dependencies>

现在它将提供此当前项目中的库。

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.