内容
隐藏
一、概述
Maven 是 Apache 软件基金会组织维护的一款专门为 Java 项目提供构建和依赖管理支持的工具。Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构件,报告和文档的软件项目管理工具。
1、构建
Maven是一个优秀的构建工具。 它能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,我们要做的是使用Maven配置好项目,然后输入简单的命令(如:mvn clean install),Maven会帮我们处理那些烦琐的任务。
Java 项目开发过程中,构建指的是使用原材料生产产品的过程。
-
原材料
- Java 源代码
- html
- 图片
- 配置文件
- 等等文件
-
产品
- 一个可以在服务器上运行的项目包
构建过程包含的主要的环节:
- 清理:删除上一次构建的结果,为下一次构建做好准备
- 编译:Java 源程序编译成 *.class 字节码文件
- 测试:运行提前准备好的测试程序
- 报告:针对刚才测试的结果生成一个全面的信息
- 打包
- Java工程:jar包
- Web工程:war包
- 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库
- 部署
- 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
- 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上
脱离IDE环境构建项目
2、依赖
Maven还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。
如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。例如:
- junit-4.12 依赖 hamcrest-core-1.3
- thymeleaf-3.0.12.RELEASE 依赖 ognl-3.1.26
- ognl-3.1.26 依赖 javassist-3.20.0-GA
- thymeleaf-3.0.12.RELEASE 依赖 attoparser-2.0.5.RELEASE
- thymeleaf-3.0.12.RELEASE 依赖 unbescape-1.1.6.RELEASE
- thymeleaf-3.0.12.RELEASE 依赖 slf4j-api-1.7.26
依赖管理中要解决的具体问题:
- jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
- jar 包之间的依赖:通过依赖的传递性自动完成
- jar 包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入
二、安装与配置
可以不安装,在IDE中使用自带(防止兼容性问题)的Maven
1、下载
http://maven.apache.org/download.cgi
2、安装
1)解压到指定目录
注意:
- Maven依赖于Java,因此必须保证已经安装JDK,并配置好环境变量
- 路径不要存在中文或空格
2)配置环境变量
可以不配置,在IDE中使用绝对路径指向Maven
- MAVEN_HOME或M2_HOME:指定Maven根目录
- Path:指定Maven相关的命令程序所在的bin目录
2.1)Linux或Mac
# 编辑用户目录下的.bash_profile文件
$ vim .bash_profile
########### Maven1.0 Evn ##################
# export MAVEN_HOME=/Users/circleus/apache-maven-3.5.4
# export MAVEN_HOME=/Users/circleus/aliyun-maven-3.6.0
# export PATH=$MAVEN_HOME/bin:$PATH
########### Maven2.0 Evn ##################
# export M2_HOME=/Users/circleus/aliyun-maven-3.6.0
# export M2_HOME=/Users/circleus/apache-maven-3.5.4
# export PATH=$PATH:$M2_HOME/bin
########### Maven3.0 Evn ##################
# export PATH=/Users/circleus/aliyun-maven-3.6.0/bin:$PATH
2.2)windows
- MAVEN_HOME:d:\java\apache-maven-3.6.3
- Path:%MAVEN_HOME%\bin
cmd命令行:mvn -v
测试
3)目录结构
- bin目录:包含mvn的运行脚本
- boot目录:包含一个类加载器的框架,maven使用它加载自己的类库
- conf目录:存放配置文件的目录(核心配置文件settings.xml文件)
- lib目录:包含maven运行时的依赖类库
3、配置
1)配置本地仓库
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>/Users/zing/java/local-repository</localRepository>
2)镜像仓库
可以不用配,直接使用魔法(科学上网)
<!--阿里云Maven镜像配置-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun.</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
4、常用命令
- mvn
- -v :查看maven版本
- compile:编译
- package:打包
- test:测试
- clean:清除target
- install:安装jar包到本地仓库中
三、创建Maven项目
1、手工创建
1)Maven项目目录结构
- 项目名称
- src:项目源码
- main:存放主程序
- java:存放Java源码
- 包名+类名
- resoures:存放资源文件
- webapp:web资源
- WEB-INF
- web.xml
- test:存放测试程序
- java:存放Java测试源码
- 包名+类名
- resoures:存放资源文件
- main:存放主程序
- target:此目录由maven生成
- pom.xml:Maven项目核心配置文件
- src:项目源码
2)pom.xml配置文件
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 项目坐标:GAV -->
<groupId>edu.nf</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
说明:
- 项目的GAV坐标
- groupId:包名(公司或组件域名倒序).项目名
- artifactId:项目名-模块名
- version:指定版本
- dependencies:依赖列表,指定本项目所依赖的第三方工具(构件/jar)
- archetype插件——自动创建符合maven规定的目录骨架
- 方法一:mvn archetype:generate
- 方法二:
- 第一次构建需要连接网络,从官网下载相关的插件
- 可以配置国内镜像解决
mvn archetype:generate -DgroupId=组织名(公司网址的反写+项目名)
-DartifactId=项目名-模块名(唯一的标识)
-Dversion=版本号
-Dpackage=代码所存在的包名
mvn archetype:generate -DgroupId=org.nf.sms -DartifactId=sms-entity -Dversion=1.0-SNAPSHOT -Dpackage=org.nf
GAV坐标
1、概念
- 在仓库中的包的唯一标识,就像人的身份证号码一样
- 唯一标识依赖的某个构件(jar,war)
2、组成
- groupId:项目名称,定义当前Maven项目隶属的实际项目
- 公司或组织域名倒序+项目名称,如:org.zing.shop
- artifactId:模块名称,定义实际项目中的一个模块
- 一个项目可以包含多个模块或工程,如:shop-user、shop-order、shop-product等
- version:版本号
- x.x.x-yyyy
3、语法
<groupId>公司或组件域名倒序.项目名</groupId>
<artifactId>项目名-模块名</artifactId>
<version>x.x.x-yyyy</version>
<!--
第一个x表示大版本号
第二个x表示分支版本号
第三个x表示小版本号
yyyy可以指定为:
snapshot:快照
alpha:内部测试
beta:公测
release:稳定
GA:正式发布
-->