java - 加载资源时,什么决定了 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 文件,带有此图标:,而其他项目则带有我认为的“工作区项目”图标:。
当我尝试加载 JAR 文件中包含的资源时,这会成为一个问题:带有“二进制 jar”图标的项目从 JAR 中成功加载资源;带有“工作区项目”图标的项目尝试转到文件系统以获取资源。
是什么决定了它们在 Maven 依赖项列表中的显示方式?我检查了.project
文件中的“自然”标签,它们是相同的。
解决方案
此行为由Maven --> Disable/Enable Workspace Resolution
具有以下行为的选项控制(源)
这具有改变 Maven 定位依赖项工件的方式的效果。如果项目配置为从工作区解析依赖项,则这些工件不需要存在于本地存储库中。假设 project-a 和 project-b 都在同一个 Eclipse 工作区中,并且 project-a 依赖于 project-b。如果禁用工作区解析,则仅当本地存储库中存在 project-b 的工件时,项目-a 的 m2eclipse Maven 构建才会成功。如果启用了工作区解析,m2eclipse 将通过 Eclipse 工作区解析依赖关系。换句话说,当启用工作空间解析时,项目不必安装在本地存储库中以相互关联。
这意味着如果Workspace Resolution
禁用,则必须从 maven 存储库中读取所有依赖项,并将显示为.
另一方面,如果Workspace Resolution
启用并且您的工作区包含一个开放项目,其所有工件信息(groupId
, artifactId
, version
)与 中定义的相同<dependency>
,则该依赖项将直接引用此开放项目的源代码。图标将显示为
我不认为这可能是唯一的因素,因为一些带有“二进制 jar”图标的依赖项也在我的工作区中打开。
我认为很可能是因为<version>
您在 中使用的与工作区中该项目pom.xml
的声明不同。<version>
推荐阅读
- ios - 如何在从情节提要实例化的 UIButton 类中获取视图控制器的实例
- php - 将图像上传到 sql server 上的 varbinary 字段时,file_get_contents 值中的“附近语法不正确”
- java - 将新字段无缝添加到 JSON
- javascript - 为什么在asp.net核心中发送请求时axios响应骆驼情况
- javascript - 未打开 URL 的页面截图?
- ansible - 尝试将 IP 地址添加到 Ansible 列表的末尾
- c# - 如何在不知道初始目录的情况下连接到 SQL Server 实例?
- php - 如何在php中自动将实时流存储在服务器中
- sql - 如何在临时表中插入存储过程数据
- python - 带有单个系列的水平堆积条形图?