maven教程
一:简介
1、什么是maven?
apache maven是一个软件项目和构建工具,可以帮助我们创建和管理项目
2、为什么要使用maven?
2.1、项目的管理工具
当项目的规模很大时需要进一步将项目进行拆分,将一个项目拆分成多个模块,模块与模块之间存在一种依赖关系,使用maven的依赖管理机制帮助我们在模块间建立这种依赖关系.
2.2、jar包的管理工具
- 通过仓库管理jar包
- 解决jar包的依赖
- 自动下载jar包
2.3、自动化构建工具
构建过程:编写代码—》编译(测试)代码---->生称测试报告—>打包------>部署
3、术语
3.1、中央仓库
是一个网络仓库,存储jar包或者maven插件
http://repo1.maven.org/maven2/
3.2、本地仓库
从中央仓库下载的jar包的存放位置,它也是一个仓库,这个仓库不在远程,在本地电脑上.
3.3、镜像仓库
对某一个仓库的镜像
阿里云提供的http://maven.aliyun.com/nexus/content/groups/public/
3.4、私服
在局域网内搭建的maven服务器
3.5、各个仓库之间的关系
![01](file:///D:/2019project/project3/myWeb/pic/01.jpg?stamp=0)
二:安装maven
1、下载安装包
apache-maven-3.2.5-bin.tar
2、解压缩
解压到无中文、无空格的路径上,不需要安装
3、配置环境变量
3.1、windows
- maven依赖于JAVA_HOME
echo %JAVA_HOME% --windows
echo $JAVA_HOME --LINUX
- maven环境变量
M2_HOME=Maven安装目录
PATH=原来的PATH;%M2_HOME%/bin
- 测试
在控制台输入命令:mvn -version
如果输出以下提示,表时maven创建成功
C:\Users\hellboy>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: D:\maven\apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK
3.2、linux/mac
- 编辑/home/soft01/.bashrc文件,在这个文件的最后添加两行代码
cd /home/soft01
tar zxf apache-maven-3.2.5-bin.tar.gz
vi .bashrc
在该文件的最后加上两句话
export M2_HOME=MAVENA安装目录
export PATH=$PATH:$M2_HOME/bin
- 使修改立即生效
source .bashrc
- 测试:mvn -version
如果输出以下提示,表时maven创建成功
C:\Users\hellboy>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: D:\maven\apache-maven-3.2.5
Java version: 1.8.0_171, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_171\jre
Default locale: zh_CN, platform encoding: GBK
4、配置本地仓库
4.1、本地仓库的默认位置
~\.m2\repository
4.2、修改本地仓库的位置
编辑conf/settings.xml
<localRepository>E:\maven\mvn_rep1</localRepository>
4.3、测试
cd maven/maven-proj
mvn archetype:generate #创建一个maven 项目
5、配置镜像仓库
编辑conf/settings.xml
<mirror>
<id>aliyun</id>
<mirrorOf>*</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
6、配置maven的jdk版本
默认使用maven创建的项目使用的jdk版本是1.5
修改conf/settings.xml
<profile>
<id>jdk‐1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
三:创建maven项目
1、java项目的创建
1.1、目录结构
java工程约定的目录结构:
|项目名称
|src //程序代码
|main //程序主代码目录
|java
//java源代码,相当于传统项目的src
|resources //配置文件
|//用于存放主代码中用到的配置文件
|test //测试代码主目录
|java
//测试源代码,其目录结构与main一致
|resources //配置文件
|//用于存放测试代码中用到的配置文件
|pom.xml //maven的核心配置文件
1.2、基本操作
1、创建java项目
最常见的maven骨架插件
maven-archetype-quickstart //用于创建java模块(默认)
maven-archetype-webapp //用于创建web模块
mvn archetype:generate //默认创建的是java模块
archetype:(maven-archetype-quickstart )//使用骨架创建java项目
groupid:com.zte.ums //指定组织域名的反向+项目名
artifactId:ums-dao //指定模块名
vetrsion:1.0.1 //版本
package:com.zte.ums //包名
2、创建web项目
2.1、目录结构
|项目名称
|src //程序代码
|main //程序主代码目录
|java
//java源代码,相当于传统项目的src
|resources //配置文件
|//用于存放主代码中用到的配置文件
|-webapp //网站根目录,相当于传统web项目的webRoot
|-WEB-INF
|-web.xml
|test //测试代码主目录
|java
//测试源代码,其目录结构与main一致
|resources //配置文件
|//用于存放测试代码中用到的配置文件
|pom.xml //maven的核心配置文件
2.2、基本操作
1.创建web项目
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
2.执行maven操作
mvn clean
mvn compile
四:MAVEN命令
1、常见命令
命令 | 作用 | 功能描述 |
---|---|---|
archetype | 创建maven项目 | 根据模板生成项目骨架 |
clean | 清理 | 删除target目录 |
compile | 编译 | 将main中的源代码编译成字节码,放到target/classes目录下 |
test | 测试 | 编译测试类到target/test-classess目录,执行并生成测试报告 |
package | 打包 | 将java模块打包成一个jar包,将web模块打包成war包 |
install | 安装 | 将项目的jar(war)包安装到本地仓库,供其它项目使用 |
deploy | 发布 | 将项目的jar包安装到中央仓库,供其它项目使用,需要账号、密码 |
site | 生成站点 | 生成关于项目介绍的网页 |
validate | 验证 | 验证工程是否正确,所需的信息是否完整 |
注意事项:
- 所有的命令都要跟在mvn的命令后面:如:mvn test
- 除了archetype命令外其它所有命令都对应模块的根目录下执行,和pom.xml平级的目录
- 多个命令可以同时执行,如:mvn clean test
2、生命周期
maven定义了三套生命周期:clean default site
每个生命周期之间是相互独立的,每个生命周期包含多个阶段,这些阶段又是有顺序的,后续的阶段需要等待前面的阶段执行完成后继续,
clean:clean
default:compile test packaage install
site:site
例如:清空后安装:mvn clean install
五:在IDEA中使用Maven
1、配置maven
注意:这两个配置在切换工作空间后,都需要重新指定,font,encoding,subversion也需要重新设置
- 自动更新项目:勾选import maven projects automatically
- 指定maven安装目录和配置文件
![03](file:///D:/2019project/project3/myWeb/pic/03.jpg)
![02](file:///D:/2019project/project3/myWeb/pic/02.jpg)
六:pom.xml
1、简介
pom:project object model 项目对象模型
pom.xml是maven的核心配置文件
一个maven模块有且仅有一个pom.xml文件,该文件必须在模块的根目录下
2、坐标
2.1、什么是坐标?
用来唯一的标志每一个标志,必须为项目定义坐标,坐标必须唯一
目的:为了让其它的maven项目使用该项目生成的jar包
2.2、坐标详解
maven坐标是通过一些元素来定义:groupid,artifactid,version
<!--
坐标:
groupId:组织id,表示模块所隶属的项目
artifactId:模块id
version:当前的版本
-->
<groupId>com.zte.maven</groupId>
<artifactId>maven01</artifactId>
<version>1.0-SNAPSHOT</version>
3、dependency
3.1、基本配置
如何查找一个jar包的坐标?
http://repo1.maven.org/maven2/
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
<!--pom.xml中配制的路径和本地仓库中真实路径的关系
本地仓库路径/groupId/artifactId/version/artifactId-version.jar
-->
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
3.2、scope作用域
表示依赖的作用域,用来配置依赖的jar包可以作用的范围
取值 | 含义 | 举例 |
---|---|---|
compile | 表示该依赖可以在整个模块中使用,参与打包部署,默认值 | commons-fileupload |
test | 该依赖只能在测试代码中使用,不参加打包部署 | junit |
provided | 表示该依赖在写代码时需要,不参与打包部署 | servlet |
runtime | 表示该依赖写代码时不需要,运行时需要,参与打包部署 | mysql驱动 |
system | 表示使用本地系统路径下的jar包,需要和systemPath配合使用 | oracle驱动 |
4、properties
全局属性,一般情况下用于定义全局的jar包版本号
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<junit.version>4.11</junit.version>
</properties>
5、plugins
配置插件
- tomcat maven插件(注意:模块必须为web模块)
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/maven02</path>
<port>8888</port>
</configuration>
</plugin>
七:maven中的关系
三大关系:继承 、聚合、依赖
1、继承
一个maven项目可以继承自另一个maven项目,分别称之为子项目,父项目
场景:多个子项目中使用到相同的依赖或者插件,此时可以把相同的配置抽取到父项目中,进行统一的管理,保持其一致性
- 将父项目的打包方式设置为pom
<!--
打包方式
jar:java项目的打包方式,默认方式
war:web项目的打包方式
pom:父项目的打包方式
-->
<packaging>pom</packaging>
- 在子项目child01,child02中引用父项目,指定父项目的坐标
<!--引用父项目,指定父项目的坐标-->
<parent>
<groupId>com.zte.maven</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--指定父项目的pom.xml文件的相对路径-->
<relativePath>../parent/pom.xml</relativePath>
</parent>
问题:有时并不是父项目的所有依赖需要被子项目继承,但是又希望通过父项目对依赖进行统一管理,如何进行版本控制?
解决方法:使用dependencyManagement
<dependencyManagement>
<dependencies>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</dependencyManagement>