maven
Mac安装
- 下载
curl -O http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar -xvf apache-maven-3.3.9-bin.tar.gz
sudo mv -f apache-maven-3.3.9 /usr/local/
- 编辑 /etc/profile 文件 sudo vim /etc/profile,在文件末尾添加如下代码:
export MAVEN_HOME=/usr/local/apache-maven-3.3.9
export PATH=${PATH}:${MAVEN_HOME}/bin
- 保存文件,并运行如下命令使环境变量生效:
source /etc/profile
- 在控制台输入如下命令,一开始会出现报错
- 再次在控制台输入如下命令,如果能看到 Maven 相关版本信息,则说明 Maven 已经安装成功:
mvn -v
maven仓库
.m2文件
mvn help:system
ls -la /Users/cjw/.m2/
创建一个Intellij
项目
POM文件
xml
文件类型, 存放项目的配置信息,
maven生命周期
Maven 生命周期是为了对所有的构建过程进行抽象和统一,开发了一套高度完善的、易扩展的生命周期。这个生命周期包含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建步骤。
Maven 生命周期本身不做任何实际的工作,实际的任务都交给插件来完成。这样的设计,既保证了 Maven 整体框架的轻便,也最大程度的扩展性。
每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。以 clean
生命周期为例,它包含的阶段有 pre-clean
、clean
和 post-clean
:
- 当我们调用
pre-clean
的时候,只有pre-clean
阶段执行; - 当我们调用
clean
的时候,pre-clean
和clean
阶段会按顺序执行; - 当我们调用
post-clean
的时候,pre-clean
、clean
和post-clean
都会按顺序执行;
和生命周期阶段的前后依赖关系相比,clean
、default
和 site
这三套生命周期本身是相互独立的,我们可以仅仅调用 clean
生命周期的某个阶段,或者仅仅调用 default
生命周期的某个阶段,而不会对其它生命周期产生任何影响。
clean
清理项目
- Pre-clean 执行清理前需要完成的工作
- clean 清理上一次构建产生的文件
- Post-clean 执行一些清理后需要完成的工作
default
构建项目
- validate 验证工程是否正确
- compile 编译项目的源代码
- test 使用合适的单元测试框架来测试已编译的源代码
- package 把已编译的代码打包成可以发布的格式, 比如jar或者war
- verify 运行所有检查, 验证包是否有效
- Install 安装到maven本地仓库
- Deploy 部署到远程的仓库, 使得其他开发者或者工程可以共享
site
建立项目站点
阶段 | 作用 |
---|---|
pre-site | 在生成项目站点前执行一些工作 |
site | 生成项目站点文档 |
post-site | 在生成项目站点后执行一些工作 |
site-deploy | 将生成项目站点发布到服务器上 |
常见的maven命令
- mvn validate 验证项目是否正确
- mvn package maven打包(jar包)
- mvn compile 编译
- mvn test-compile 编译测试代码
- mvn test 运行测试
- mvn verify 运行检查
- mvn clean 清理项目
- mvn install 安装项目到本地仓库
- mvn deploy 发布项目到远程仓库
添加项目所需要的jar包
原理
在本地, 指定一个文件夹(maven本地仓库), maven会从远程的中央仓库下载你需要的jar资源到本地, 然后通过maven关联, 将jar包依赖到你的项目中, 避免了你需要将jar包拷贝到lib中, 并通过classpath引入这些jar包的工作
步骤
- 打开仓库网站(https://mvnrepository.com/)
- 选择你要的jar包的信息和版本
- 填写依赖信息到pom文件
- 下载到本地仓库
- 项目使用
mvn compile
单元测试
- 引入 依赖包
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
- 测试代码
package com.xclass;
import org.junit.Test;
public class AppTest
{
@Test
public void test(){
System.out.println("chenguoliang za gangruan");
}
}
- 编译并打包
mvn compile
mvn package
- 执行代码