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 で構成されたディレクトリを検出して削除します。

それでも、特定のファイルを削除から除外したい場合は、逆のアプローチ(単純なハック)に従って次のように実行できます-

<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.directory削除project.build.outputDirectoryproject.build.testOutputDirectoryますproject.reporting.outputDirectory

filesetsタグを設定することにより、デフォルト以外のファイルも削除に含めることができます。

filesetsこれは、要素で宣言したものは何でも、targetディレクトリは常に削除されることを意味します ( EDITが true に設定されていない限りexcludeDefaultDirectories、以下の edit を参照してください)。上記の説明を踏まえると、回避策は次のとおりです。

  1. ディレクトリを消去する前にtarget、上記のプロパティを一時的にオーバーライドして、既定のディレクトリ以外を指定します。

  2. このメカニズムを使用して、filesetsディレクトリから除外するディレクトリを指定しtargetます (既に行ったことと同じです)。

  3. ディレクトリを消去した、プロパティを復元します。

およびライフサイクル フェーズpre-cleanpost-clean使用して、ステップ 1 と 3 を実行できます。

編集:(指摘してくれたnullpointerに感謝)

ゴール パラメータexcludeDefaultDirectoriesを true に設定すると、デフォルト ディレクトリが削除されなくなります。この場合filesets、Maven プロパティをオーバーライドするハックなしでこのアプローチを使用できます。

于 2016-12-07T18:13:17.920 に答える