缺少Eclipse项目中的Maven依赖项

问题描述 投票:94回答:33

我们建立了一个与maven合作解决依赖关系的项目。它通常工作正常,但现在我正在尝试编译并在新PC上运行它,我在Eclipse中缺少依赖项的问题。

有趣的是,如果我在控制台或日食中运行“mvn package”,它可以正常运行,甚至可以生成包含所有必需罐子的战争。只有Eclipse抱怨“项目未构建,因为它的构建路径不完整。无法找到org.slf4j.Logger的类文件......”。如果我将项目与其他计算机进行比较(项目工作正常),我注意到Eclipse中的“Maven依赖项”列表中缺少相当多的库。虽然他们在打包的战争中,他们也可以在存储库文件夹下找到它们。

所以,jar-s只是Eclipse不会在“Maven依赖”下列出所有内容。我能做什么?

计算机在Windows 7上运行64位java和eclipse。

eclipse maven-2 m2eclipse
33个回答
94
投票

好吧,我尝试过这里发布的所有内容,遗憾的是在我的情况下没有用。所以,尝试不同的组合,我出来解决了我的问题。

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)重建项目。您现在可以在Libraries选项卡上的项目的Java Build Path中检查包含的Maven依赖项:


4
投票

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

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

最后,点击apply并更新你的项目


4
投票

对于我的案例中的以下步骤:

1在eclipse上,右键单击所需的项目Maven - >禁用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依赖。


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 install来解决错误

安装成功后

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


1
投票

对我来说,在.project文件中添加一个buildCommand(org.eclipse.m2e.core.maven2Builder)和一个nature(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后,单击“更新设置”,该设置位于同一个Preferences-> Maven-> User Settings屏幕上。

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


1
投票

我有一个类似的问题,并尝试了这篇文章中的所有答案。我最接近解决这个问题的方法是将Joseph Lust和Paul Crease解决方案结合起来。删除并重新导入项目后,我添加了备份的pom.xml文件,直到我删除了pom.xml中的依赖关系管理标记,并且神奇地将依赖项文件夹放在那里时才显示任何内容。

然而,它打破了子POM,因为它们需要父pom.xml依赖关系管理才能运行,因此我的MVN在Eclipse或命令行上的项目上运行不正常,从而导致pom.xml错误。

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

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

这不是最佳解决方案,但它可以让您在Eclipse中工作而不会出现任何缺少依赖项的错误,并且还允许您从Eclipse和命令行构建Maven项目。


81
投票

问题解决了!

我不知道究竟是什么解决了它,但我在Eclipse中做了4件事:

  • Window-> Preferences:Maven-> Installations:Global settings - > open file and hardcoded localRepository
  • 项目 - >清除
  • 右键单击项目:Maven->更新依赖项
  • 右键单击项目:Maven->更新项目配置

我想这是更新依赖项,因为在前两个之后没有任何变化。


1
投票

同样的问题发生在我身上,这是因为由于回购问题而下载一个罐子时出错,由pom.xml中的红旗表示。

我添加了另一个存储库,因此pom.xml中的红色标志消失了,然后Eclipse再次加载了pom,解决了它的问题并在Project Explorer中列出了maven依赖项。解决可见问题听起来很简单明了,但由于Eclipse非常乐意运行maven并成功构建,因此红旗和回购问题的根本原因并不在于它不愿意解析pom并列出maven依赖


1
投票
mvn eclipse:clean

然后从eclipse:“Maven Update Project”就可以了!


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
投票

我的答案类似于@JerylCook的答案:在一个正在运行的Maven项目中找到另一个.classpath文件,将那些糟糕的文件编辑为好的工作。关键是要添加

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

<classpathentry>con类型的每个src中。别忘了将<classpathentry .... />改为<classpathentry ...>xxx</classpathentry>

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


1
投票

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


0
投票

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

好吧,它不是一个解决方案,而是一个发现:我可以在Package Explorer中看到Maven Dependencies节点,这是Java透视图的默认设置,但是我在Java EE透视图中看不到它,它使用Project Explorer默认情况下。这两个探险家在快速浏览时看起来非常相似,所以你可能希望看到两者中的Maven依赖关系。

当我试图解决这个问题时,我没有意识到这一点,所以最终对我来说这不是一个真正的问题。


0
投票

整个项目在eclipse看起来很奇怪,maven依赖项文件夹丢失,它显示一些类型为未知,但我能够在maven中成功构建它。解决了我的问题是将gen文件夹添加到项目构建路径上的源路径。

可能这与这个Android /FBReaderJ/gen already exists but is not a source folder. Convert to a source folder or rename it相似


0
投票

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


0
投票

对于我的案例中的以下步骤:

1在eclipse上,右键单击所需的项目Maven - >禁用Maven Nature

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

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

它对我也有用


0
投票

以上所有都不适用于我。因为修复只是删除.m2下的存储库文件夹,然后从eclipse执行maven更新。


30
投票

我也是Eclipse的新手,我一直遇到类似的问题,Eclipse只是无法识别import语句,即使所有迹象都表明依赖项已成功下载。

您应该通过转到命令行并键入来检查您的依赖项文件是否已实际下载

mvn dependency:tree

如果你在那里看到你的包,那么Eclipse不承认它,对我有用的东西(有时)是去终端,cd进入项目文件夹,然后键入

mvn eclipse:clean然后mvn eclipse:eclipse

最后在eclipse中刷新项目

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


0
投票

这么多答案。你看,可能有很多原因,为什么这不起作用,如预期的那样。在我的情况下,我也没有意识到 - 围绕我的依赖关系。捂脸

例:

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

这只能确定具有所需版本的此子项目和所有子项目的依赖关系!这就是它,例如应该在master-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>

现在它将在本项目中提供lib。


26
投票

我的项目刚搞砸了。以下是我为Eclipse Indigo x64(J2EE 3.7.3)修复它的方法:

  1. 删除了我的POM文件(当然是备份)。
  2. 项目上下文菜单> Maven>禁用Maven Nature。
  3. 删除了项目(但不是磁盘上的内容)。
  4. 重新导入为Import> General> Existing Project。
  5. 项目上下文菜单>配置>转换为Maven项目....
  6. 接受Maven向导的默认值。
  7. 使用备份POM覆盖POM。 (现在你有Maven Dependencies文件夹)。
  8. Maven更新/清洁以获得良好的衡量标准。

希望能帮助别人。 :)


