Maven简介
什么是Maven
Apache Maven是一个软件项目管理和构建工具,可以帮助我们创建和管理项目
基于项目对象模型POM(Project Object Model)的概率,帮助开发者构造一个项目的完整生命周期
注:POM是Maven对一个项目的描述,是Maven的核心,一个POM其实就是一个XML文件
为什么使用Maven
项目的管理工具
项目规则很大时一定会将项目进行拆分,将一个项目拆分成多个模块,每个模块对于一个工程,多个工程之间存储依赖关系
此时可以使用Maven的依赖管理机制,帮助我们在项目与项目之间建立依赖关系
Jar包管理的工具
-
通过仓库管理Jar
多个项目可能会用到相同的Jar包,每个项目都要导入Jar包,太繁琐了
此时就可以通过Maven,将Jar包放入Maven仓库中,在项目中引用仓库中的Jar包
-
解决Jar包的依赖
Jar包之间存在依赖关系,并且依赖层次很复杂,很难记住
此时可以使用Maven,帮助我们自动解决Jar包之间的依赖关系
-
自动下载jar包
项目中使用的jar数据很多,自己下载并手动添加jar包,很麻烦
此时可以使用Maven,帮助我们自动下载所以相关的jar包
自动化的构建工具
构建过程:编译主代码——>编译测试代码——>执行单元测试——>生成测试报告——>打包——>部署
术语
中央仓库
是一个网络仓库,存储jar包和maven插件
repo.maven.apache.org(地址)
本地仓库
从中央仓库下载的jar包的存放位置,也是一个仓库,只不过存放在本地电脑上
镜像仓库
对某一仓库做的镜像
http://maven.aliyun.com/nexus/content/groups/public/
私服
局域网内部搭建的maven服务器
单词了解
repository 仓库
archetype 原型,骨架(模板)
artifact 手工制品,成品(项目/jar/war)
安装Maven、配置Maven
下载安装包
maven3.2.5版本要求jdk1.6,其后的版本至少要求jdk1.7
解压缩
解压到无中文,无空格的文件下,不需要安装
配置环境变量
Maven依赖与JAVA_HOME
echo %JAVA_HOME% (查询JDK)
Maven环境变量:
-
MAVEN_HOME=Maven的安装目录 (或者M2_HOME=Maven的安装目录)
-
Path=原Path;%JAVA_HOME%\bin 或者直接复制Maven中bin文件的路径
环境测试
在Doc中执行: mvn -version
成功界面:
C:\Users\Administrator>mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: F:\Learning software\apache-maven-3.2.5\bin\..
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_121\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
配置本地仓库
本地仓库的默认位置
C:\Users\Administrator.m2\repository(这是我自己的)
~/.m2/repository (~波浪线代表主目录)
修改本地仓库的位置
编辑maven解压包里conf/setting.xml
然后在53行的注释之后,也就是55行添加
<localRepository>F:\xxxxx</localRepository>
然后保存
创建项目测试(可以放在配置镜像仓库后面进行,比较快)
测试:
在DOC命令中找到对应的存放文件输入:mvn archetype:generate 创建文件 (这步可以放在2.6配置镜像仓库之后,会比较快)
在doc中输入以下代码:
cd maven/maven-projects (根据自己的路径选择)
mvn archetype:generate #创建maven项目
提示:
- 选择创建项目时使用的模板archetype(1-10):按回车 (7是最简单java项目,web项目是10)
- 输入groupID,一般为组织域名反向+项目名:com.abidu.ljy
- 输入artifactID(模块ID):xxx
- 版本:可以自己修改也可以默认 回车
- 包名:默认和groupID一样
- 确认:直接回车
配置镜像仓库
编辑maven解压包里conf/setting.xml
在152行左右找到mirror标签 然后在注释外边(158左右)加入以下代码:
<mirror>
<id>alimaven</id>
<mirrorOf>*</mirrorOf> <!-- 这个*表示所有访问都是要该镜像仓库 -->
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置Maven的JDK版本
默认使用maven创建的项目使用的是jdk1.5
修改maven默认使用的jdk版本,编辑maven解压包里conf/setting.xml 在182行(前面没有加本地路径和镜像仓库,加了之后在190左右)左右在profiles标签后面加入代码:
<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项目
Java项目的创建
目录结构
Java工程约定的目录结构如下:
|-项目名称
|-src //程序代码
|-main //程序主代码
|-java //源代码
|-用于存放源代码,相当于传统项目的sec,如com.itany.usm.dao,UserDao
|-resources(资源) //配置文件
|- 用于存放配置文件
|-test //测试代码,目录结构与main中一样
|-java
|-resources
|-pom.xml //maven核心配置文件
基本操作
步骤:
- 创建Java项目
mvn archetype:generate
- 指定的信息如下:
archetype:(maven-archetype-quickstart) # 使用骨架创建java项目
groupID:com.xxx.xx. #指定组织域名反向+项目名
artifactId:sms #指定模块名称
Version:1.0.1 #版本
package:com.xxx.xx. #包名
-
执行Maven操作
cd xx //先切换到项目所在的目录 mvn compile mvn clean compile test package //可以同时执行多个命令
Web项目的创建
目录结构
Web项目的约定目录结构如下:
|-项目名称
|-src //程序代码
|-main //程序主代码
|-java //源代码
|-用于存放源代码(相当于传统项目的sec,如com.itany.usm.dao,UserDao)
|-resources(资源) //配置文件
|- 用于存放配置文件
|-webapp //网站根目录(相对于传统web项目的WebRoot)
|-WEB-INF
|-web.xml
|-test //测试代码,目录结构与main中一样
|-java
|-resources
|-pom.xml //maven核心配置文件
基本操作:
步骤:
- 创建Web项目
mvn archetype:generate
指定的信息如下:
archetype:(maven-archetype-webapp) #使用模板创建web项目
groupID:com.xxx.xx. #指定组织域名反向+项目名
artifactId:sms #指定模块名称
Version:1.0.1 #版本
package:com.xxx.xx. #包名
-
执行maven操作
mvn clean comile package(和上面java执行操作一样)
-
发布
方法1:使用外部的tomcat
方法2:使用maven的tomcat插件
mvn tomcat:run #DOC命令需要在根目录下运行
Mavne命令
常用命令
**(都要在目录下:mvn+xx) ** :可以一句执行多个命令,mvn xx xx (空格隔开)
命令 | 作用 | 描述 |
---|---|---|
archetype | 创建maven项目 | 根据模板生成项目骨架 |
clean | 清理 | 删除target目录 |
compile | 编译 | 将main中的源代码编译成字节码,放在target/classes目录下 |
test | 测试 | 执行测试类(使用Junit),并且生成测试报告 |
package | 打包 | 将java项目打包成jar文件,将web项目打包成war文件,放在target目录下 |
install | 安装 | 将项目的jar包安装到本地仓库中,供其他项目使用 |
deploy | 发布/安装 | 将项目的jar包安装到中央仓库中,供其他人使用,需要账户和密码(了解下就好了) |
site | 生成站点 | 生成一个关于项目介绍的网页 |
注意:
- 所有的命令都要跟在mvn的后面,如 mvn archetype
- 所以的命令都必须在某个项目的跟目录下执行
- 多个命令可以一起使用,但中间需要空格隔开
生命周期
一个项目的构建build的过程通常包括:清理、编译、测试、打包、集成测试、部署等
Maven定义了三套生命周期:clean、default、site
每个生命周期之间是相互独立的,每一个生命周期内都包含多个阶段,这些阶段是有顺序的,后序的阶段必须等待前面的阶段执行后才能执行
比如default生命周期包含:compile、test、package