32

如何使用 Eclipse m2e引用另一个工作区项目?

我必须在项目设置中添加项目依赖项吗?但在这种情况下,依赖项不会显示在 pom.xml 中。

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

4

5 回答 5

59

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

  • 仅使用 POM 文件中的依赖项部分,不要摆弄 Eclipse 项目引用。右键单击项目,然后选择Maven > Update Project Configuration将项目重置为 Maven 默认设置。这样,m2e就拥有依赖项的所有权。
  • 确保所有引用的项目都在 Eclipse 中打开并启用了 Maven特性
  • 检查每个项目的 Maven 设置,确保groupIdartifactIdversion与您在 Eclipse 中打开的项目匹配。因此,如果您依赖的项目在 Eclipse 中具有1.0.0-SNAPSHOT版本,请确保依赖项目的 POM 文件在依赖项部分引用了1.0.0-SNAPSHOT版本。
  • 为每个项目启用工作区分辨率。右键单击项目,然后Maven > Enable Workspace Resolution
  • 最后,如果项目仍然没有解决,再次右键单击项目,然后Maven > 更新项目

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

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

于 2012-05-22T06:13:14.617 回答
8

我会走得更远。如果您曾经运行mvn eclipse:eclipse过您的项目,那么您可能遇到了麻烦。我的 Eclipse 项目中有一个“引用的库”部分和一个“ Maven 依赖项”部分,库版本相互冲突,导致 Eclipse 和我自己不可避免地感到困惑。

我发现最安全的方法是从命令行运行mvn eclipse:clean,然后返回 Eclipse,刷新项目,“确定”出现问题对话框,然后转到Maven > Update Project。这为我解决了一切。

于 2015-05-18T12:48:59.813 回答
6

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

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

    在菜单栏中,单击Window -> Show View -> Other...
    'Show View' 窗口弹出时,选择Maven -> Maven Repositories
    In Maven Repositories 窗口,您应该在 中看到您的项目为 jar 文件Local Repositories -> Workspace Projects
    如果在 中找不到您的项目Workspace Projects,请右键单击Workspace Projects并选择Rebuild Index

  2. 更新引用项目的 maven

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

于 2015-05-21T00:51:11.780 回答
1

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

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

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

于 2016-05-03T04:31:25.457 回答
1

感谢@nwinkler 的回应,主要问题是匹配版本号。

一个常见的场景是,如果您正在开发一组彼此版本锁定的项目 - 例如,一个项目和一组库项目的耦合不是很松散,这样库 API 可能会在一个相关应用项目版本使用的版本,但可能会以与应用项目的过去或未来版本不兼容的方式更改。

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

将应用程序项目的 POM 库依赖项设置为发布版本(可以说1.0.0),并且在将应用程序和库项目设置为 SNAPSHOT 版本(可以说2.0.0-SNAPSHOT)处理下一个版本时,m2e 将无法正确解析库版本,并且可能会下载旧版本,因此尝试使用诸如“Open Decleration”之类的 Eclipse 功能将针对下载 jar(有时甚至没有源附件),这可能会很烦人。

解决此问题的一种方法是将应用程序 POM 依赖项版本设置为一个范围,因此1.0.0您将依赖[1.0.0-). 有了这样的开放范围,m2e 会很高兴地找到您的工作区库项目。但是您希望在提交、构建和发布之前将其设置回“正确”版本——这很容易出错。

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

  • 使用属性将依赖项版本设置为要发布的版本:
...

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

...
  • 然后添加一个配置文件部分,其中包含一个默认情况下不执行任何操作的活动配置文件,以及一个使用范围覆盖库版本属性的 Eclipse 特定配置文件:
...

<profiles>
    <profile>
        <id>default</id>
        <activation><activeByDefault></activeByDefault></activation>
    </profile>
    
    <profile>
        <id>eclipse</id>
        <properties>
            <my.library.version>[1,)</my.library.version>
        </properties>
    </profile>
</profiles>

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

在此处输入图像描述

  • 然后“应用并关闭”。

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

于 2019-07-07T09:28:49.390 回答