Maven默认周期与插件

时间:2022-09-09 07:58:42

运行 cmd

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
 Maven默认周期与插件
这个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
Maven默认周期与插件
这个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
Maven默认周期与插件
 
关于构建周期:有三个是内置的,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. &lbrack;maven&rsqb; 生命周期和插件

    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系列学习&lpar;三&rpar;Maven生命周期和插件

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

  7. &lpar;十二&rpar;Maven生命周期和插件

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

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

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

  9. Maven生命周期(插件)

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

随机推荐

  1. Android Studio导入项目问题小结

    1. import project 之后一直停留在 building 界面 解决方案: 1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/g ...

  2. C&num;-WebForm-WebForm开发基础

    1.C/S 客户端应用程序 WinForm WPF 平级 数据是存放在其他的电脑上或服务器上 需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据的加工是在用户的电脑上执行的,会对用户的 ...

  3. struts2--表单重复提交

    1.表单重复提交: --使用struts2的Token或TokenSession拦截器避免重复提交: > 上述两个拦截器均不在默认的拦截器栈中,需要在struts.xml中配置: > To ...

  4. 提高Objective-C代码质量心机一&colon;简化写法

    提高OC代码质量的小心机 一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期 ...

  5. selenium如何随机选取省份和城市的下拉框的值

    1.原始需求,选择省份后,相应的城市会自动加载 2.思路 a.获取下拉框的所有元素个数 b.随机点击0-元素个数之间的某个值 3.代码实现 Random random = new Random(); ...

  6. mysql 查看 删除 日志操作总结&lpar;包括单独和主从mysql&rpar;

    我们可以在mysql的安装目录下看到mysql的二进制日志文件,如mysql-bin.000***等,很多人都不及时的处理,导致整个硬盘被塞满也是有可能的.这些是数据库的操作日志.它记录了我们平时使用 ...

  7. 用SQLData读写数据库自定义类型

    如何读写自定义类型?SQLData是个很直观的解决办法 在oracle使用手册上找到了很好的资料 点击打开链接 http://docs.oracle.com/cd/B10501_01/java.920 ...

  8. hadoop 学习入门 一 云计算之旅

    一. 什么是云计算: 云计算是分布式计算.网格计算.并行计算.效用计算.网络存储.负载均衡.虚拟化.网络计算等传统计算技术的融合体. 二. 云计算的核心技术: 1 编程模型 2 海量数据分布存储技术 ...

  9. MySQL中group&lowbar;concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  10. quagga源码学习--BGP协议对等体连接tcp md5签名认证选项

    bgp使用tcp连接,每个bgp实例自身是peer的一个tcp server端,同时也是peer的tcp client端. 1.在bgp_create之后都建立自己的socket服务端开始监听179端 ...