如何使用 Eclipse m2e引用另一个工作区项目?
我必须在项目设置中添加项目依赖项吗?但在这种情况下,依赖项不会显示在 pom.xml 中。
如果我在 pom 中设置它们,它不会引用工作区中的项目,而是引用本地存储库中的 jar。好烦,有大神帮忙吗?
执行此操作的正确方法如下:
这应该可以解决您的问题。如果在此之后,您的依赖项仍然从文件系统中引用,请再次检查groupId、artifactId,尤其是每个依赖项的版本。
还要检查您的项目中是否没有任何错误 - 尝试运行 Maven 安装。
我会走得更远。如果您曾经运行mvn eclipse:eclipse
过您的项目,那么您可能遇到了麻烦。我的 Eclipse 项目中有一个“引用的库”部分和一个“ Maven 依赖项”部分,库版本相互冲突,导致 Eclipse 和我自己不可避免地感到困惑。
我发现最安全的方法是从命令行运行mvn eclipse:clean
,然后返回 Eclipse,刷新项目,“确定”出现问题对话框,然后转到Maven > Update Project。这为我解决了一切。
当 eclipse 搞砸了导入和删除多个项目时,您可能需要重建 maven 存储库的索引。这是我做过的一种方式。
检查引用的项目是否被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
。
更新引用项目的 maven
右键单击引用项目,Maven -> Update Project... -> OK
您还需要确保您正在运行正确的目标。
如果您不运行安装目标,那么它将不会被复制到您的存储库并且不会编译。
要了解有关目标的更多信息,请查看https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
感谢@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>
...
...
<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>
...
然后 Eclipse m2e 将始终看到版本范围,并将解析来自 eclipse 项目的依赖项(即使您在本地 Maven 存储库中安装了该库,因为 Eclipse 项目将具有更高的版本号),但其他构建器将看到原始,严格,版本号。