转载自:
https://blog.csdn.net/u010425776/article/details/52027706
什么是Maven?
如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。
以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。
而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。
安装Maven 和 Maven的Eclipse插件
http://blog.csdn.net/qjyong/article/details/9098213
Maven规定的目录结构
若要使用Maven,那么项目的目录结构必须符合Maven的规范,其目录结构如下:
Maven基本命令
-v:查询Maven版本
本命令用于检查maven是否安装成功。
Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。
compile:编译
将java源文件编译成class文件
test:测试项目
执行test目录下的测试用例
package:打包
将项目打成jar包
clean:删除target文件夹
install:安装
将当前项目放到Maven的本地仓库中。供其他项目使用
什么是Maven仓库?
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。
本地仓库
Maven本地的Jar包仓库。
中央仓库
Maven官方提供的远程仓库。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
什么是“坐标”?
在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
如下代码中,groupId和artifactId构成了一个Jar包的坐标。
1
2
3
4
5
groupId:所需Jar包的项目名
artifactId:所需Jar包的模块名
version:所需Jar包的版本号
传递依赖 与 排除依赖
传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和简洁引用的Jar包都下载到本地。
排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做如下配置:(将需要排除的Jar包的坐标写在中)
1
2
3
4
5
6
依赖冲突
若项目中多个Jar同时引用了相同的Jar时,会产生依赖冲突,但Maven采用了两种避免冲突的策略,因此在Maven中是不存在依赖冲突的。
短路优先
本项目——>A.jar——>B.jar——>X.jar
本项目——>C.jar——>X.jar
1
2
若本项目引用了A.jar,A.jar又引用了B.jar,B.jar又引用了X.jar,并且C.jar也引用了X.jar。
在此时,Maven只会引用引用路径最短的Jar。
声明优先
若引用路径长度相同时,在pom.xml中谁先被声明,就使用谁。
聚合
什么是聚合?
将多个项目同时运行就称为聚合。
如何实现聚合?
只需在pom中作如下配置即可实现聚合:
../模块1
../模块2
../模块3
1
2
3
4
5
继承
什么是继承?
在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。
如何实现继承?
父pom配置:将需要继承的Jar包的坐标放入标签即可。
1
2
3
4
5
6
7
8
9
子pom配置:
1
2
3
4
5
使用Maven构建Web项目
New Maven项目:选择WebApp:
若使用JSP,需添加Servlet依赖:
注:Servlet依赖只在编译和测试时使用!
1
2
3
4
5
6
7
在Bulid Path中设置resource输出目录:
勾选:Dynamic Web Module
删掉测试目录
在pom中加入jetty的插件,并设置JDK版本:
org.apache.maven.plugins
maven-compiler-plugin
1.8
org.eclipse.jetty
jetty-maven-plugin
9.3.10.v20160621
package
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
运行项目:
输入:jetty:run
访问127.0.0.1:8080
若出现如下界面,表示成功!
pom.xml详解
pom.xml是Maven的核心,你的项目需要什么Jar包就在pom.xml里面配置。当编译项目时Maven读取该文件,并从仓库中下载相应的Jar包。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)
scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk
......
......
......
......
......
......
......
......
......
......
scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web