学习心得
一. Maven介绍
1 .Maven学习总结是在Eclipse环境使用总结出来的,也是在eclipse中进行应用。maven在如何安装到eclipse不在描述。maven的配置文件,只列举几个重要的配置项:Repository(仓库)配置。Maven的仓库主要有两种:
i. LocalRepository(本地仓库)例如:存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}\.m2\repository目录(可以在配置文件中配置本地路径如下图所示)
ii. Remote Repository(远程仓库),由三种仓库组成:中央仓库、私服、其他的公共的。
(1)公司用到的私服仓库地址配置如下图所示:
私服是一种特殊的远程Maven仓库,它是架设在局域网内的仓库服务,私服一般被配置为互联网远程仓库的镜像,供局域网内的Maven用户使用。
当Maven需要下载构件的时候,先向私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,同时缓存在私服之上,然后为Maven下载请求提供下载服务,另外,对于自定义或第三方的jar可以从本地上传到私服,供局域网内其他maven用户使用。
公司的私服仓库是作为maven的cental中心仓库一个镜像文件,换句话说如果maven的远程仓库存储的内容,都可以通过在公司的私服仓库中获得。镜像可以创建多个,这样做的优点,可以减缓maven中心仓库的压力。
(2) 如果镜像仓库需要认证,在配置setting.xml中的<server></server>即可:
二 结合contact项目论述maven的具体应用。
1. 每个maven项目都会有一个pom.xml的文件,pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他所有的项目相关因素。
2. maven工程的文件结构.这是eclipse创建maven工程自定产生的文件。
Maven工程中src/main/java包放的是源码,src/test/java包放的是对源码的测试代码,target存储的是maven工程进行compile、package等产生文件。
3. contact项目中的模块contact-friend-api工程中pom.xml文件如下。
<groupId>...</groupId>是项目或者组织的唯一标志,并且配置时生成路径也是由此生成;<artifactId>...</artifactId>项目的通用名称;<version>...</version> 项目的版本;<packaging>...</packaging>打包机制,如果不写默认是jar包。groupId、artifactId、version可以确定唯一个项目,是maven的管理中一个坐标。<parent>标签是继承其他项目的pom.xml,也是标志继承其他的项目,当第一次加载项目的时候,就会根据pom.xml文件的配置去找依赖的项目,先去本地仓库中找,在本地仓库中被依赖的项目必须被打成包;如果本地仓库找不到就去私服仓库中查询,私服仓库根据pom.xml配置中的<groupId>、<artifactId>、<version>可以找到我们需要的包,如果找到,下载到本地,然后缓存到本地仓库中;如果依赖的项目是一些非开源项目,需要我们先将依赖的maven项目打包,然后上传到我们私服仓库中。
4.Maven的几个重要的生命周期
Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了。
· validate
· generate-sources
· process-sources
· generate-resources
· process-resources 复制并处理资源文件,至目标目录,准备打包。
· compile 编译项目的源代码。
· process-classes
· generate-test-sources
· process-test-sources
· generate-test-resources
· process-test-resources 复制并处理资源文件,至目标测试目录。
· test-compile 编译测试源代码。
· process-test-classes
· test使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
· prepare-package
· package 接受编译好的代码,打包成可发布的格式,如 JAR 。
· pre-integration-test
· integration-test
· post-integration-test
· verify
· install 将包安装至本地仓库,以让其它项目依赖。
· deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享
运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的。
下面以在eclipse下如何打包contact-friend-api项目打包为例(也可以用maven自带的命令对其打包)讲述:
点击maven build 进入maven运行设置界面,如下:
在Goals输入要执行的周期,例如package,也可以输入执行多个周期,中间用空格隔开。在设置执行设置maven周期时,会自动执行它前面的几个生命周期,如执行package时,会执行clean和compile。在User setting设置下面我们可以执行的模式,通常我们会将Skip Tests选中,因为如果不选中,在执行maven生命周期时就会对测试方法进行测试,测试失败,maven生命周期将无法正常运行。如下图:
我们其他项目要想依赖,需将打包后的maven包安装到本地仓库中,如果想要其它开发人员与项目共享,可以发布到远程仓库(多为公司自己设置的私服仓库),只需要执行deploy命令,就会根据maven中setting.xml文件中的远程仓库地址,将其上传到远程仓库上。如下图:
上传到远程仓库的文件目录如下图:
5 . maven的插件的使用
Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。在此以将源码打入jar中的插件为例将讲述插件的用法,
所有的插件都放在<plugins>标签内,<artifactid>和version指定用的那个插件,开源的插件在maven的中心仓库中可以找到,跟访问一般maven项目一样,都需要指定他们的坐标。<execution>标签中有一个<phase>他指定插件绑定了maven项目中的周期,也就是说maven项目执行到<phase>指定的周期,插件才开始运行。<goal>指定了插件所要执行jar周期,<configuration>是配置参数,<attach>为true意思是将项目中的源码打入jar包中,以供其他人在引用jar时可以看到源码,更清楚的了解实现过程。