特定の Maven 'プロファイル' (つまり、ビルドのバリアント) について、特定のテキスト文字列を含むファイルを削除したいと考えています。削除するファイル名をリストするのは簡単ですが、私の場合は、ファイル自体に情報を配置 (コメント内) したいと考えています。
どうやってやるの?
特定の Maven 'プロファイル' (つまり、ビルドのバリアント) について、特定のテキスト文字列を含むファイルを削除したいと考えています。削除するファイル名をリストするのは簡単ですが、私の場合は、ファイル自体に情報を配置 (コメント内) したいと考えています。
どうやってやるの?
@khmarbaise の回答のバリエーションは、Ant プラグインと Ant スクリプトレットを使用してこれを行うことです。これは、Groovy スニペットよりも簡単なはずです。そうは言っても、これをスクリプト化する必要があることを確認したら、すべては選択したスクリプト言語に依存します。
たとえば、次のようになります。
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase> <!-- a lifecycle phase --> </phase>
<configuration>
<target>
<delete>
<!-- here, the 'generated.java.dir' is assumed to be a maven property defined earlier in the pom -->
<fileset dir="${generated.java.dir}" includes="**/*.java">
<contains text="DELETE.ME.IF.YOU.SEE.THIS" casesensitive="no"/>
</fileset>
</delete>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
必要に応じて、より複雑な一致に<containsregexp>セレクターを使用することもできます。
唯一の方法はグルーヴィーなスクリプト部分だと思います。そうしないと、そのような奇妙な要件の方法がわかりません。
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def directory = new File("TheFolderYouWouldLikeToDeleteFilesIn")
directory.eachFileRecurse(groovy.io.FileType.FILES) {
file ->
def deleteFile = false;
file.eachLine{ line ->
if (line.contains("Text String Inside")) {
deleteFile = true;
}
}
if (deleteFile) {
println "Deleting " + file
file.delete()
}
}
</source>
</configuration>
</execution>
</executions>
</plugin>