Maven基于项目对象模型(POM),集项目构建,编译,测试,打包,安装一站式服务。是目前主流的项目开发的管理利器,今天来详细学习下。
一、Maven下载与环境搭建
Maven下载:http://maven.apache.org/download
下载压缩包,解压缩到D盘要目录即可
配置环境变量:
M2_HOME:D:\apache-maven-3.1.1\
Path添加:;%M2_HOME%\bin;
检测maven是否安装成功,打开cmd:mvn -v
如果能看到maven版本信息及jdk信息,就表示安装成功了。
二、Maven约定的目录骨架结构
src
-main
-java
-package
-test
-java
-package
-resources
三、常用的构建命令
mvn -v 查看版本信息
compile 编译 编译成功后,会生成target目录
test 测试 测试成功后,也会在target目录生成测试报告
package 打包 打包成功后,也会在target目录生成jar包
clean 清理target
install 安装jar包到本地仓库
以上构建命令需要运行在jdk上,jre上会报找不到tools.jar
四、自动创建目录骨架
在没有集成到eclipse中时,可以使用命令创建项目目录:
1.archetype:generate 按照提示一步一步创建即可
2.archetype:generate -DgroupId=组织名(一般为公司网址反写+项目名)
-DartifactId=项目名-模块名
-Dversion=版本号(SNAPSHOT为快照版,release为发布版本)
-Dpackage=代码所在的包名
五、坐标和仓库
坐标:每一个maven项目都由坐标来唯一定位,它有三个元素:
groupId
artifaceId
version
通过这三个元素就能准确找到一个maven项目
仓库:由maven管理的项目的所有jar包都在仓库中
仓库分为:
本地仓库
远程仓库(也叫中央仓库)
镜像仓库
我们使用的jar包会首先到本地仓库中去找,找不到会到远程仓库中下载到本地仓库。
1.本地仓库
一般我们安装完maven后,会在C盘的用户路径下:C:\Users\Yuwl\.m2有这个m2的文件夹,它就是我们的本地仓库,它下面有一个存放所有jar包的文件夹repository,还有一个settings.xml配置文件,它可以配置我们本地仓库的路径:
如,我的存放在D盘,因为C盘重装系统就没了
2.远程仓库
也叫中央仓库,它是maven的仓库,如果所用的jar包在本地仓库找不到,则去去远程仓库中下载,到本地仓库中再使用。
在maven的安装目录我的是D:\apache-maven-3.1.1\lib,下一个jar包:maven-model-builder-3.1.1.jar,以解压缩方式打开能看到有一个pom-4.0.0.xml文件,它里面有中央仓库的url:
central
Central Repository
http://repo.maven.apache.org/maven2
default
false
http://repo.maven.apache.org/maven2这就是maven的中央仓库
snapshots为false表示下载的为非快照版本,快照版一般为开发版本
3.镜像仓库
所谓镜像,提供其实为中央仓库一样的功能,只不过有时中央仓库访问不了,因为毕竟是国外的,而镜像仓库则是由国内很多厂商提供的,我们使用也很方便,具体用法如下:
修改m2下的settings.xml文件:
在mirrors节点下加入如下配置
maven.net.cn
central
central mirror in china
http://maven.oschina.net/content/groups/public/
mirrorOf表示要替换的中央仓库,用了这个配置,那么镜像仓库就会代替我们的中央仓库了。
六、在eclipse中安装maven插件,创建maven项目
一般现在较高版本的eclipse中都集成了maven插件,不需要单独安装了,没有的话,安装也很简单,这里就不多说了。
使用maven创建java项目:
new->maven project->选择maven-artifact-qickstart->输入groupId,artifactId,package
使用maven创建web项目:
new->maven project->选择maven-artifact-webapp->输入groupId,artifactId,package
我们可以看到maven为我们生成的项目目录结构开始讲的:
src
-main
-java
-package
-test
-java
-package
-resources
webapp项目如果没有生成这样的目录,可自行手动创建
还能看到项目根目录下的pom.xml,这就是maven用来构建项目的配置文件
七、pom.xml解析
4.0.0
com.yuwl.maven
maven-demo01
0.0.1-SNAPSHOT
jar
maven-demo01
http://maven.apache.org
UTF-8
junit
junit
3.8.1
test
如下junit的version3.8.1可以配置为:
UTF-8
3.8.1
使用就可以写成这样:
${junit.verison}
这样做,所有jar包的版本号可以统一管理,改起来也方便
八、Maven的生命周期和插件
生命周期一般包含:清理,编译,测试,打包,安装
即clean compile test package install
我们使用时可以clean到任何一个阶段,如
clean compile 包含test
clean package 包含test,compile
clean install 包含test,compile,package
Maven插件:
在pom.xml中由
org.apache.maven.plugins
maven-source-plugin
2.4
package
jar-no-fork
如上是一个生成源码打包的插件,Maven提供了很多丰富的插件,他的很多功能其实都是由插件来实现的。
maven自身的插件:http://maven.apache.org/plugins/index.html
还有很多第三方的插件,如jetty,tomcat等
九、依赖传递
即 B依赖A C依赖B,那么C依赖A
如果不想C依赖A,就依赖B,也可以做到,如下:
com.yuwl.maven
maven-demo02
0.0.1-SNAPSHOT
com.yuwl.maven
maven-demo01
本pom为demo03,依赖demo02,demo02依赖demo01
添加
十、依赖冲突
两个原则:
1.短路优先
A->B->C->X.jar
A->D->X.jar(优先使用)
2.先声明,先使用,按先后顺序来
十一、聚合和继承
1.聚合使用
4.0.0
com.yuwl.maven
maven-aggreation
0.0.1-SNAPSHOT
pom
maven-aggreation
http://maven.apache.org
UTF-8
../maven-demo01
../maven-demo02
../maven-demo03
junit
junit
3.8.1
test
注意使用聚合时,当前pom的packing必须为pom。
2.继承,类似java的继承,有父子关系
先建一个parent的pom
4.0.0
com.yuwl.maven
maven-parent
0.0.1-SNAPSHOT
pom
maven-parent
http://maven.apache.org
UTF-8
3.8.1
junit
junit
${junit.version}
test
在这个maven-parent中定义了junit依赖,但本项目不会用到这个依赖,在继承的子项目中会用到
4.0.0
maven-demo01
jar
maven-demo01
http://maven.apache.org
UTF-8
com.yuwl.maven
maven-parent
0.0.1-SNAPSHOT
junit
junit
使用
十二、Maven创建web项目,并通过插件发布到jeety,tomcat中
新建maven web项目maven-webdemo,pom.xml如下:
4.0.0
com.yuwl.maven
maven-webdemo
war
0.0.1-SNAPSHOT
maven-webdemo Maven Webapp
http://maven.apache.org
junit
junit
4.10
test
javax.servlet
javax.servlet-api
3.0.1
provided
maven-webdemo
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
package
run
使用jetty:run来运行,或绑定到package命令上来运行都可以。tomcat插件也可以运行。
总结
这里仅学习Maven最基本的用法,虽然很基础,但很重要,给日常开发项目带来很多便利,后续再进一步补充。