25
投票

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

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

  • 右键单击项目,选择“属性”,然后选择“Maven”。
  • 取消选中“从Workspace项目中解析依赖项”框
  • 点击Apply,然后OK。
  • 再次右键单击项目并执行Maven-> Update Snapshots(或Update Dependencies)

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


7
投票

为了防止任何人尝试了所有其他选项并且您仍然卡住,请尝试右键单击项目文件夹,转到Maven选项并单击“添加依赖项”按钮。出于某种原因,Eclipse首先尝试不从pom.xml手动更新依赖项。


6
投票

好吧,我尝试过这里发布的所有内容,遗憾的是在我的情况下没有用。所以,尝试不同的组合,我出来解决了我的问题。

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)重建项目。


5
投票

我遇到了类似的问题。我通过运行Maven-> Update Project Configuration操作解决了这个问题


4
投票

所以我在这个派对上迟到了大概4到5年,但是我从我们的回购中解决了这个问题,并且在我的案例中没有其他解决方案能够解决这些警告/错误。

这对我有用:

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

更多信息:

这可能不一定“修复”潜在的问题,并且可能不符合某些人的“最佳实践”,但它应该删除/禁止这些警告出现在Eclipse中并让你至少前进。具体来说 - 我正在使用Eclipse Luna Service Release 1(4.4.1)w / Spring Dashboard&Spring IDE Core(3.6.3)和m2e(1.5)安装,在Arch Linux和OpenJDK 1.7上运行。我将我的项目导入为现有的maven项目,并在警告现有警告/错误(稍后处理它们)时选择OK。

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

© www.soinside.com 2019 - 2024. All rights reserved.