在Eclipse m2e中,如何引用工作区项目?

时间:2012-05-21 15:42:26

标签: java eclipse maven m2e

如何使用Eclipse m2e 引用其他工作区项目?

我是否必须在项目设置中添加项目依赖项?但在这种情况下,依赖关系不会显示在pom中。

如果我在pom中设置它们,它将不会引用工作区中的项目,而是引用本地存储库中的jar。很烦人,有人可以帮忙吗?

5 个答案:

答案 0 :(得分:56)

执行此操作的正确方法如下:

  • 独占使用POM文件中的dependencies部分,不要使用Eclipse项目引用。右键单击该项目,然后选择 Maven>更新项目配置以将项目重置为Maven默认设置。这样, m2e 拥有依赖项的所有权。
  • 确保所有引用的项目都在Eclipse中打开并启用了Maven nature
  • 检查每个项目的Maven设置,确保 groupId artifactId version 与您在Eclipse中打开的项目匹配。因此,如果您所依赖的项目在Eclipse中具有版本 1.0.0-SNAPSHOT ,请确保依赖项目的POM文件引用版本 1.0.0-SNAPSHOT 依赖项部分。
  • 为每个项目启用工作区解析。右键单击该项目,然后 Maven>启用工作区解析
  • 最后,如果项目仍未解决,请再次右键单击该项目,然后 Maven>更新项目

这应该可以解决您的问题。如果在此之后仍然从文件系统引用了依赖项,请再次检查每个依赖项的 groupId artifactId ,尤其是 version

还要检查项目中是否有任何错误 - 尝试运行Maven安装。

答案 1 :(得分:7)

我会比这更进一步。 如果您在项目上运行mvn eclipse:eclipse,那么您可能遇到了麻烦。我有一个情况,我的eclipse项目中有一个“引用的库”部分和一个“ Maven Dependencies ”部分,库版本冲突,导致eclipse和我自己不可避免混乱。

我发现最安全的事情是从命令行运行mvn eclipse:clean然后返回到eclipse,刷新项目,“确定”生成的问题对话框,然后转到 Maven>更新项目。这为我排序了所有。

答案 2 :(得分:5)

当eclipse与导入和删除多个项目混乱时,您可能需要重建maven存储库的索引。这是我做过的一种方式。

  1. 检查引用的项目是否被eclipse正确识别为maven项目。

    在菜单栏中,点击Window -> Show View -> Other...
    当'显示视图'弹出窗口,选择Maven -> Maven Repositories
    在Maven Repositories窗口中,您应该在Local Repositories -> Workspace Projects中将项目视为jar文件 如果您在Workspace Projects找不到自己的项目,请右键点击Workspace Projects并选择Rebuild Index

  2. 更新引用项目的maven

    右键点击引用项目Maven -> Update Project... -> OK

答案 3 :(得分:0)

您还需要确保正在运行正确的目标。

如果您没有运行安装目标,那么它就不会被复制到您的存储库并且无法编译。

要了解有关目标的更多信息,请查看https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

答案 4 :(得分:0)

对@nwinkler的响应表示敬意,主要问题是匹配版本号。

一种常见的情况是,如果您要开发一组彼此版本锁定的项目-例如,一个项目和一组库项目之间的耦合不是很松散,那么库API可能会更改了相关应用程序项目版本要使用的版本,但可能以与该应用程序项目的过去或将来版本不兼容的方式进行了更改。

在这样的配置中设置Maven依赖关系的正确方法(也是推荐的做法)是让应用使用特定版本的库-例如,如果您重建应用的旧版本,它将使用以前编译时使用的库版本。

将应用程序项目的POM库依赖项设置为发行版(让我们说1.0.0),并在下一版本中将应用程序和库项目都设置为SNAPSHOT版本(让说{{1 }}),m2e将无法正确解析库版本,并且可能会下载旧版本,因此尝试使用诸如“ Open Decleration”之类的Eclipse功能将以下载jar(有时甚至没有源附件)为目标。真烦人。

解决该问题的一种方法是将应用程序POM依赖项版本设置为一个范围,因此,您不必依赖2.0.0-SNAPSHOT,而是依赖1.0.0。使用这样的开放范围,m2e会很高兴找到您的工作区库项目。但是您需要在提交,构建和发布之前将其设置回“正确”的版本-这很容易出错。

我的解决方案是使用构建配置文件并为m2e设置自定义配置文件,如下所示:

  • 使用属性将依赖项版本设置为要针对其发布的版本:
[1.0.0-)
  • 然后添加一个配置文件部分,其默认情况下为活动的配置文件,什么都不做,以及一个特定于Eclipse的配置文件,该配置文件使用范围覆盖库版本属性:
...

<properties>
<my.library.version>1.0.0</my.library.version>
</properties>

<dependencies>
  <dependency>
    <groupId>my.group</groupId>
    <artifactId>my.library</artifactId>
    <version>${my.library.version}</version>
  </dependency>
</dependencies>

...
  • 最后转到项目属性,然后在“ Maven”下将“ eclipse”键入“ Active Maven Profiles”:

enter image description here

  • 然后“应用并关闭”。

然后,Eclipse m2e将始终看到版本范围,并将解析来自eclipse项目的依赖关系(即使您在本地Maven存储库中安装了库,因为Eclipse项目的版本号会更高),但是其他构建器将查看原始的严格版本号。