运行 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. MyBaits的各种基本查询方式

    <?xml version="1.0" encoding="gbk"?> <!DOCTYPE mapper PUBLIC "-//m ...

  2. Eclipse 下如何引用另一个项目的Java文件

    有关联的2个项目,有些类是相同的.例如实体类. 如果你采用 Ctrl + C & Ctrl + V 的方式,以后再有改动,2个项目就都需要改动. 怎样才能只改动一个呢? 答案就是,在一个项目( ...

  3. django中post方法和get方法的不同

    当我们提交表单仅仅需要获取数据时就可以用GET: 而当我们提交表单时需要更改服务器数据的状态,或者说发送e-mail,或者其他不仅仅是获取并显示数据的时候就使用POST. 在这个搜索书籍的例子里,我们 ...

  4. 标准类型内建函数 cmp()介绍

    内建函数cmp()用于比较两个对象obj1 和obj2, 如果obj1 小于obj2, 则返回一个负整数,如果obj1 大于obj2 则返回一个正整数, 如果obj1 等于obj2, 则返回0.它的行 ...

  5. 深入浅出:Linux设备驱动之字符设备驱

    一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流 ...

  6. dataTables表格分页排序等交互

    官网: https://www.datatables.net/ 中文参考网站: http://datatables.club/ datatables+bootstrap示例: http://sandb ...

  7. SPOJ 1739 Yet Another Equation(Pell方程)

    题目链接:http://www.spoj.com/problems/EQU2/ 题意:给出方程x^2-n*y^2=1的最小整数解. 思路:参见金斌大牛的论文<欧几里得算法的应用>. imp ...

  8. 漫游Kafka设计篇之数据持久化

    Kafka大量依赖文件系统去存储和缓存消息.对于硬盘有个传统的观念是硬盘总是很慢,这使很多人怀疑基于文件系统的架构能否提供优异的性能.实际上硬盘的快慢完全取决于使用它的方式.设计良好的硬盘架构可以和内 ...

  9. UploadifyAPI-上传插件属性和方法介绍

    上一篇文章简单的介绍了Uploadify上传插件的使用.但是对于常用的属性和方法并没有说明.授人以鱼不如授人以渔,我决定将常用的属性列举出来,供大伙参考参考.           Uploadify属 ...

  10. asp.net(C#)清除全部Session与单个Session

    Session.Abandon();//清除全部SessionSession["UserName"] = null;Session.Remove("UserName&qu ...