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子元素中声明插件的使用。