当我们构建maven工程的时候,为了不让先前的构建输出影响到本次构建,一般需要将将先前的构建文件夹和文件删除。maven中使用clean插件来完成这项任务。
不妨先尝试clean一下maven项目:
mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building utils 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ utils ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.207 s
[INFO] Finished at: 2017-08-15T15:19:27+08:00
[INFO] Final Memory: 7M/123M
[INFO] ------------------------------------------------------------------------
Process finished with exit code 0
当我们调用clean阶段,clean生命周期被自动调用,这个生命周期只有一个clean的目标,利用clean插件来完成这个目标——删除构建文件夹,一般而言,这个构建文件夹是项目中的target文件夹。
自动调用clean插件
由于clean是独立于default生命周期的,所以clean无法被default生命周期自动调用,因而一般来说必须在default生命周期被调用之前调用。有没有办法可以做到让default生命周期自动调用clean插件来完成clean的目标呢?
为了实现这个功能,我们可以在POM文件内加入如下配置:
<build>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>auto-clean</id>
<phase>initialize</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
以上配置会在initialize阶段调用clean插件,这个执行被命名为auto-clean,也就是其id。
验证一下,敲入mvn package
,可以看到如下结果:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building utils 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (auto-clean) @ utils ---
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ utils ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ utils ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ utils ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory F:\BitBucket\utils\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ utils ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ utils ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ utils ---
[INFO] Building jar: F:\BitBucket\utils\target\utils-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.167 s
[INFO] Finished at: 2017-08-15T15:28:13+08:00
[INFO] Final Memory: 10M/155M
[INFO] ------------------------------------------------------------------------
可以发现,clean在初始化阶段被自动调用了。
跳过文件夹删除
有时候,你可能会不希望clean插件删除target目录,怎么实现呢?
<configuration>
<skip>true</skip>
</configuration>
可以通过在plugin下加入这个配置,此时无论是强制调用clean还是自动调用clean,都不会删除target目录了。
新增删除目录
那如果希望能够删除额外的目录呢?此时可以在configuration中配置filesets,通过这个配置就可以新增需要额外删除的目录了。
<configuration>
<skip>false</skip>
<filesets>
<fileset>
<directory>${basedir}/report</directory>
</fileset>
</filesets>
</configuration>
网友评论