9

我尝试了许多变体,但无法完成这项工作。一个例子(孩子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 总是试图删除我的文件夹。为什么?

4

2 回答 2

11

正如@AR.3 在此处的答案中所建议的那样,clean阶段和目标将 -

默认情况下,它会发现并删除在 project.build.directory、project.build.outputDirectory、project.build.testOutputDirectory 和 project.reporting.outputDirectory 中配置的目录。

不过,如果您想排除特定文件被删除,您可以按照相反的方法(一个简单的 hack)进行如下操作 -

<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>

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>
于 2016-12-07T18:43:57.567 回答
3

目标的文档中clean:clean

这会尝试清理在构建时生成的文件的项目工作目录。默认情况下,它会发现并删除在project.build.directoryproject.build.outputDirectoryproject.build.testOutputDirectory和中配置的目录project.reporting.outputDirectory

filesets通过配置标签,默认之外的文件也可以包含在删除中。

这意味着无论您在filesets元素中声明什么,该target目录都将始终被删除(EDIT除非excludeDefaultDirectories设置为 true,请参见下面的编辑)。鉴于上述描述,解决方法是执行以下操作:

  1. 在清理目录之前,暂时覆盖上述属性以指向默认target目录以外的其他内容。

  2. 使用该filesets机制来告知要从目录中排除哪些target目录(与您已经做过的相同)。

  3. 清理目录恢复属性。

和生命周期阶段可用于执行步骤 1 和 3 pre-cleanpost-clean

编辑:(感谢 nullpointer 指出)

将目标参数设置excludeDefaultDirectories为 true 将排除默认目录被删除,在这种情况下,您可以使用该filesets方法而无需覆盖 Maven 属性。

于 2016-12-07T18:13:17.920 回答