运行 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
Maven默认周期与插件的更多相关文章
-
maven生命周期和插件
maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...
-
[maven] 生命周期和插件
maven生命周期和插件 生命周期 maven的生命周期有三套,互相独立.每个生命周期含有不同阶段,常用如下 clean 清理项目 pre-clean 执行清理前需要完成的工作 clean 清理上一次 ...
-
05 Maven 生命周期和插件
Maven 生命周期和插件 除了坐标.依赖以及仓库之外, Maven 另外两个核心概念是生命周期和插件.在有关 Maven 的日常使用中,命令行的输入往往就对应了生命周期,如 mvn package ...
-
maven生命周期与插件
目录 Maven生命周期 clean default site 命令与对应周期 插件与绑定 插件目标 插件绑定 内置绑定 自定义绑定 插件配置 本文主要是针对<maven实战>书中关键知识 ...
-
MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
-
Maven系列学习(三)Maven生命周期和插件
Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期 ...
-
(十二)Maven生命周期和插件
除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段packag ...
-
Maven生命周期和插件机制
Maven中的一个非常重要的概念是生命周期和插件,这篇文章重点介绍下Maven的生命周期. Maven的生命周期是抽象的,具体的功能是有具体的插件来完成的,Maven有相当多的功能插件,以至于Mave ...
-
Maven生命周期(插件)
maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站 ...
随机推荐
-
Android Studio导入项目问题小结
1. import project 之后一直停留在 building 界面 解决方案: 1.随便找一个你能运行的as项目 2.打开gradle-wrapper.properties,文件目录:项目/g ...
-
C#-WebForm-WebForm开发基础
1.C/S 客户端应用程序 WinForm WPF 平级 数据是存放在其他的电脑上或服务器上 需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据的加工是在用户的电脑上执行的,会对用户的 ...
-
struts2--表单重复提交
1.表单重复提交: --使用struts2的Token或TokenSession拦截器避免重复提交: > 上述两个拦截器均不在默认的拦截器栈中,需要在struts.xml中配置: > To ...
-
提高Objective-C代码质量心机一:简化写法
提高OC代码质量的小心机 一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期 ...
-
selenium如何随机选取省份和城市的下拉框的值
1.原始需求,选择省份后,相应的城市会自动加载 2.思路 a.获取下拉框的所有元素个数 b.随机点击0-元素个数之间的某个值 3.代码实现 Random random = new Random(); ...
-
mysql 查看 删除 日志操作总结(包括单独和主从mysql)
我们可以在mysql的安装目录下看到mysql的二进制日志文件,如mysql-bin.000***等,很多人都不及时的处理,导致整个硬盘被塞满也是有可能的.这些是数据库的操作日志.它记录了我们平时使用 ...
-
用SQLData读写数据库自定义类型
如何读写自定义类型?SQLData是个很直观的解决办法 在oracle使用手册上找到了很好的资料 点击打开链接 http://docs.oracle.com/cd/B10501_01/java.920 ...
-
hadoop 学习入门 一 云计算之旅
一. 什么是云计算: 云计算是分布式计算.网格计算.并行计算.效用计算.网络存储.负载均衡.虚拟化.网络计算等传统计算技术的融合体. 二. 云计算的核心技术: 1 编程模型 2 海量数据分布存储技术 ...
-
MySQL中group_concat函数-和group by配合使用
MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...
-
quagga源码学习--BGP协议对等体连接tcp md5签名认证选项
bgp使用tcp连接,每个bgp实例自身是peer的一个tcp server端,同时也是peer的tcp client端. 1.在bgp_create之后都建立自己的socket服务端开始监听179端 ...