Maven
1. pom.xml文件是maven系统的基础组件, POM(Project Object Model:工程对象模型)
2. maven会创建默认的工程结构:
假定 ${basedir}
表示工程目录:
配置项 | 默认值 |
---|---|
source code | ${basedir}/src/main/java |
resources | ${basedir}/src/main/resources |
Tests | ${basedir}/src/test |
Complied byte code | ${basedir}/target |
distributable JAR | ${basedir}/target/classes |
3. maven是一个基于Java的工具,它的版本与JDK版本对应关系
- Maven 3.3 要求 JDK 1.7 或以上
- Maven 3.2 要求 JDK 1.6 或以上
4. maven中是通过坐标来定位和标识一个组件、工程或依赖项的。通过这个坐标就能在maven仓库中找到对应的组件。
- groupId, 相当于公司名称
- artifactId, 相当于项目名称
- version, 项目的版本
5. POM文件的基础形式如下
<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>
<groupId>com.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
6. 所有的POM都继承自一个父POM,这个父pom被称为Super POM,它包含了一些可以被继承的默认设置。
- Maven会使用effective pom来执行相关的目标,工程自身定义的pom内容,加上继承自super pom的内容一起形成了effective pom.
- 可以通过mvn help:effective-pom来查看effective pom.通过effective pom可以看到maven在执行目标时需要用到的默认工程源码目录结构、测试源码目录结构、输出目录、需要的插件、仓库以及报表目录
- 注意: Maven的pom.xml文件不需要手工编写,maven提供了大量的原型插件来创建工程,包括工程结构和pom.xml文件
7. 构建生命周期
- Maven有三个标准的构建生命周期
- clean
- pre-clean
- clean
- post-clean
- build
- validate
- …
- compile
- …
- test
- …
- package
- …
- install
- deploy
- site
- pre-site
- site
- post-site
- site-deploy
- clean
- 每个生命周期都是由一组有顺序的阶段组成(如上)
- 可以自定义目标(goal),并且将目标注入到阶段,如下:我们将 maven-antrun-plugin:run 目标添加到 Build 生命周期的一部分阶段中。这样我们可以显示生命周期的文本信息。
<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>
<groupId>com.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
现在打开命令控制台,跳转到 pom.xml 所在目录,并执行以下 mvn 命令。
C:\MVN\project>mvn compile
Maven 将会开始处理并显示直到编译阶段compile的构建生命周期的各个阶段。(Build周期中compile阶段及之前的阶段都会被执行,但是只有validate阶段和compile阶段中会执行maven-antrun-plugin:run 目标)
- Maven会给各个阶段默认提供一些目标