学习Maven之Maven Clean Plugin

1.maven-clean-plugin是个什么鬼?
maven-clean-plugin这个插件用maven的人都不陌生.我们在执行命令mvn clean时调用的就是这个插件.
这个插件的主要作用就是清理构建目录下得全部内容,构建目录默认是target,但是有时候我们会配置project.build.directory, project.build.outputDirectory, project.build.testOutputDirectory, project.reporting.outputDirectory这四个目录,调用这个插件时同时也会清理这几个目录下得文件.
2.helloworld
一般不需要在pom.xml配置maven-clean-plugin.如果要手动配置,大体配置如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</build>
然后执行mvn clean或mvn clean:clean来调用这个插件清理项目.
qyfmac$ mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building learn-maven 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ learn-maven ---
[INFO] Deleting /Users/qyfmac/git/learn-maven/target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.437 s
[INFO] Finished at: 2015-12-22T17:25:23+08:00
[INFO] Final Memory: 5M/156M
[INFO] ------------------------------------------------------------------------
3.跳过执行
跳过执行有两种方式,都很简单,加个参数就行.
命令行中追加参数
mvn clean -Dmaven.clean.skip=true.pom.xml文件中配置参数
org.apache.maven.plugins
maven-clean-plugin
3.0.0
true
```
跳过清理,我是还没在项目中遇到需要这么做的地方,可能有些项目的构建目录只允许手动清理的需要跳过清理吧.
4.忽略错误
当执行mvn clean package这样的命令时,如果clean执行失败,会导致整个构建停止.为了让clean执行出错后还能继续执行其他命令,就需要配置让忽略错误.配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnError>false</failOnError>
</configuration>
</plugin>
5.清理构建目录外的文件
有些项目,构建时需要清理构建目录以外的文件,比如制定的日志文件.这时候就需要配置<filesets>来实现了.配置方式如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<!--<skip>true</skip>-->
<!--<failOnError>false</failOnError>-->
<!--当配置true时,只清理filesets里的文件,构建目录中得文件不被清理.默认是flase.-->
<excludeDefaultDirectories>false</excludeDefaultDirectories>
<filesets>
<fileset>
<!--要清理的目录位置-->
<directory>${basedir}/logs</directory>
<!--是否跟随符号链接 (symbolic links)-->
<followSymlinks>false</followSymlinks>
<!--默认有些文件是不会被清理的,比如.svn文件,如果设置成false,则全部按照自定义的来处理-->
<useDefaultExcludes>true</useDefaultExcludes>
<!--对这些文件进行清理-->
<includes>
<include>**/*</include>
</includes>
<!--对这些文件不清理-->
<excludes>
<exclude>nc*</exclude>
</excludes>
</fileset>
</filesets>
</configuration>
</plugin>
每个配置的作用在代码里加了注释.不过我查遍所有能找到的资料,都没搞懂<followSymlinks>这个标签干什么用的.官方文档是这么说的:
followSymLinks:
Sets whether the plugin should follow symbolic links while deleting files from the default output directories of the project. Not following symlinks requires more IO operations and heap memory, regardless whether symlinks are actually present. So projects with a huge output directory that knowingly does not contain symlinks can improve performance by setting this parameter to true.
Starting with 3.0.0 the property has been renamed from clean.followSymLinks to maven.clean.followSymLinks.
Type: boolean
Since: 2.1
Required: No
User Property: maven.clean.followSymLinks
Default: false
这段话看的我云里雾里,如果谁知道还望不吝赐教,给我博客留言或发我邮箱告知.
6.clean的生命周期
clean什么周期分三个阶段.
| 名称 | 说明 |
|---|---|
| pre-clean | executes processes needed prior to the actual project cleaning |
| clean | remove all files generated by the previous build |
| post-clean | executes processes needed to finalize the project cleaning |
maven-clean-plugin这个插件绑定的就是clean阶段.
7.进阶
不管是clean生命周期还是maven-clean-plugin插件,都比较简单,现在说个有趣的东西.我们经常执行命令 mvn clean package打包项目,目的是为了防止部分之前的输出目录里有脏数据导致打出的包有问题.其实我们可以把清理命令绑定到打包的什么周期里,然后执行所有命令都会先进行清理,那样我们的mvn package和mvn clean package就是等价的了.配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
以后执行的绝大多数命令都会先清理项目了.
initialize属于maven的生命周期的哪个阶段?
[validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy]
答案是第二个阶段.
8.结语
这个插件就一个命令clean:clean,做的事情就是清理,然后就是可以配置清理目录和清理策略.
示例代码github地址: https://github.com/qyf404/learn-maven/tree/maven-clean-plugin
参考
- 官方文档:http://maven.apache.org/plugins/maven-clean-plugin
- http://stackoverflow.com/questions/15350688/custom-maven-clean-with-fileset-not-working
- https://issues.apache.org/jira/browse/MCLEAN-29
- https://issues.apache.org/jira/browse/MCLEAN-39
学习Maven之Maven Clean Plugin的更多相关文章
- 学习Maven之Maven Surefire Plugin(JUnit篇)
1.maven-surefire-plugin是个什么鬼? 如果你执行过mvn test或者执行其他maven命令时跑了测试用例,你就已经用过maven-surefire-plugin了.maven- ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- (转)Maven学习总结(二)——Maven项目构建过程练习
孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(二)——Maven项目构建过程练习 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化构建项 ...
- Maven学习(十六)-----Maven插件
Maven插件 Maven 是一个执行插件的框架,每一个任务实际上是由插件完成的.Maven 插件通常用于: 创建 jar 文件 创建 war 文件 编译代码文件 进行代码单元测试 创建项目文档 创建 ...
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- maven 学习---部署基于Maven的war文件到Tomcat
在本教程中,我们将学习如何使用Maven的Tomcat插件打包并部署一个WAR文件到Tomcat(Tomcat的6和7. 要用到工具: Maven 3 Tomcat 6.0.37 Tomcat 7.0 ...
- maven warnning 'build.plugins.plugin.version' is missing
裝完maven后,package或clean时出错:[WARN] [WARN] Some problems were encountered while building the effective ...
- Maven学习总结(四)——Maven核心概念--转载
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
- Maven学习总结(四)——Maven核心概念——转载
一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识(包名) artifactId:项目名称 ver ...
随机推荐
- PE Checksum Algorithm的较简实现
这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...
- python实现一个控制台下的进度条
今天写练习爬虫感觉很需要个进度条,就随手用函数实现了一个,到了晚上突然感觉到这个东西应该单独写出来以后肯定用用得着. 代码也很简单,我就不细讲了,直接上代码了. 测试代码: instance.py i ...
- myeclipse学习总结二(myeclipse安装svn插件)
1.在myeclipse中要安装svn插件,首先是下载svn插件. 下载地址:http://subclipse.tigris.org/servlets/ProjectDocumentList?fold ...
- AngularJs之八
***今天讲一下angularJs的路由功能: 一:angularJs路由. 1.AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 2.通过 AngularJS 可以实现多视图的单 ...
- 最近做了了解java基础的一些题,整理自己用到的一些函数和了解的一些名词
[程序1]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析: 兔子的规律为数列1,1,2, ...
- 常用js功能函数集合
1.获取随机时间戳 function uniqueId(){ var a=Math.random,b=parseInt; return Number(new Date( ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(49)-工作流设计-我的申请
系列目录 提交一个表单后 我们需要一个管理的列表.我的申请,我的申请包含了提交内容的列表状态 状态分:过期,未审核,审核通过,驳回,废弃 列表对应代码 @using App.Admin; @using ...
- highlight.js 代码高亮插件
官网:https://highlightjs.org/ API:http://highlightjs.readthedocs.org/en/latest/api.html 1. 简单使用: <l ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- ASP.NET Core 中文文档 第三章 原理(5)错误处理
原文:Error Handling 作者:Steve Smith 翻译:谢炀(Kiler) 校对:高嵩(jack2gs).何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法 ...