Maven
主要用于Java
Apache下的一个项目自动构建工具
服务于Java平台的项目构建
安装
- 下载JDK和Maven
- 解压并配置环境变量
MAVEN_HOME
=.../apache-maven-x.x.x/
- 添加环境变量
%MAVEN_HOME%
,并在Path
中添加%MAVEN_HOME%/bin
项目
目录结构
a-maven-project
├── pom.xml
│
├── src
│ ├── main
│ │ ├── java //源码
│ │ └── resources //资源目录
│ └── test
│ ├── java //测试源码
│ └── resources //测试资源目录
│
└── target //输出目录
├── classes //编译输出目录
├── test-classes //测试编译输出目录
└── ...
POM
Project Object Model
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">
<!-- 模型版本,固定为4.0.0 -->
<modelVersion>4.0.0</modelVersion>
<!-- 项目组织唯一标识符 -->
<!-- 由此生成配置时生成的路径,如com.companyname.project-group -->
<!-- maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目唯一标识符 -->
<artifactId>project</artifactId>
<version>1.0</version>
</project>
概念
基本
Maven工程
:使用Maven进行管理的工程坐标
:由groupId
,artifactId
和version
组成的项目唯一标识
约定(默认配置)
Maven 提倡使用一个共同的标准目录结构
使用约定优于配置的原则
大家尽可能的遵守这样的目录结构
如下所示:
目录 | 目的 |
---|---|
${basedir} | 存放pom.xml和所有的子目录 |
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
${basedir}/src/test/java | 项目的测试类,比如说Junit代码 |
${basedir}/src/test/resources | 测试用的资源 |
${basedir}/src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
${basedir}/target | 打包输出目录 |
${basedir}/target/classes | 编译输出目录 |
${basedir}/target/test-classes | 测试编译输出目录 |
Test.java | Maven只会自动运行符合该命名规则的测试类 |
~/.m2/repository | Maven默认的本地仓库目录位置 |
插件
Maven只提供了最基本的依赖管理功能
所有的额外功能都是通过插件来实现的
生命周期
构建的不同阶段
Maven定义了项目构建跟发布时需要执行的所有步骤
并把它们抽象成不同的生命周期
每个生命周期包含多个阶段(Phase)
每个阶段会执行一组目标(Goal)
例如,编译和打包一个 Java 项目通常需要以下步骤:
- 清理目标文件
- 编译源代码
- 运行单元测试
- 打包成 JAR/WAR 文件
- 部署到服务器
Maven 用两个内置生命周期来描述这一过程:
-
clean - 清理生命周期
- pre-clean - 执行清理前需要完成的工作
- clean - 清理上次构建生成的文件
- post-clean - 执行清理后需要完成的工作
-
default - 构建生命周期
- validate - 验证项目是否正确,所有需要的资源是否可用
- compile - 编译项目的源代码
- test - 使用合适的单元测试框架来测试编译的源代码
- package - 把编译好的代码打包成可分发格式的文件,如 JAR/WAR
- verify - 对打包好的项目进行验证
- install - 把打包的项目复制到本地仓库,可用于本地和远程依赖
- deploy - 在构建环境中完成,把最终的工程包复制到远程仓库中与其他开发者和项目共享