什么是Maven
Maven
Maven: Apache组织的一款开源项目,目的是为了服务于基于Java
平台的项目构建、依赖管理和项目信息管理。
构建:编译、运行单元测试、生成文档、打包、部署等等这些工作。
作为构建工具:Maven可以自动完成构建的过程。
优点:
①避免重复构建的过程。
②标准化构建的流程。
不仅作为构建工具:Maven还是一个依赖管理和项目信息管理的工具。
体现:
①提供了中央仓库,帮助开发者自动下载构件(jar包)。Maven利用坐标定位构件(通过Nexus可以对Maven仓库进行快速搜索,定位坐标)。
②管理项目信息。如:项目名、开发者列表、版本控制系统地址、许可证、缺陷管理地址等。
还能轻松获取项目文档、测试报告、静态分析报告、源码版本日志报告等信息。
配置Maven
1.配置maven环境变量:
系统变量:MAVEN_HOME = C:\apache-maven-3.2.5
系统变量:path = %MAVEN_HOME%\bin
2.测试打开 cmd,在里面敲:mvn –version 弹出maven版本等信息说明成功
3.修改 maven 本地仓库存放位置
默认是放在本地用户的临时文件夹下面的 .m2 文件夹下的 repository 下
找到 maven目录下的 conf 下的 settings.xml 配置文件
更改本地仓库地址:我放在了E:\test下了
settings.xml说明
仓库: maven项目中依赖的jar包存放的地方.
4.配置代理服务器(可选)
如果公司使用HTTP代理服务器来阻止用户直接连接到互联网。这时需要配置代理服务器Maven才能下载依赖。
创建项目骨架
1.创建项目目录,进入项目目录后执行mvn archetype:generate
首次运行时,mvn会从远程"中央仓库"下载一些必需的文件到"本地仓库“
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 336: (这里根据每个人机器上安装的eclipse插件不同,可能默认的数字不是这个,先不管,直接回车)
…
5: 1.0 6: 1.1 Choose a number: 6: (直接回车)
…
Define value for property 'groupId': : cnblogs (可暂时先理解成类似package或namespace的名称,通常我们填写组织机构名称缩写) Define value for property 'artifactId': : maven-hello-world (组件名称,可暂时理解成项目名称) Define value for property 'version': 1.0-SNAPSHOT: : (版本号,直接回车,默认1.0-SNAPSHOT) Define value for property 'package': cnblogs: : (打包后的jar文件名)
Y: : (直接回车确认)
BUILD SUCCESS (看到这个,表示项目创建成功!)
groupId是帮助项目对象在仓库中定位的
artifactId决定了生成的项目文件夹目录的名称
version是项目版本号
package 是项目source文件下最顶层的包名
查看maven项目的目录结构
进入maven项目目录 执行:tree
maven项目采用“约定优于配置”的原则,src/main/java约定用于存放源代码,src/main/test用于存放单元测试代码,src/target用于存放编译、打包后的输出文件。这是全世界maven项目的通用约定
编译项目
mvn clean compile 这样就能对项目进行编译了,编译后会自动在target目录中生成class文件,如果编译成功,会输出类似下面的信息
单元测试
mvn clean test
会先执行compile,即先编译,再执行单元测试
项目打包
通常我们会把java项目打包成jar包或war包,maven中打包的命令为 “mvn clean package” 运行完后,会在target目录下生成jar包
注:从输出 可以发现,package前,会先执行compile,再执行test,最后才是package打包
eclipse创建项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplace搜索到插件Maven Integration for
等待安装Maven插件
创建Maven项目
选择创建项目类型
创建web项目选择下面这个
groupId是帮助项目对象在仓库中定位的
artifactId决定了生成的项目文件夹目录的名称
version是项目版本号
package 是项目source文件下最顶层的包名
右键项目配置版本
Maven项目导入
项目导入或创建成功后可以看到如上图所示
Maven如何管理Jar包
Maven通过pom.xml文件中坐标管理jar包
Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,它们是groupId,artifactId,version,packaging,class-sifer。下面是一组坐标定义
Maven下载jar包的过程
私库 : 有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机器,搭建nexus私服,然后开发人员连到这台私服上,这样的话就可以通过这台搭建了nexus私服的电脑访问maven的远程仓库。
Maven中会涉及到几种仓库
1.工作空间 ,在我们Maven项目中可以看到pom.xml文件,pom.xml就是maven的配置文件
2 .本地仓库,本地仓库用于存放jar包,其实Jar包并不是直接放入工作空间的,它是存放在本地仓库,然后在执行发布打包的时候,添加依赖路径
3 私库:私库是使用者自己搭建的maven仓库,用于缓解频繁从外网下载jar包资源的压力。而且使用私库作为缓存层,也相对安全一些。
4 共享仓库:书中所说的中央仓库或者一些常用的镜像网站都属于这种,国内比较著名的oschina以及163都是不错的maven仓库。
1 Maven在执行相关的任务时,会先去本地仓库查看是否有该资源,如果有的话,判断版本是否正确,如果一切都没问题则直接使用;否则,执行下一步
2 Maven会去配置的共享仓库中查找,如果找到就拷贝到本地仓库中;找不到则会给出相关的提示
3 Maven在本地如果搭建了私库,则会去私库中查找,找到就拷贝到本地仓库;找不到就会去共享仓库中查找,然后放入私库和本地库。有了私库,局域网内的开发者可以共享依赖,就不用每个人都去外网下载jar包,浪费带宽了。
Maven的生命周期与阶段
Maven中有三大生命周期,他们相互独立,分别是:
1 .clean 清理
2 .default 构建
3 .site 建站
一般来说,clean和default比较常用。
每个生命周期又有不同的阶段,阶段按顺序执行,并且可以指定执行结束的阶段。构建的时候,会依次从最上面的阶段执行到指定的那个阶段。
clean 生命周期
clean生命周期的目的是清理项目,它包含三个阶段:
1)pre-clean 执行一些清理前需要完成的工作。
2)clean 清理上一次构建生成的文件。
3)post-clean 执行一些清理后需要完成的工作。
当我们输入mvn clean的时候,执行的是pre-clean和clean两个阶段。
default 生命周期
default生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:
1) validate 验证项目是否正确和所有需要的相关资源是否可用
2) initialize 初始化构建
3) generate-sources
4) process-sources 处理源代码
5) generate-resources
6) process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
7) compile 编译项目的主源代码
8) process-classes
9) generate-test-sources
10) process-test-sources 处理项目测试资源文件
11)generate-test-resources
12) process-test-resources 处理测试的资源文件
13)test-compile 编译项目的测试代码
14)process-test-classes
15) test 使用单元测试框架运行测试,测试代码不会被打包或部署
16)prepare-package 做好打包的准备
17)package 接受编译好的代码,打包成可发布的格式
18) pre-integration-test
19) integration-test
20) post integration-test
21) verify
22) install 将包安装到Maven本地仓库,供本地其他Maven项目使用
23)deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用
site 生命周期
site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
1)pre-site 执行一些在生成项目站点之前需要完成的工作
2)site 生成项目站点文档
3)post-site 执行一些在生成项目站点之后需要完成的工作
4)site-deploy 将生成的项目站点发布到服务器上
当执行mvn install的时候,实际会执行validate-->initialize-->...-->verify-->install等二十几个阶段。
为了操作方便,不同的声明周期可以在一起执行,比如mvn clean install,会先执行clean的阶段,在执行install的阶段。
开发环境中,当我们Run as的时候,就可以执行maven clean进行清理,或者执行maven install进行构建,也可以执行maven build同时执行clean和install两个任务。