Maven默认周期与插件

运行 cmd

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
 image 
这个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
image 
这个package是自带命令,是default构建周期的一个步骤
比如运行compile,会自动按以下顺序执行:
  1. validate
  2. generate-sources
  3. process-sources
  4. generate-resources
  5. process-resources
  6. compile
 
可以测试一下:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
image 
 
关于构建周期:有三个是内置的,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

posted @ 2015-01-02 02:43  gcg0036  阅读(1215)  评论(0编辑  收藏  举报