Java 加载资源时,什么决定了Maven依赖项的行为?
我有一个EclipseMaven项目,它依赖于我工作区中的其他项目。我已将它们全部定义为从本地存储库导入,pom.xml中的依赖项语句看起来都是一致的,例如:Java 加载资源时,什么决定了Maven依赖项的行为?,java,eclipse,maven,Java,Eclipse,Maven,我有一个EclipseMaven项目,它依赖于我工作区中的其他项目。我已将它们全部定义为从本地存储库导入,pom.xml中的依赖项语句看起来都是一致的,例如: <dependency> <groupId>com.mycompany.mygroup</groupId> <artifactId>Project1</artifactId> <version>1.0.2</version> </depe
<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>
com.mycompany.mygroup
,其他的则显示我认为是“工作区项目”图标:
当我尝试加载JAR文件中包含的资源时,这就成了一个问题:带有“binary JAR”图标的项目成功地从JAR中加载资源;带有“workspace project”图标的项目尝试转到文件系统以获取资源
项目的哪些方面决定了它们在Maven依赖项列表中的显示方式?我已检查了.project
文件中的“natures”标记,它们是相同的。此行为由选项Maven-->禁用/启用工作区分辨率
控制,该选项具有以下行为()
这会改变Maven定位依赖关系的方式
人工制品如果将项目配置为从
在工作区中,这些工件不需要出现在本地
存储库。假设项目a和项目b都在同一个位置
Eclipse工作区,而project-a依赖于project-b。如果
工作区解析已禁用,针对的m2eclipse Maven构建
项目a只有在项目b的工件存在于
本地存储库。如果启用了工作区解析,m2eclipse将
通过Eclipse工作区解决依赖关系。换句话说,什么时候
工作区解析已启用,不必安装项目
在本地存储库中相互关联
这意味着如果禁用了工作区解析
,则必须从maven存储库中读取所有依赖项,并显示为
另一方面,如果启用了工作区分辨率
,并且您的工作区包含一个打开的项目,该项目的所有工件信息(组ID
,工件ID
,版本
)与中定义的相同,依赖项将直接引用此开放项目的源代码。图标将显示为
我不认为这是唯一的因素,因为
带有“binary jar”图标的依赖项也在我的工作区中打开
我认为最有可能的原因是,您在pom.xml
中使用的
与在工作区中声明的该项目的
不同。我的观察结果是,如果有工作区项目
图标,您就可以在eclipse中打开该项目。尝试关闭项目,那么依赖项应该来自本地maven存储库。@wirnse:我认为这不是唯一的因素,因为一些带有“binary jar”图标的依赖项也在我的工作区中打开。