运行 cmd
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
这个archetype(模板)是一个插件,generate是目标指令(goal)
插件就是集成了若干个goal的合集
Maven标准的项目结构:
src/main/java | 源代码 |
src/main/resources | 资源文件 |
src/main/filters | 资源过滤 |
src/main/config | 配置文件 |
src/main/scripts | 脚本 |
src/main/webapp | Web程序源代码 |
src/test/java | 测试的源代码 |
src/test/resources | 测试的资源 |
src/test/filters | 测试的资源过滤 |
src/it | 集成测试(主要用于插件) |
src/assembly | Assembly descriptors |
src/site | 自动生成的网站 |
生成后在根目录会有个pom.xml,然后是src和target文件夹:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.mycompany.app</groupId> 包名 <artifactId>my-app</artifactId> 项目名,也用于生成的jar包名 <packaging>jar</packaging> 默认为jar,后面详述 <version>1.0-SNAPSHOT</version> 版本 <name>my-app</name> 用于文档 <url>http://maven.apache.org</url> 用于文档 <dependencies> <dependency> 一个外部依赖 <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>
构建:
mvn package
这个package是自带命令,是default构建周期的一个步骤
比如运行compile,会自动按以下顺序执行:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
可以测试一下:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
关于构建周期:有三个是内置的,default(默认), clean(清理target文件夹) , site(生成站点文档)
每个周期都是由不同步骤组成,比如default就包括了:
- validate - 校验
- compile -编译
- test - 单元测试
- package - 打包成jar或war等
- integration-test - 集成测试
- verify - 校验
- install -部署到本地代码库,供其他项目本地调用
- deploy - 部署到远程代码库,供他人或项目远程调用
下面的步骤总是会从顶部开始,按顺序执行
同一个命令可以同时执行多个步骤,如
mvn clean install 会先clean,再install
一个插件的goal代表一个特定的任务,
而某个步骤实际上是调用某个插件的goal,具体哪个goal跟项目本身有关
所以,也可以在命令行直接执行插件goal,如:
mvn dependency:copy-dependencies
mvn archetype:generate
一个周期步骤可以关联多个插件goal
1.默认关联:通过指明pom.xml的packaging,默认为jar
步骤 | 插件goal |
process-resources | resources:resources |
compile | compiler:compile(插件可以有多个goal) |
process-test-resources | resources:testResources |
test-compile | compiler:testCompile(插件可以有多个goal) |
test | surefire:test |
package | jar:jar |
install | install:install |
deploy | deploy:deploy |
2.手动关联:通过pom.xml的plugins
插件的goal本身都有个默认关联的步骤,但goal也可能关联到多个步骤,可以具体指定一个
<build> <plugins> <plugin> <groupId>com.mycompany.example</groupId> <artifactId>display-maven-plugin</artifactId> <version>1.0</version> <executions>插件配置 <execution> <phase>process-test-resources</phase>具体步骤 <goals> <goal>time</goal>具体goal </goals> </execution> </executions> </plugin>
</plugins> </build>
这个goal将附加到那个步骤的goal的后面执行,也可以自己指定顺序
更详细的三个周期步骤,及相关goal对应表:
Clean Lifecycle
pre-clean |
| |
clean | 构建的所有东西都被移除 | clean:clean |
post-clean |
|
Default Lifecycle
validate |
| |
initialize | 初始化,比如设环境变量,建文件夹 | |
generate-sources |
| |
process-sources |
| |
generate-resources |
| |
process-resources |
| resources:resources |
compile | 编译 | compiler:compile |
process-classes | 编译后处理 | plugin:descriptor |
generate-test-sources |
| |
process-test-sources |
| resources:testResources |
generate-test-resources |
| |
process-test-resources |
| |
test-compile | 测试的编译 | compiler:testCompile |
process-test-classes |
| |
test |
| surefire:test |
prepare-package |
| |
package |
| jar:jar and plugin:addPluginArtifactMetadata |
pre-integration-test |
| |
integration-test |
| |
post-integration-test |
| |
verify |
| |
install |
| install:install |
deploy |
| deploy:deploy |
Site Lifecycle
pre-site |
| |
site | 生成网站文档 | site:site |
post-site |
| |
site-deploy |
| site:deploy |
具体可以查看maven-core-3.2.5.jar\META-INF\plexus中的三个xml