2

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

我怎样才能做到这一点?

4

2 回答 2

2

我会说唯一的方法是一个 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>
于 2012-06-21T14:50:17.440 回答
2

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

于 2012-06-22T16:56:18.523 回答