maven2详细教程 联系客服

发布时间 : 星期一 文章maven2详细教程更新完毕开始阅读792b19c36137ee06eff9182c

这个团队协作场景在通过 Internet 建立和维护的开源项目中十分常见,由于内部开发大受开源或外包世界的冲击和影响,这种场景在合作开发的圈子里日益盛行。

解析项目依赖项

Maven 2 依赖项管理引擎帮助解析构建过程中的项目依赖项。

Maven 本地存储库和远程存储库

Maven 2 本地存储库是磁盘上的一个目录,通常位于

HomeDirectory/.m2/repository。这个库扮演着高性能本地缓存的角色,存储着在依赖项解析过程中下载的工件。远程存储库要通过网络访问。可以在 settings.xml 配置文件中维护一个远程存储库列表以备使用。

实践中,依赖项在 pom.xml 文件内的 元素中指定,并作为 POM 的一部分注入到 Maven 中。

项目依赖项存储在存储库服务器(在 Maven 术语中简单地称之为存储库 )上。要成功的解析依赖项,需要从包含该工件的存储库里找到所需的依赖性工件。

通过 settings.xml 配置 Maven

可以在一个 settings.xml 文件中指定影响 Maven 操作的配置属性。默认的设置文件是 MavenInstallationDirectory/conf/settings.xml。Maven 2 用户可通过维护 UserHomeDirectory/.m2/settings.xml 来覆盖一些配置属性。参见 Maven 设置参考,获取更多有关可配置设置的信息。

基于 POM 中的项目依赖项信息,该依赖项解析器试图以下列方式解析依赖项: 1. 检查本地存储库中的依赖项。

2. 检查远程存储库列表中的依赖项。 3. 如果前两步失败,则报告一个错误。

默认情况下,第二步中所涉及的第一个远程存储库是一个能在全球访问的集中式 Maven 2 存储库,它包含了最流行的开源项目的一些工件。在内部开发中,可以设置额外的远程存储库来包含从内部开发模块中发布的工件。可以使用 settings.xml 中的 元素来配置这些额外的远程存储库。 确保单个的工件

将 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 坐标

com.ibm.devworks OpsImp 1.0-SNAPSHOT

特别限定词 SNAPSHOT 告诉 Maven 2:该项目或模块还处于开发状态中,它应该获取最新版的可用工件。

要将该项目指定为依赖于 JUnit 进行单元测试,可以将 JUnit 3.8.1 的坐标作为一个依赖项添加到该项目的 pom.xml 文件中,如清单 2 所示:

清单 2. JUnit 依赖项的 Maven 坐标

junit

junit 3.8.1 深入 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 工件