Maven默认周期与插件

运行 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

时间: 2024-10-04 13:18:52

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

Maven生命周期(插件)

maven拥有三套相互独立的生命周期,它们分别是clean,default和site.clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site 生命周期的目的是建立项目站点. 命令行与生命周期:从命令行执行maven任务的最主要方式就是调用maven的生命周期阶段. mvn clean:该命令调用clean生命周期的clean阶段.实际执行的阶段为clean生命周期的pre-clean和clean阶段. maven的生命周期与插件相互绑定,用以完成实际的构件任务.具

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

Maven生命周期和插件 Maven另外的两个核心概念就是生命周期和插件,Maven的生命周期都是抽象的,其实实际行为都是由插件来完成的,生命周期和插件两者协同工作 1.生命周期 Maven的生命周期就是为了对所有的构建过程进行抽象和统一,这个生命周期包含了项目的清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成等几乎所有构建步骤,Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务都是交给插件来完成的 一次构建(build):ini

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

除了坐标.依赖以及仓库之外,Maven的另外两个核心概念是生命周期和插件.在有关Maven的日常使用中,命令行的输入往往就对应了生命周期,如mvn package就表示执行默认生命周期阶段package.Maven的生命周期是抽象的,其实际行为都由插件来完成,如package阶段的任务可能就会由maven-jar-plugin完成.生命周期和插件两者协同工作,密不可分. 1.Maven生命周期 我们在开发项目的时候,我们不断地在经历编译.测试.打包.部署等过程,maven的生命周期就是对所有这些

Maven实战读书笔记(四):Maven生命周期与插件

Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成的,生命周期和插件两者协同合作,密不可分. 这种思想与设计模式中的模板方法非常相似.模板方法模式在父类定义算法的整体结构,子类通过实现或者重写父类的方法来控制实际行为,这样既能保证算法有足够的可扩展性,又能严格控制算法的整体结构. 4.1 生命周期 Maven拥有3套独立的生命周期:clean.de

Maven生命周期和插件

生命周期:构建过程的一系列阶段 Maven有三套生命周期: 1.clean.clean生命周期包括例如以下阶段 1.1.pre-clean 1.2.clean 1.3.post-clean 2.default,default生命周期包括例如以下阶段 2.1.validate 2.2.intialize 2.3.generate-sources 2.4.process-sources 2.5.generate-resources 2.6.process-resources 2.7.complie

Maven核心概念之仓库,生命周期与插件

宏观图 一.仓库 统一存储全部Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(还有一种特殊的远程仓库,为节省宽带和时间,在局域网内架设的一个私有的仓库server,用其代理全部的外部的远程仓库.内部项目也能部署到伺服上),其它公开的远程仓库(常见的由Java.net Maven库,Jboss Maven库). Maven依据坐标寻找构件的时候,它首先会查看本地仓库,假设本地仓库存在此构件,则直接使用:假

maven详解之生命周期与插件(一)

Maven是一个优秀的项目管理工具,它能够帮你管理编译.报告.文档等. Maven的生命周期: maven的生命周期是抽象的,它本身并不做任何的工作.实际的工作都交由"插件"来完成. maven的每个构建步骤都可以绑定一个或多个插件行为,而且maven为大多数的构建步骤编写并绑定了默认插件. 三套生命周期: clean.default.site clean: 主要目的是清理项目 pre-clean: 执行一些清理前需要完成的工作 clean: 清理上一次构建生成的文件 post-cle

Maven学习笔记(六):生命周期与插件

何为生命周期: Maven的生命周期就是为了对所有的构建过程进行抽象和统一.Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完善的.易扩展的生命周期.这个生命周期包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤.也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上. Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在Maven的设计中,实际的任务(如编译源代码)都交由插件来完成.这种思想与设计模式中的模板方法(

maven的仓库、生命周期与插件

一.仓库 统一存储所有Maven项目共享的构建的位置就是仓库. 仓库分为本地仓库和远程仓库.远程仓库又分为中央仓库(中央仓库是Maven核心自带的远程仓库),伺服(另一种特殊的远程仓库,为节省宽带和时间,在局域网内架设的一个私有的仓库服务器,用其代理所有的外部的远程仓库,内部项目也能部署到伺服上),其他公开的远程仓库(常见的由Java.NET Maven库,Jboss Maven库). Maven根据坐标寻找构件的时候,它首先会查看本地仓库,如果本地仓库存在此构件,则直接使用:如果本地仓库不存在