maven的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在maven的设计中,实际的任务(比如编译源代码)都交由插件去完成。这种设计思想与设计模式中的模板方法非常类似。
public abstract class AbstractBuild { public void build() { initialize(); compile(); test(); packagee(); integrationTest(); deploy(); } protected abstract void initialize(); protected abstract void compile(); protected abstract void test(); protected abstract void packagee(); protected abstract void integrationTest(); protected abstract void deploy(); }
在maven的生命周期中,每个步骤可以绑定一个或多个插件行为,而且maven为大多数构建步骤编写并绑定了默认插件。例如针对编译的插件有maven-compiler-plugin,针对测试有maven-surefire-plugin等。
>> 三套生命周期详解
初学者往往以为maven生命周期是一个整体,其实不然,maven拥有三套相互独立的生命周期,它们分别是clean、default和site。clean升级周期目的是清理项目,default生命周期的目的是构件项目,而site生命周期目的是建立项目站点。
每个生命周期包含一些阶段phase,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段。
三套生命周期是相互独立的,比如当用户调用default生命周期的compile阶段的时候,是不会执行clean的,知道我要说啥了吧。
>> clean生命周期:
* pre-clean:执行清理前需要完成的工作
* clean清理上一次构建生成的文件
* post-clean:执行一些清理后需要完成的工作
>> default生命周期:
* validate
* initialize
* generate-sources
* process-sources:处理项目主资源文件。一般来说是对/src/main/resources/目录的内容进行变量替换等工作后,复制到输出目录的主classpath中去
* generate-resources
* process-resources
* compile:编译项目主源码到输出目录中去
* process-classes
* generate-test-sources
* process-test-sources:处理项目测试资源文件。一般来说,是对/src/test/resources目录内容进行变量替换等工作后,复制到项目输出的测试classpath中
* generate-test-resources
* process-test-resources
* test-compile:编译项目的测试代码。一般来说是编译/src/test/java目录下的java文件到输出的测试classpath目录中
* process-test-classes
* test:使用单元测试框架进行测试,测试代码不会被打包后部署
* prepare-package
* package:接受编译好的代码,打包成可发布格式比如jar
* pre-integration-test
* integration-test
* post-integration-test
* verify
* install:将包安装到maven本地仓库中,供本地其他maven项目使用
* deploy:将最终的包复制到远程仓库,供其他开发人员和maven项目使用。
这里只是将重点的几个阶段解释了下,对于其他的可用查阅官方文档:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
>> site生命周期
site生命周期目的是建立和发布项目站点,maven能够基于pom所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
* pre-site:执行在生成项目站点之前需要完成的工作
* site:生成项目站点
* post-site:执行在生成项目站点之后需要完成的工作
* site-deploy:将生成的项目站点发布到服务器上
>> 命令行与生命周期
从命令行执行maven任务最主要的方式就是调用maven的生命周期阶段:
mvn clean:调用clean生命周期的clean阶段,实际是pre-clean和clean阶段
mvn test:执行default生命周期的test阶段,也就是从validate一直到test阶段
mvn clean install:执行clean生命周期到clean阶段,然后执行default生命周期到install阶段
mvn clean deploy site-deploy:不解释了。。。
>> 自定义绑定
除了还内置绑定外,用户还可以自己绑定某个插件目标到生命周期某个阶段上,比如创建项目的源码source的jar包:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <id>attache-sources</id> <phase>verify</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
插件的仓库配置:
<pluginRepositories> <pluginRepository> <id>central</id> <name>Maven Plugin Repository</name> <url>http://repo1.maven.org/maven2/</url> <layout>default</layout> <snapshots> <enabled>false</enabled> </snapshots> <releases> <updatePolicy>never</updatePolicy> </releases> </pluginRepository> </pluginRepositories>
本人博客已搬家,新地址为:http://yidao620c.github.io/
相关推荐
Maven3实战笔记04——Maven的生命周期和插件。
Maven更新问题 今天Maven在更新的时候发现一直更新不成功,总结下解决方法。 在apache-maven-3.5.2/conf/setting.xml中加入以下配置即可解决 alimaven aliyun maven ...
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
idea创建Maven项目时,报错显示Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources,并且Maven插件内看不到 mybatis-generator。如下图: 折腾了好久发现配置放错地方了,...
Maven使用tomcat8-maven-plugin插件
第7章:生命周期和插件/7.4 插件绑定/7.4.2 自定义生命周期和插件的绑定 第7章:生命周期和插件/7.5 插件配置/7.5.1 命令行插件参数设置 第7章:生命周期和插件/7.5 插件配置/7.5.2 POM文件中进行插件参数设置 第7章...
NULL 博文链接:https://576017120.iteye.com/blog/1468915
XJar-Maven-Plugin是对的一个Maven插件封装,实现可通过Maven命令或绑定在Maven的生命周期之中执行,从而更加便捷的方式集成了 。 GitHub: : 什么是XJar XJar是基于对JAR包内部资源的加密以及扩展ClassLoader来...
apt-maven-插件 apt-maven-plugin提供Java 6 APT功能的Maven集成。 支持的目标是 process - to process main sources test-process - to process test sources 这是配置示例 <groupId>com.mysema.maven</groupId...
Maven Enforcer插件-Maven:trade_mark:的爱铁拳 Enforcer插件提供了控制某些环境约束的目标,例如Maven版本,JDK版本和OS系列以及更多内置规则和用户创建的规则。 文献资料 可以在上找到更多信息。 与Maven ...
ImpSort Maven插件在以下位置查看此插件的文档: : 整理您的展示次数! 一个Maven插件,用于对Java源文件中的import语句进行排序。 该插件将用于其自己的版本。 它的公共API是目标和配置选项的名称。
使用eclipse整合maven时所需要使用的配置文件;只需修改文件中的本地仓库路径即可完成整合,java初学者必选。
angular-maven-插件一个旨在帮助部署 angularjs 应用程序但使用 maven 作为构建工具的开发人员的插件。 到目前为止有两个目标: 模仿 grunt-html2js 将 html 模板组合成单个 javascript 文件以与 Angular.js 一起...
rserve-maven-插件用于 Rserve 生命周期的 Maven 插件支持 rserve:start rserve:stop 和 rserve:run mojos。 Start 将启动 Rserve 并以最少的输出退出到 maven 控制台,stop 将停止并退出,run 将阻止并将调试信息...
swagger-codegen-maven-plugin [![Maven版本] [maven-img]] [maven-url] 一个Maven插件来支持代码生成项目用法添加到您的build->plugins部分(默认阶段是generate-sources阶段) < plugin> < groupId>...
intellij-maven-plugin:IntelliJ的Maven插件
liquibase-maven-插件 Liquibase 的 Maven 插件。
如果您希望IDE保持相同的格式,则按照上的安装说明,google-java-format还包括IntelliJ和Eclipse IDE的集成。 用法 标准pom.xml 要在每个构建中自动格式化源,请添加到pom.xml中: < groupId>...
自定义Maven插件:根据配置的数据库信息,生成对应的Java实体类文件,并自动生成备注、长度、是否为空等的doc注释。也可以根据已有的实体类,在数据库生成对应的库表。