在软件开发中,构建和管理项目的复杂性随着代码量和依赖的增加而不断提升。Maven作为一个强大的构建工具,简化了这一过程,并通过其插件机制提供了丰富的功能。其中,maven-clean-plugin 是Maven的核心插件之一,它在项目的清理阶段发挥着重要作用。无论是删除旧的编译文件、清理生成的临时文件,还是确保构建环境的整洁,maven-clean-plugin 都是不可或缺的工具。
本文将详细介绍 maven-clean-plugin 的功能、配置方法以及常见的使用场景,帮助开发者更好地理解和利用这一插件,提高项目的构建效率和质量。无论你是Maven的新手还是经验丰富的开发者,希望通过这篇文章,你能够深入掌握 maven-clean-plugin 的使用,并在实际项目中得心应手地应用它。
该插件只有一个插件目标:
clean:clean,用于尝试清除项目工作目录中因构建而生成的文件。默认情况下,它会发现并删除在 project.build.directory、project.build.outputDirectory、project.build.testOutputDirectory 和 project.reporting.outputDirectory 所配置的目录。
通过配置 元素也可以删除默认目录以外的文件。
project.build.directorytargetproject.build.outputDirectorytarget/classesproject.build.testOutputDirectorytarget/test-classesproject.reporting.outputDirectorytarget/sitepom.xml 中的配置示例虽然这些配置项有默认值,但你可以在 pom.xml 文件中自定义这些目录的位置。下面是一个示例,展示了如何在 pom.xml 文件中配置这些项:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.examplegroupId>
<artifactId>my-appartifactId>
<version>1.0-SNAPSHOTversion>
<build>
<directory>custom-targetdirectory>
<outputDirectory>custom-target/classesoutputDirectory>
<testOutputDirectory>custom-target/test-classestestOutputDirectory>
build>
<reporting>
<outputDirectory>custom-target/siteoutputDirectory>
reporting>
project>
元素通过在 pom.xml 文件中配置 元素,你可以指定需要删除的额外文件和目录。每个 元素允许你定义一个文件集,包括目录、包含的文件模式和排除的文件模式。
下面是一个示例,展示了如何在 pom.xml 中配置 maven-clean-plugin 插件以删除默认目录之外的文件和目录:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.examplegroupId>
<artifactId>my-appartifactId>
<version>1.0-SNAPSHOTversion>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-clean-pluginartifactId>
<version>3.1.0version>
<configuration>
<excludeDefaultDirectories>falseexcludeDefaultDirectories>
<failOnError>truefailOnError>
<followSymLinks>falsefollowSymLinks>
<retryOnError>trueretryOnError>
<skip>falseskip>
<verbose>falseverbose>
<filesets>
<fileset>
<directory>extra-directorydirectory>
<includes>
<include>**/*include>
includes>
<excludes>
<exclude>**/*.txtexclude>
excludes>
fileset>
<fileset>
<directory>another-directorydirectory>
<includes>
<include>**/*.loginclude>
includes>
fileset>
filesets>
configuration>
plugin>
plugins>
build>
project>
其中文件集中的目录是项目中的相对路径,换句话说,
<directory>some/relative/pathdirectory>
相当于:
<directory>${basedir}/some/relative/pathdirectory>
元素删除时排除项目的默认输出目录。如果设置为 true(默认为 false),则仅删除通过 元素选择的文件和目录。
Ps:从 3.0.0 版本开始,对应的 property 名称已从 clean.excludeDefaultDirectories 变为 maven.clean.excludeDefaultDirectories。
元素如果在删除时出现错误,是否仍继续进行构建。
使用场景:
false:适用于你希望在清理过程中即使出现错误也不影响整个构建流程的场景。例如,你知道某些文件可能会被其他进程锁定而无法删除,但这并不影响后续的构建步骤;true:适用于你希望严格控制构建过程,确保所有步骤都无错误完成的场景。例如,清理步骤对于构建的准确性至关重要,任何错误都可能导致后续步骤失败。 元素从项目默认输出目录中删除文件时是否应遵循符号链接。默认为 false。不遵循符号链接需要更多 IO 操作和堆内存,而不管符号链接是否实际存在。因此,如果项目的输出目录很大,并且故意不包含符号链接,则可以通过将此参数设置为 true 来提高性能。从 3.0.0 版本开始,该属性已从clean.followSymLinks 重命名为 maven.clean.followSymLinks。
符号链接(Symbolic Link),也称为软链接(Soft Link),是一种特殊的文件类型,它包含指向另一个文件或目录的路径。符号链接本身并不包含数据,而是一个指针,指向目标文件或目录的位置(类似于 Windows 中的快捷方式)。
Ps:从 3.0.0 版本开始,该属性已从clean.followSymLinks 重命名为 maven.clean.followSymLinks。
元素指示如果第一次尝试删除失败,则是否应进行再次尝试(在短暂延迟后)删除文件。这是为了帮助删除由第三方工具(如病毒扫描程序或搜索索引)临时锁定的文件。
元素禁用插件的执行。
Ps:从 3.0.0 版本开始,对应的 property 已从 clean.skip 重命名为 maven.clean.skip。
元素设置插件是否以详细模式运行。从 2.3 版本开始,默认值来自 Maven 的全局 debug 标志(命令行开关 mvn clean -X)。
详细模式是一种调试模式,它使插件在执行过程中输出更多的详细信息。这些信息可以帮助开发人员了解构建过程中的每一步,特别是在排查问题时非常有用。详细模式通常包括以下内容:
Ps:从 3.0.0 版本开始,该 property 已从 clean.verbose 重命名为 maven.clean.verbose。