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

时间:2019-02-18 20:21:50

标签: java eclipse maven

我有一个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文件,带有以下图标:binary icon,而其他项目则带有我认为的“工作区项目”图标:project icon

当我尝试加载JAR文件中包含的资源时,这成为一个问题:带有“ binary jar”图标的项目成功地从JAR内部加载资源;带有“工作区项目”图标的项目将尝试转到资源的文件系统。

确定项目在Maven依赖项列表中的显示方式的项目是什么?我已经检查了.project文件中的“自然”标签,它们是相同的。

1 个答案:

答案 0 :(得分:1)

此行为由选项Maven --> Disable/Enable Workspace Resolution控制,该选项具有以下行为(source

  

这会改变Maven定位依赖项的方式   文物。如果将项目配置为解决来自   工作空间中,这些工件无需出现在本地   资料库。假设项目-a和项目-b都在同一位置   Eclipse工作区,该项目-a取决于项目-b。如果   工作空间分辨率已禁用,m2eclipse Maven构建用于   仅当项目b中存在项目b时,项目a才会成功   本地存储库。如果启用了工作空间分辨率,则m2eclipse将   通过Eclipse工作区解决依赖关系。换句话说,当   工作空间分辨率已启用,无需安装项目   在本地存储库中彼此关联。

这意味着如果禁用Workspace Resolution,则必须从maven存储库中读取所有依赖项,并将其显示为enter image description here

反之,如果启用了Workspace Resolution并且您的工作空间包含一个 open 项目,该项目所有其工件信息(groupIdartifactIdversion)与<dependency>中的定义相同,依赖项将直接引用此打开项目的源代码。图标将显示为enter image description here

  

我认为这不是唯一的因素,因为其中一些   在我的工作区中也打开了带有“二进制jar”图标的依赖项。

我认为很可能是因为您在<version>中使用的pom.xml与工作区中该项目的声明的<version>不同。