我有一个Eclipse Maven项目,该项目依赖于工作区中的其他项目。我已经将它们全部定义为从本地存储库中导入的内容,并且pom.xml中的依赖项语句都显得一致,例如:
<dependency>
<groupId>com.mycompany.mygroup</groupId>
<artifactId>Project1</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>com.mycompany.mygroup</groupId>
<artifactId>Project2</artifactId>
<version>2.0.1</version>
</dependency>
但是,有些项目在我的构建路径中显示为二进制jar文件,带有以下图标:,而其他项目则带有我认为的“工作区项目”图标:
当我尝试加载JAR文件中包含的资源时,这成为一个问题:带有“ binary jar”图标的项目成功地从JAR内部加载资源;带有“工作区项目”图标的项目将尝试转到资源的文件系统。
确定项目在Maven依赖项列表中的显示方式的项目是什么?我已经检查了.project
文件中的“自然”标签,它们是相同的。
答案 0 :(得分:1)
此行为由选项Maven --> Disable/Enable Workspace Resolution
控制,该选项具有以下行为(source)
这会改变Maven定位依赖项的方式 文物。如果将项目配置为解决来自 工作空间中,这些工件无需出现在本地 资料库。假设项目-a和项目-b都在同一位置 Eclipse工作区,该项目-a取决于项目-b。如果 工作空间分辨率已禁用,m2eclipse Maven构建用于 仅当项目b中存在项目b时,项目a才会成功 本地存储库。如果启用了工作空间分辨率,则m2eclipse将 通过Eclipse工作区解决依赖关系。换句话说,当 工作空间分辨率已启用,无需安装项目 在本地存储库中彼此关联。
这意味着如果禁用Workspace Resolution
,则必须从maven存储库中读取所有依赖项,并将其显示为。
反之,如果启用了Workspace Resolution
并且您的工作空间包含一个 open 项目,该项目所有其工件信息(groupId
, artifactId
和version
)与<dependency>
中的定义相同,依赖项将直接引用此打开项目的源代码。图标将显示为
我认为这不是唯一的因素,因为其中一些 在我的工作区中也打开了带有“二进制jar”图标的依赖项。
我认为很可能是因为您在<version>
中使用的pom.xml
与工作区中该项目的声明的<version>
不同。