我尝试了很多变种,但无法使其发挥作用。一个例子(孩子pom.xml
):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<filesets>
<fileset>
<directory>target</directory>
<useDefaultExcludes>true</useDefaultExcludes>
<excludes>
<exclude>myFolder</exclude>
</excludes>
</fileset>
</filesets>
</configuration>
</plugin>
Maven总是试图删除我的文件夹。为什么呢?
答案 0 :(得分:9)
正如@ AR.3在答案here中所建议的那样,clean
阶段和目标会 -
默认情况下,它会发现并删除配置的目录 project.build.directory,project.build.outputDirectory, project.build.testOutputDirectory,和 project.reporting.outputDirectory。
但是,如果你想排除一个特定的文件被删除,你可以按照以下方法(一个简单的黑客)进行操作,如下所示 -
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>target</directory>
<followSymlinks>false</followSymlinks>
<useDefaultExcludes>true</useDefaultExcludes>
<includes>
<include><!--everything other that what you want to exclude--></include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
有关similar link -
的excludeDefaultDirectories
的更多信息
禁用删除为其配置的默认输出目录 一个专案。 如果设置为true,则只选择通过的文件/目录 参数文件集将被删除。
修改强>
确实可以使用直接方法排除特定文件:
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>target</directory>
<includes>
<include>**</include>
</includes>
<excludes>
<exclude><!-- folder you want to exclude --></exclude>
</excludes>
</fileset>
</filesets>
</configuration>
答案 1 :(得分:3)
来自documentation of the clean:clean
goal:
这会尝试清除项目在构建时生成的文件的工作目录。默认情况下,它会发现并删除
project.build.directory
,project.build.outputDirectory
,project.build.testOutputDirectory
和project.reporting.outputDirectory
中配置的目录。默认情况下的文件也可能通过配置
filesets
代码包含在删除中。
这意味着,无论您在filesets
元素中声明什么,target
目录将始终被删除(编辑,除非excludeDefaultDirectories
设置为true,请参阅下面编辑)。鉴于以上描述,解决方法是执行以下操作:
在清理目录之前,暂时覆盖上述属性以指向默认target
目录以外的其他属性。
使用filesets
机制告知要从target
目录中排除哪些目录(与您已经执行的目录相同)。
在清理目录后恢复属性。
pre-clean
和post-clean
生命周期阶段可用于执行第1步和第3步。
编辑:(感谢nullpointer指出它)
将目标参数excludeDefaultDirectories
设置为true将排除默认目录被删除,在这种情况下,您可以使用filesets
方法而不会覆盖Maven属性。