Maven如何删除其中包含给定文本字符串的所有文件?

时间:2012-06-21 14:47:03

标签: maven maven-2 maven-plugin

对于某个Maven'profile'(即构建的变体),我想删除其中包含特定文本字符串的文件。列出要删除的文件名很容易,但在我的情况下,我希望信息位于(注释)文件本身。

我该怎么做?

2 个答案:

答案 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>选择器进行更复杂的匹配。