Maven 是一个项目管理工具,它是基于POM的(project object model)
概念
- POM (project object model), pom.xml 是构建的配置文件
- Goal 目标,代表一个特定的任务(在构建过程中被执行)。Goal可以与一个或多个Phase绑定(可以不绑定)。
- Phase 阶段,不同的阶段按照一定次序排列组成了一个Lifecycle。以下是我们经常遇到的Phase 列表,但不是一个完整的Phase列表。
- validate
- compile
- test
- package
- itergration-test
- verify
- install
- deploy
- clean
- site
- Plugin 插件,插件提供了多个Goal。Maven为我们提供了丰富的插件(插件列表)。这些插件提供了许多Goal并部分绑定到不同的Phase上,从而组成了功能丰富的Lifecycle。
- Lifecycle 生命周期,每个Lifecycle由不同的Phase列表构成。Maven提供了三个内置的生命周期
- clean 清理项目
- pre-clean
- clean
- post-clean
- site 生成项目站点文档
- pre-site
- site
- post-site
- site-deploy
- default 项目部署、构建
- validate
- initialize
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
- process-classes
- generate-test-sources
- process-test-sources
- test-compile
- process-test-compile
- test
- prepare-package
- package
- pre-integration-test
- integration-test
- post-integration-test
- verify
- intall
- deploy
- clean 清理项目
Phase、Goal 组成关系:
插件列表(部分):
一级:插件
二级:插件提供的Goal
三级:Goal默认绑定的Phase
- clean
- clean:clean
- compiler
- compiler:compile
- compile
- compiler:testCompile
- test-compile
- compiler:compile
- deploy
- deploy:deploy
- deploy
- deploy:deploy-file
- deploy:deploy
- failsafe
- failsafe:integration-test
- integration-test
- failsafe:verify
- verify
- failsafe:integration-test
- install
- install:install
- install
- install:install-file
- install:help
- install:install
- resources
- resources:resources
- process-resources
- resources:testResources
- process-test-resources
- resources:copy-resources
- resources:resources
- site
- site:site
- test
- site:deploy
- site:run
- site:stage
- site:stage-deploy
- site:attach-descriptor
- package
- site:jar
- package
- site:effective-site
- site:site
- surefire
- surefire:test
- test
- surefire:test
- verifier
- verifier:verify
- integration-test
- verifier:verify
- ear
- ear:ear
- package
- ear:generate-application-xml
- generate-resources
- ear:ear
- ejb
- ejb:ejb
- package
- ejb:ejb
- jar
- jar:jar
- package
- jar:test-jar
- package
- jar:jar
- rar
- rar:rar
- package
- rar:rar
- war
- war:war
- package
- war:exploded
- package
- war:inplace
- war:war
- source
- source:aggregate
- package
- source:jar
- package
- source:test-jar
- package
- source:jar-no-fork
- package
- source:test-jar-no-fork
- package
- source:aggregate
- dependency
- dependency:analyze
- dependency:analyze-dep-mgt
- dependency:analyze-only
- verify
- dependency:analyze-report
- dependency:analyze-duplicate
- dependency:build-classpath
- generate-sources
- dependency:copy
- process-sources
- dependency:copy-dependencies
- process-sources
- dependency:display-ancestors
- validate
- dependency:get
- dependency:go-offline
- dependency:list
- dependency:list-repositories
- dependency:properties
- initialize
- dependency:purge-local-repos
- dependency:resolve
- generate-sources
- dependency:resolve-plugins
- generate-sources
- dependency:sources
- generate-sources
- dependency:tree
- dependency:unpack
- process-sources
- dependency:unpack-dependencies
- process-sources
CLI
cli 格式: mvn [options] [<goal(s)>] [<phase(s)>]
可以通过mvn -h 查询options
例:
mvn clean deploy site-deploy
pom.xml 的配置
maven 提供了一个默认的pom配置,如果我们自己的pom中没有提供相应的配置则采用默认的pom配置。默认配置详情
pom.xml 配置说明:
<project>
<modelVersion>4.0.0</modelVersion>
<name>Maven Default Project</name>
<version>${project.release.version}</version>
<!-- 指定父项目,pom的继承-->
<parent>...</parent>
<!-- 指定子模块,pom的聚合-->
<modules></modules>
<!-- 变量,可通过${property} 方式引用 -->
<properties>
<version>0.0.13</version>
<project.release.version>${version}-SNAPSHOT</project.release.version>
</properties>
<!-- 可通过 mvn -P <[profile id]> 指定用哪个profile-->
<profiles>
<profile>
<id>product</id>
<properties>
<project.release.version>${version}</project.release.version>
</properties>
<dependencies></dependencies>
<build></build>
...
</profile>
</profiles>
<!-- 仓库配置,Maven 自带Id为central的仓库,如果该地方重复指定id为central的配置则覆盖默认central-->
<repositories>
<repository>
<id>central</id>
<name>Maven Repository Switchboard</name>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
<build>
<!-- 以下为默认配置 -->
<directory>${project.basedir}/target</directory>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<finalName>${project.artifactId}-${project.version}</finalName>
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
<!-- TODO: MNG-3731 maven-plugin-tools-api < 2.4.4 expect this to be relative... -->
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resources</directory>
</testResource>
</testResources>
<reporting>
<outputDirectory>${project.build.directory}/site</outputDirectory>
</reporting>
<!-- 结束-->
<!-- 声明插件,可在插件配置使用而无需指定插件版本号 -->
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<!-- 每个插件的configuration下的元素不同-->
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugins>
</build>
</project>