当我更改 pom.xml 文件中的依赖项时,如何让我的 Eclipse-Maven 项目自动更新其类路径?

How do I get my Eclipse-Maven project to automatically update its classpath when I change a dependency in my pom.xml file?

我正在使用 Eclipse Mars 和 Maven (v 3.3)。当我更新我的 pom 中的依赖项(更改版本)时,我的 Eclipse-Maven 项目没有选择它,即使我右键单击我的项目,然后 select“Maven”->“更新项目”。我知道这一点是因为我在 Eclipse Java 编辑器中没有看到编译错误,当我在命令行上使用

构建项目时看到的
mvn clean install

当我从工作区中删除项目并重新导入它时,一切恢复正常。然而,这是一个麻烦的过程。如何让我的 Maven-Eclipse 项目自动检测我的 pom 中的变化并适当地更新项目库?

是的,在“项目”菜单中,选中了“自动构建”。

Eclipse 应该正在更新您的类路径。如果不是,则表示出现问题。

如果不进一步了解您项目的 pom.xml,很难说出问题到底是什么。解决问题可能需要更多信息,但我只是在黑暗中尝试一下:

打开项目根文件夹中的 .project 文件并检查那里的构建器和性质的顺序。项目中的某些其他性质也可能导致 maven2Nature 失败。将 maven nature 向上移动,看看是否有帮助。

或者您可能 认为 Eclipse 不会更新您的依赖项,因为它没有在项目中添加一些错误指示器,这些错误指示器应该与新的依赖项一起存在。如果是这种情况,请尝试清理当前项目(项目>清理...)。 Eclipse 中的 Maven 在更新依赖项时不一定会触发完全重建。

如果 none 有效,closing/opening 项目可能比重新导入更快地解决问题。

您应该在类路径中进行自动更新的三项强制检查

  1. 您的存储库未 in-sync 与您的 Eclipse IDE,请检查您的 IDE 中的以下设置。
  2. 右键单击 IDE 中的任何 POM.xml 并检查应该是 auto-activated 的 Maven 配置文件。此外,不应启用离线和强制更新复选框。请参考下图。
  3. 始终检查您的用户设置,它应该反映您的本地 maven settings.xml,如下图所示。
  4. 执行所有这些检查后,刷新 Eclipse Work-space 以反映这些更改。

作为最后的手段,您可以删除当前的 Eclipse 安装并安装新版本。当您添加多个插件时,它们可能会相互干扰并产生奇怪的行为。在你这样做之后,不要将你的 Maven 项目导入你的工作区,而是创建一个新项目并复制并粘贴你拥有的文件。

将项目导入 Eclipse 时,使用 Eclipse 自己的内置 Maven 支持(又名 m2e)。我建议不要使用 mvn eclipse:eclipse,因为它不会提供最佳结果(如您所见)。 Maven 是一个构建和依赖管理工具,而不是 IDE;期望它管理 IDE-specific 的东西是愚蠢的,在我看来(我意识到 Maven 团队有不同的想法,Maven 应该负责管理你的 IDE,但那是无稽之谈)。

因此,如果您的系统上有可用的项目,请删除任何特定于 Eclipse 的文件(通常只是 .classpath.project 和文件夹 .settings),它们是由mvn eclipse:eclipse 并且您不希望它们干扰此处描述的 "proper" 导入过程。然后在 Eclipse 中,使用 File > Import > Maven > Existing Maven Projects 导入项目。这应该会导致 Eclipse 和 Maven 之间更好的集成,包括在更改 pom 时自动更新 Eclipse 构建路径。

作为快速检查,以这种方式进行导入后,您应该在项目构建路径(在属性对话框中)的库选项卡中看到一个名为 Maven Dependencies 的组。像这样:

如果您希望每次更改 pom 时自动更新 Eclipse 项目配置,在 Preferences > Maven 下有一个(实验性的)设置。请注意,这样做可能并不可取 - 正如 this feature request 中所述,这是一个有点冗长的过程,涉及 Eclipse 项目中的一堆东西;在每次 pom.xml 更改时自动执行此操作最终可能会带来比其价值更多的麻烦。

你写的应该有用。你检查了吗:

  • "pure"mvn install 是否从终端看到您在 POM 中的更改?

  • 可能某些 Maybe 插件有问题,在 target 中缓存了一些依赖项,并且需要 mvn clean install

  • 你可以运行在一个新的工作区中使用 Eclipse,然后将你的项目导入到那里,有时它可以帮助解决这些奇怪的问题

  • 而不是通过 m2eclipse 将 Maven 项目导入 Eclipse,您可以尝试通过旧 mvn eclipse:eclipse 创建 Eclipse 文件,然后看看会发生什么

  • 当您尝试将您的 Maven 项目导入其他 IDE,例如免费的 IntelliJ 社区版时,它是否正常工作?