对于某个 Maven '配置文件'(即构建的变体),我想删除其中包含特定文本字符串的文件。列出要删除的文件名很容易,但就我而言,我希望信息位于(注释)文件本身中。
我怎样才能做到这一点?
对于某个 Maven '配置文件'(即构建的变体),我想删除其中包含特定文本字符串的文件。列出要删除的文件名很容易,但就我而言,我希望信息位于(注释)文件本身中。
我怎样才能做到这一点?
我会说唯一的方法是一个 groovy 脚本部分,否则我看不到这种奇怪要求的方法。
<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>
@khmarbaise 的答案的一个变体是使用Ant 插件和 Ant scriptlet 来执行此操作,这应该比 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>选择器进行更复杂的匹配。