对于某个Maven'profile'(即构建的变体),我想删除其中包含特定文本字符串的文件。列出要删除的文件名很容易,但在我的情况下,我希望信息位于(注释)文件本身。
我该怎么做?
答案 0 :(得分:2)
我想说唯一的方法就是一个时髦的脚本部分,否则我看不出这种奇怪的要求。
<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>
答案 1 :(得分:2)
@ khmarbaise的答案的变体是使用Ant plugin和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>选择器进行更复杂的匹配。