Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加载资源时,什么决定了Maven依赖项的行为?_Java_Eclipse_Maven - Fatal编程技术网

Java 加载资源时,什么决定了Maven依赖项的行为?

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

我有一个EclipseMaven项目,它依赖于我工作区中的其他项目。我已将它们全部定义为从本地存储库导入,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>

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”图标的依赖项也在我的工作区中打开。