理解 Maven 2 依赖项管理模型
在有效利用 Maven 2 之前,您需要理解 Maven 2 依赖项管理模型是如何运行的。
依赖项开发适应于这样的项目,其软件组件(称作模块 )是由不同的项目团队开发的。它支持持续独立开发,也支持对所有依赖模块进行精炼。
这个团队协作场景在通过 Internet 建立和维护的开源项目中十分常见,由于内部开发大受开源或外包世界的冲击和影响,这种场景在合作开发的圈子里日益盛行。
解析项目依赖项
Maven 2 依赖项管理引擎帮助解析构建过程中的项目依赖项。
实践中,依赖项在 pom.xml 文件内的 <dependencies>
元素中指定,并作为 POM 的一部分注入到 Maven 中。
项目依赖项存储在存储库服务器(在 Maven 术语中简单地称之为存储库 )上。要成功的解析依赖项,需要从包含该工件的存储库里找到所需的依赖性工件。
基于 POM 中的项目依赖项信息,该依赖项解析器试图以下列方式解析依赖项:
- 检查本地存储库中的依赖项。
- 检查远程存储库列表中的依赖项。
- 如果前两步失败,则报告一个错误。
默认情况下,第二步中所涉及的第一个远程存储库是一个能在全球访问的集中式 Maven 2 存储库,它包含了最流行的开源项目的一些工件。在内部开发中,可以设置额外的远程存储库来包含从内部开发模块中发布的工件。可以使用 settings.xml 中的 <repositories>
元素来配置这些额外的远程存储库。
回页首
确保单个的工件
将 Maven 2 用于项目构建时,依赖项解析通过一个集中的存储库确保只存在一个依赖性工件,而不考虑有多少项目或子项目引用该工件。这是多模块项目构建中一个重要的属性,因为包含多个工件会导致一些项目一致性和集成方面的问题。
存储库和坐标
Maven 2 存储库存储 Maven 在一个项目的依赖项解析中使用过的工件集。在本地磁盘上访问本地存储库,通过网络访问远程存储库。
工件通常被打包成包含二进制库或可执行库的 JAR 文件。这被认为是工件的一个类型。但在实践中,工件也可以是 WAR、EAR 或其他代码捆绑类型。
Maven 2 利用操作系统的目录结构对存储在存储库中的工件集进行快速索引。这个存储库索引系统依赖于这种能力来通过工件的坐标 惟一标识工件。
Maven 坐标
Maven 坐标是一组可以惟一标识工件的三元组值。坐标包含了下列三条信息:
-
组 ID:代表制造该工件的实体或组织。例如,
com.ibm.devworks
就是一个组 ID。
-
工件 ID:实际的工件的名称。例如,主体类名为
OpsImp
的项目也许会用 OpsImp
作为其工件 ID。
-
版本:该工件的版本号。支持的格式为
mmm.nnn.bbb-qqqqqqq-dd
,其中, mmm
是主版本号, nnn
是次版本号, bbb
代表其 bug 修复水平。 qqqqq
(限定词)或 dd
(构建号)也能添加到版本号中,这两项是可选项。
对 Maven 坐标的使用贯穿于 Maven 配置文件和 POM 文件中。例如,要在命名为 OpsImp
的模块上指定项目依赖项(在 1.0-SNAPSHOT 级别),pom.xml 文件应包含清单 1 所示的部分:
清单 1. OpsImp 样例模块的 Maven 坐标
<dependencies>
<dependency>
<groupId>com.ibm.devworks</groupId>
<artifactId>OpsImp</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
|
特别限定词 SNAPSHOT
告诉 Maven 2:该项目或模块还处于开发状态中,它应该获取最新版的可用工件。
要将该项目指定为依赖于 JUnit 进行单元测试,可以将 JUnit 3.8.1 的坐标作为一个依赖项添加到该项目的 pom.xml 文件中,如清单 2 所示:
清单 2. JUnit 依赖项的 Maven 坐标
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
|
回页首
深入 Maven 存储库
由于 Maven 存储库是普通的目录树,所以可以很容易地看到工件是如何存储到磁盘上的。图 3 是本地存储库的一部分,显示了 JUnit 3.8.1 工件的位置:
图 3. Maven 2 存储库内幕
从图 3 中可以看出,Maven 维护了一个工件的 POM 文件,同时也为该工件和其存储库中的 POM 维护了检验和散列。当工件在存储库间转移时,这些文件帮助确保工件的完整性。该工件已由 Maven 的依赖项管理引擎从中央存储库下载并放置到本地存储库中。
在图 4 中,坐标为 com.ibm.devworks/OpsImp/1.0-SNAPSHOT
的工件显示在本地存储库中。该工件和 POM 文件一起存放在存储库。在本例中,该工件在本地安装。
图 4. 本地存储库中的 OpsImp 工件
<!-- CMA ID: 187152 --><!-- Site ID: 10 --><!-- XSLT stylesheet used to transform this file: dw-document-html-6.0.xsl --><!-- TUTORIAL end: Choose the component that goes in the body --><!-- TUTORIAL start: page navigator -->
分享到:
相关推荐
在本篇讨论中,我们将深入探讨如何利用OpenOffice实现PDF文件的上传预览功能,同时也会提及到一个可能用到的工具——`PDF预览JAR`。 首先,要实现PDF预览,我们需要了解OpenOffice的Java API(JODConverter)。...
这个"Android源码——二维码识别源码.7z"文件很可能是包含了一个完整的Android项目,用于演示或实现二维码识别的源代码。以下是关于Android二维码识别的一些核心知识点: 1. **ZXing(Zebra Crossing)库**: - ...
总的来说,这个“安卓Android源码——实现竖屏二维码扫描.zip”提供了学习和参考的价值,可以帮助开发者快速掌握如何在安卓应用中集成和实现竖屏模式下的二维码扫描功能。通过研究ZXingDemo01项目,开发者不仅可以...
- **n^2 (Level 1):** 除了主流IDE外,还了解一些流行的工具及其替代方案,例如用于版本控制的Git、用于构建管理的Maven等。 - **n (Level 2):** 对各种开发工具和IDE都有较深的了解,能熟练运用多种工具提高开发...
Spring+Struts2+Hibernate+Easyui+Maven+Framemaker实现内容管理系统。现在可能项目比较老一些,不过还是希望能对需要的人有所帮助。 cms(内容管理系统),主要实现功能是后台能实时控制前台 适合学习/练手、毕业...
2. **表单模板**:用户可以编辑、维护、复制表单模板,更改模板类型,并预览效果。 3. **我的表单**:用户可以选择表单模板,设定表单规则,如是否允许上传图片、附件,启用富文本编辑器,以及是否挂靠流程。 4. **...
———————————————— java精品项目,毕业设计,计算机系,计算机毕业设计,程序设计,设计与实现,源码,web期末大作业。 作者:公众号:猿码仓库 预览:...
通过ZXingDemo,开发者可以学习如何在Android应用中集成条码扫描功能,理解ZXing库的工作原理,从而在自己的项目中灵活运用。这不仅有助于提高应用的功能性,也为用户提供了一种方便快捷的数据交换方式。
将自定义视图封装成独立的库模块,可以方便地在多个项目中复用,也可以发布到Maven仓库或JitPack,供其他开发者使用。 综上所述,`MyTextview4.rar`提供的源码是一个关于自定义TextView的例子,涵盖了Android开发...
- 在`build.gradle`文件中添加ZXing的依赖库,通常使用Gradle的Maven Central仓库。 - 引入对应的模块,例如`implementation 'com.google.zxing:core:3.4.1'`和`implementation '...
【JSP源码详解——永恒文章管理系统YHCMS v2.0】 JSP(JavaServer Pages)是一种基于Java技术的动态网页开发技术,它允许开发者将静态HTML与动态Java代码结合,以创建交互式Web应用。永恒文章管理系统YHCMS v2.0是...
本文将详细介绍一个基于Java实现的OFD到图片转换工具包——ofd2img.zip,以及其在实际操作中的应用。 首先,我们要理解OFD文件的结构。OFD是一种基于XML的复合文件格式,包含了文本、图像、表格、签章等多种元素。...
微信开发者工具则用于调试和预览微信小程序的前端效果。 总的来说,“出行先知”微信小程序项目是一个集成了Java后端、微信小程序前端以及MySQL数据库的综合性学习案例。通过这个项目,开发者不仅可以提升Java编程...
2. **文章模块**:用户可以创建、编辑、删除文章,支持Markdown语法,提供预览和发布功能。文章分类和标签管理则通过关联表实现。 3. **评论模块**:用户可以对文章进行评论,支持回复功能。评论数据的存储通常会...
首先,我们需要理解LiberOffice的核心组件——OpenDocument格式。OpenDocument是国际标准的开放文档格式,LiberOffice默认使用此格式保存文件,但同时也能读写Microsoft Office的DOCX和XLSX格式。这意味着...
在SSM中,Spring还作为连接器,整合其他两个框架——Struts和MyBatis。 Struts是MVC(模型-视图-控制器)架构的一部分,主要负责处理HTTP请求并控制应用程序的流程。通过定义Action类,开发者可以定义特定的业务...
JasperReport是iText的一个补充,它提供了一个图形化的设计工具——IReport,用于创建和编辑报表模板(.jrxml文件)。这些模板可以包含静态内容和动态数据,动态数据可以通过连接到数据库或其他数据源获取。IReport...
《Android端二维码识别技术——基于ZXing开源框架的实现》 在移动互联网时代,二维码作为信息传递的重要载体,被广泛应用于各个领域。Android平台上的二维码识别功能,为开发者提供了便捷的信息交互方式。本文将...
2. **软件/插件**:这里指的是开发工具或库,可能包括Java IDE(如Eclipse或IntelliJ IDEA)以及相关的构建工具(如Maven或Gradle),它们有助于管理和构建项目。对于微信小程序,可能还需要微信开发者工具,用于...