m2eclipse 找不到 Maven 依赖项,找不到工件

Posted

技术标签:

【中文标题】m2eclipse 找不到 Maven 依赖项,找不到工件【英文标题】:m2eclipse not finding maven dependencies, artifacts not found 【发布时间】:2011-01-24 12:30:01 【问题描述】:

我使用 m2eclipse 作为我的 maven 2 Eclipse 插件。我是 maven 的新手,所以我的错误可能很简单,尽管搜索并没有为我提供任何解决方案。我可以从命令行运行 maven 并成功构建。但是,如果我作为现有的 maven 项目导入,或者使用 mvn eclipse:eclipse 然后导入,我会得到在我的 POM 文件中找不到的工件,导致根本没有加载任何 maven 依赖项。

奇怪的是我有 2 个项目,都是父 pom 打包项目的子项目。一个孩子加载了我所有的 maven 依赖项,而另一个找不到任何依赖项,并说我的 pom 文件缺少工件。同样,我可以从命令行安装和打包它们。

我什至尝试将我的项目加载到运行完美的 netbeans 中,但是我需要使用 eclipse。

关于如何解决这个问题的任何想法?

更新

目录结构,pom文件布局:

--main
  --pom.xml   (is a pom package that is the parent to two other projects)
  --ProjectA
    --pom.xml
  --ProjectB
    --pom.xml

Main 是 ProjectA 和 ProjectB 的父项目。 ProjectB 将 ProjectA 作为依赖项。显然 m2eclipse 对这种依赖并不满意。一旦我从 ProjectB 的 pom 文件中删除 ProjectA 的依赖项,eclipse 就会找到所有 maven 依赖项。

- com.company.myproj:app:6.6.0:jar Missing: ---------- 1) com.company.myproj:main:pom:$myproj.version ---------- 1 required artifact is missing. for artifact: com.company.myproj:main:pom:$
 myproj.version from the specified remote repositories: apache-incubating (http://people.apache.org/repo/m2-incubating-repository/, releases=true, snapshots=true), central (http://
 repo1.maven.org/maven2, releases=true, snapshots=false)

但是,我仍然需要 ProjectB 才能拥有 ProjectA 的依赖项。错误消息似乎是 m2eclipse 在远程仓库中寻找 ProjectA。项目 A 应该只在 .m2 目录中,但我不知道如何告诉 m2eclipse 去那里看。

我认为这可能只是一个 m2eclipse 特定的问题,因为从命令行使用 mvn 可以正常工作,就像我之前所说的,netbeans 加载项目和依赖项就好了。

【问题讨论】:

请为您的问题提供更多详细信息:您是否导入了三个项目(父项目和两个子项目),哪些依赖项会导致问题,它们有什么特别之处,您能否展示您的 POM(匿名化它们如果需要)? 【参考方案1】:

听起来您的 m2eclipse 安装使用的是嵌入式 Maven,它有自己的存储库(位于用户主目录下)和设置。

如果您打开 Maven 偏好设置(Window->Preferences->Maven->Installations,您可以通过选择 Add... 然后浏览到 M2_HOME 目录来添加您的 Maven 安装。

(来源:sonatype.com)

更多详情请见m2eclipse book

【讨论】:

嗨,富!我不确定你的意思。默认情况下,嵌入式 maven 使用与外部 maven 安装相同的“默认”本地存储库位置 (~/.m2/repository)。另外,嵌入式版本始终用于依赖解析(如注释中所述),因此添加外部 maven 安装不会在这里更改任何内容,恕我直言。 @Pascal 我在工作中看到了同样的问题,其中 Maven 设置标准规定了不同的本地存储库,并且外部存储库需要代理设置。我猜 OP 也有类似的情况,在这种情况下使用相同的 settings.xml 会解决它 感谢您的提示。我不知道你可以指定这个......虽然我仍然遇到我的问题,但它帮助我更好地了解如何使用 m2eclipse 和 maven。 同样的问题,由于某些原因,插件不会在本地 repo 中查找,而是会尝试从远程获取它 非常感谢,在我搜索了很长时间后,这解决了我的问题。【参考方案2】:

如果您使用的是自定义“Settings.xml”,其中配置了不同的 <localRepository>,这可能会出现问题。

Eclipse 将使用默认安装的 MAVEN,并将使用默认位置供用户查找本地 Maven 存储库,在 Linux 系统上为“/home/$USER/.m2/”

通过执行以下操作,可以轻松地将 Eclipse 配置为使用自定义的“Settings.xml”: 转到-> 窗口-> 首选项-> 选择“Maven”-> 选择“用户设置”

    在“用户设置”下,为“用户设置”选择自定义“Settings.xml”文件,方法是单击“浏览”并选择自定义的“Settings.xml”。 单击“更新设置”,如果“本地存储库”文本框未显示上述文件中的自定义位置,只需键入位置并单击“重新索引”即可。 点击“确定”

在此之后,您可以继续从“项目资源管理器”中选择您的项目,右键单击,选择“Maven”>“更新项目”。确保在窗口中选择(勾选)您的项目,然后单击“确定”。

如果为 Maven 使用自定义“Settings.xml”,这应该有助于解决问题。

希望对你有帮助。

【讨论】:

【参考方案3】:

我发现的原因之一是它没有从存储库中找到 jar 可能是因为该特定 jar 的 .pom 文件可能丢失或损坏。只需更正它并尝试从本地存储库加载。

【讨论】:

【参考方案4】:

对我来说,maven 正在下载依赖项,但无法将其添加到类路径中。我看到了我的项目的 .classpath,它没有任何与 maven 相关的条目。当我添加

<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>

问题已为我解决。

【讨论】:

+1 很好的答案,但有趣的是,在 Eclipse UI 中可以做什么来做同样的事情 - 以及为什么 Eclipse 不自动执行此操作。【参考方案5】:

好的,我解决了这个问题。必须先将项目转换为 Maven 项目,然后将它们从 Eclipse 工作区中删除,然后重新导入。

【讨论】:

只要转换就够了!【参考方案6】:

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

解决方案:在未正确构建的项目中,右键单击该项目并选择属性,然后选择 Maven。取消选中标有“解决工作区项目中的依赖项”的框,点击应用,然后点击确定。再次右键单击您的项目并执行 Maven->Update Snapshots(或 Update Dependencies),当您的项目重新构建时,您的错误应该会消失(如果您启用了自动构建,则会自动消失)。

【讨论】:

【参考方案7】:

我在使用 m2eclipse 时遇到了问题(即它似乎根本没有安装),但我使用 IAM 开发了一个项目 - Eclipse Foundation 支持的 Eclipse maven 插件(或托管或类似的东西)。

我有时会遇到问题,因为有时项目会出现一些奇怪的错误(它无法移动某些东西),但简单的命令(从 eclipse 作为任务或从控制台运行)+刷新(F5)解决了所有问题:

mvn clean

但是请注意,我在 Eclipse 中创建了项目。但是我手动修改了pom.xml

【讨论】:

以上是关于m2eclipse 找不到 Maven 依赖项,找不到工件的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Google API 使用地图的 Maven 依赖项

为啥 Intellij 在 pom.xml 中找不到任何 Maven 依赖项?

Maven 在 IntelliJ 中找不到依赖项

找不到 Maven 依赖项的 Postgresql 驱动程序

我找不到代码示例的 Maven 依赖项: Keys.hmacShaKeyFor(...);

Maven 找不到依赖项:提示错误'parent.relativePath'点在错误的本地 POM