Maven课程3
- 格式:docx
- 大小:550.26 KB
- 文档页数:11
课程3 pom.xml编写(仓库配置、插件管理及依赖管理)上节课我们已经讲了pom.xml的大部分配置元素。
本节课内容:(8个配置)1.Maven的仓库配置2.Maven的插件管理3.Maven的依赖管理一、Maven的仓库配置发布版本部署仓库配置:<distributionManagement><repository>快照版本部署仓库配置:<distributionManagement><snapshotRepository>远程仓库配置:<repositories><repository>(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/reposit ories/fts-releases/</ url></ repository>< snapshotRepository>< id>csot-snapshots</ id>< name>csot-snapshots</ name>< url>http://10.108.4.118:8081/nexus/content/reposit ories/fts-snapshots/</ url></ snapshotRepository></ distributionManagement>(2)远程仓库配置<repositories><repository>在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。
任何一个仓库声明的id必须是唯一的,尤其需要注意的是,Maven自带的中央仓库使用的id为central,如果其他的仓库声明也使用该id,就会覆盖中央仓库的配置。
该配置中的url值指向了仓库的地址。
一般来说,该地址都基于http协议,可以在浏览器中打开仓库地址浏览构件。
<repository>元素的子元素releases(发布版本)和snapshots(快照版本)元素比较重要,他们用来控制Maven对于发布版构件和快照版构件的下载。
releases和snapshots元素的子元素<enabled>的值为true表示开启下载支持,false表示关闭下载支持。
对于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 </enabled></ releases>< snapshots>< enabled>false </enabled></ snapshots></ repository></ repositories>二、Maven的插件管理插件配置:<build><plugins><plugin>插件管理配置:<build<pluginManagement>插件仓库配置:<pluginRepositories><pluginRepository>(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)插件绑定<build><plugins><plugin>a.内置插件绑定:Maven核心为一些主要的生命周期阶段绑定了很多插件的目标,当用户通过命令行调用生命周期阶段的时候,对应的插件目标就会执行相应的任务。
b.自定义插件绑定:除了内置绑定以外,用户还能够自己选择将某个插件目标绑定到生命周期的某个阶段上。
例如,创建项目的源码jar包,内置的插件绑定关系中并没有涉及这一任务,因此需要用户自行配置。
maven-source-plugin可以帮助我们完成该任务,它的jar-no-fork目标能够将项目的主代码打包成jar文件,可以将其绑定到default生命周期的verify阶段上,在执行完集成测试后和安装构件之前创建源码jar包。
请将以下代码拷入你新创建maven项目的pom.xml中,看看执行效果:(操作) <build><finalName> helloworld</finalName ><plugins>< plugin>< groupId>org.apache.maven.plugins </groupId>< artifactId>maven-compiler- plugin</ artifactId>< version>3.1 </version>< configuration>< source>1.7 </source>< target>1.7 </target>< encoding>UTF-8 </encoding></ configuration></ plugin>< plugin>< groupId>org.apache.maven.plugins </groupId>< artifactId>maven-source- plugin</ artifactId>< version>2.1.1 </version>< executions>< execution>< id>attach-sources </id>< phase>verify </phase>< goal>jar-no-fork </goal></ goals></ execution></ executions></ plugin></plugins></build>在POM的build元素下的plugins子元素中声明插件的使用。