运行 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,会自动按以下顺序执行:
  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
 
 
关于构建周期:有三个是内置的,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

Maven默认周期与插件的更多相关文章

  1. maven生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  2. [maven] 生命周期和插件

    maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...

  3. 05 Maven 生命周期和插件

    Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...

  4. maven生命周期与插件

    目录 Maven生命周期 clean default site 命令与对应周期 插件与绑定 插件目标 插件绑定 内置绑定 自定义绑定 插件配置 本文主要是针对<maven实战>书中关键知识 ...

  5. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  6. Maven系列学习(三)Maven生命周期和插件

    Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...

  7. (十二)Maven生命周期和插件

    除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...

  8. Maven生命周期和插件机制

    Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...

  9. Maven生命周期(插件)

    maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...

随机推荐

  1. C# GUID的使用

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  2. 安装hma master出错 Error: Package: perl-Mail-Sender-0.8.13-2.el5.1.noarch

    You are using the EPEL 5 version of the repo instead of 6, go into your /etc/yum.repos.d/epel.repo f ...

  3. 16.allegro元件手动摆放[原创]

    一.手动摆放 --- -- 一个个摆放 二.全局设置 --- 这里都是全局的 显示信息 三.快速摆放所有元件 -- ---- 四.显示的内容很多,我们来设置下显示 -- 1 --- 2 --- 3 - ...

  4. SQLServer2008 行转列

    with a as( select *,row_number() over(partition by hyid order by jp desc) rowid from rtc) select a.h ...

  5. Oracle数据库之二

    SELECT查询 函数分为: 单行函数 -- 一条记录进入,一条记录输出 多行函数(分组函数)-- 多条记录进入,按组输出 单行函数: select id,first_name,nvl(commiss ...

  6. 使用jQuery插件PrintArea进行html页面打印

    在开发系统时,我们一般会有统计分析的功能需求,而现在大多数系统都是使用B/S的形式开发. 所以,html报表打印,并且打印指定内容,成了必要的功能. 开源地址:https://github.com/R ...

  7. Asp.net Web Api进行Nunit测试

    有两种方式 1.模拟Web请求. 2.直接本地调用Api接口 但是由于本地直接调用没有模拟请求环境,所以request为null public static HttpResponseMessage C ...

  8. Mybatis foreach

    批量删除: <delete id= "deleteBatchByXXX" parameterType= "list"> delete from 表名 ...

  9. Bundle对象的使用

    在Android开发中,如果要通过一个Activity启动另外一个Activity,需要调用startActivity()函数,这个函数的参数是一个Intent对象,这个对象通常的初始化方式如下: I ...

  10. python处理ajax请求

    先要起一个服务 server.py,可以支持python的cgi脚本. #!coding:utf8 from BaseHTTPServer import HTTPServer from CGIHTTP ...