当前位置:首页 > Maven课程3
课程3 pom.xml编写(仓库配置、插件管理及依赖管理)
上节课我们已经讲了pom.xml的大部分配置元素。本节课内容:(8个配置) 1.Maven的仓库配置 2.Maven的插件管理 3.Maven的依赖管理
一、Maven的仓库配置
发布版本部署仓库配置:
快照版本部署仓库配置:
(1)发布版本和快照版本仓库配置(私服地址:http://10.108.4.118:8081/nexus/)
Maven除了能对项目进行编译、测试、打包之外,还能将项目生成的构件部署到仓库中。私服的一大作用是部署第三方构件,包括组织内部生成的构件以及一些无法从外部仓库直接获取的构件。将这些构件部署到仓库中,供其他团队成员使用。distributionManagement包含repository和snapshotRepository子元素,前者表示发布版本构件的仓库,后者表示快照版本的仓库。这两个元素下都需要配置id、name和url,id为该远程仓库的唯一标识,name是为了方便人阅读,关键的url表示该仓库的地址。可以为这两类仓库配置远程仓库认证,在settings.xml中配置(上节课内容)。 < distributionManagement> < repository>
< id> csot-releases id> < name> csot-releases name>
< url> http://10.108.4.118:8081/nexus/content/repositories/fts-releases/ url> repository>
< snapshotRepository>
< id> csot-snapshots id> < name> csot-snapshots name>
< url> http://10.108.4.118:8081/nexus/content/repositories/fts-snapshots/ url>
snapshotRepository> distributionManagement> (2)远程仓库配置
在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。任何一个仓库声明的id必须是唯一的,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。该配置中的url值指向了仓库的地址。一般来说,该地址都基于http协议,可以在浏览器中打开仓库地址浏览构件。
对于releases和snapshots元素,除了enabled,它们还包含另外两个子元素updatePolicy和checksumPolicy。元素updatePolicy用来配置Maven从远程仓库检查更新的频率,默认的值为daily,每天检查一次。其他可用的值包括:nerver---从不检查更新;always---每次构件都检查更新;interval:X---每隔X分钟检查一次更新(X为任意整数)。元素checksumPolicy用来配置Maven检查校验和文件的策略。当构件被部署到Maven仓库中时,会同时部署对应的校验和文件。在下载构件的时候,Maven会验证校验和文件。如果校验和验证失败,怎么办?当checksumPolicy的值为默认的warn时,Maven会在执行构建时输出警告信息,其他可用的值包括:fail----Maven遇到校验和错误就让构件失败;ignore---使Maven完全忽略校验和错误。
对于Maven来说,同样的版本和同样的坐标就意味着同样的构件。对于版本相同坐标相同的构件,Maven就不会再对照远程仓库进行更新,除非每次执行Maven命令之前,手动清除本地仓库。
< repositories> < repository>
< id> csot-releases id>
< url> http://10.108.4.118:8081/nexus/content/groups/public/ url>
< releases>
< enabled> true releases> < snapshots>
< enabled> false snapshots> repository> repositories>
二、Maven的插件管理
插件配置:
插件仓库配置:
(1)生命周期与插件的关系(第7章P113)
Maven核心的几个概念有:坐标、依赖、仓库、生命周期和插件。生命周期和插件是Maven插件管理的两个重要概念。生命周期第一节课的时候讲过,不记得的可以翻阅之前的课件。 在Maven的日常使用中,命令行输入的mvn命令往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package。Maven的生命周期是抽象出来的,为了对所有的构建过程进行抽象和统一。生命周期本身不做任何实际的工作,实际的任务(如编译源代码)都由插件来完成。如package阶段的任务可能就会有maven-jar-plugin完成。生命周期和插件两者协同工作,密不可分。
build定义了整个构建的过程,(依次初始化、编译、测试、打包、集成测试和部署)。 生命周期抽象了构建的各个步骤,定义了它们的次序,但没有提供具体实现。Maven设计了插件机制。Maven的生命周期与插件相互绑定,具体而言,是生命周期的阶段与插件的目标相互绑定,用以完成某个具体的构建任务。每个构建步骤都可以绑定一个或者多个插件行为(插件目标),而且Maven为大多数构建步骤编写并绑定了默认插件(这个叫内置绑定)。(在大多数时间里,用户几乎都不会觉察到插件的存在。当用户有特殊需要的时候,也可以配置插件定制构建行为(自定义绑定),甚至自己编写插件。)插件机制提供了足够的扩展空间,当用户有特殊需要的时候,用户可以通过配置现有插件或者自行编写插件来自定义构建行为(自定义绑定)。
(2)插件目标(7.3 P118)
插件以独立的构件形式存在。将众多功能聚集在一个插件里,每个功能就是一个插件目标,即每个目标对应了一个功能。例如maven-dependency-plugin插件(5.9.3 优化依赖 P90),它包含mvndependency:list,mvndependency:tree,mvndependency:analyze等插件目标。
(3)插件绑定
a.内置插件绑定:Maven核心为一些主要的生命周期阶段绑定了很多插件的目标,当用户通过命令行调用生命周期阶段的时候,对应的插件目标就会执行相应的任务。
b.自定义插件绑定:除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上。例如,创建项目的源码jar包,内置的插件绑定关系中并没有涉及这一任务,因此需要用户自行配置。maven-source-plugin可以帮助我们完成该任务,它的jar-no-fork目标能够将项目的主代码打包成jar文件,可以将其绑定到default生命周期的verify阶段上,在执行完集成测试后和安装构件之前创建源码jar包。
共分享92篇相关文档