maven antrun:如何迭代文件?

时间:2014-11-01 23:20:50

标签: java maven maven-antrun-plugin

我在https://github.com/jjYBdx4IL/example-maven-project-setups/blob/master/antrun-foreach/pom.xml设置了一个示例:

        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>process-test-resources</phase>
                    <configuration>
                        <tasks>
                            <taskdef resource="net/sf/antcontrib/antcontrib.properties" />
                            <foreach target="unzipLibs" param="fileName">
                                <path>
                                    <fileset dir="${basedir}" casesensitive="yes">
                                        <include name="*.xml"/>
                                    </fileset>
                                </path>
                            </foreach>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>ant-contrib</groupId>
                    <artifactId>ant-contrib</artifactId>
                    <version>1.0b3</version>
                    <!--                        <exclusions>
                        <exclusion>
                            <artifactId>ant</artifactId>
                            <groupId>ant</groupId>
                        </exclusion>
                    </exclusions>-->
                </dependency>
            </dependencies>
            <configuration>
                <target name="unzipLibs">
                    <echo message="${fileName}" />
                </target>
            </configuration>
        </plugin>            

然而,无论我尝试什么,它都不起作用:

Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project antrun-foreach: Error executing ant tasks: org.apache.tools.ant.util.FileUtils.getFileUtils()Lorg/apache/tools/ant/util/FileUtils; -> [Help 1]

或使用ant排除:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project antrun-foreach: An Ant BuildException has occured: The following error occurred while executing this line:
[ERROR] /home/travis/build/jjYBdx4IL/example-maven-project-setups/antrun-foreach/pom.xml:5: Unexpected element "{http://maven.apache.org/POM/4.0.0}project" {antlib:org.apache.tools.ant}project
[ERROR] around Ant part ...<foreach param="fileName" target="unzipLibs">... @ 5:48 in /home/travis/build/jjYBdx4IL/example-maven-project-setups/antrun-foreach/target/antrun/build-main.xml

Complete build log

将ant任务移动到外部文件中没有帮助。

更新:问题似乎是maven-antrun-plugin不支持定义多个antrun目标...... https://jira.codehaus.org/browse/MANTRUN-86

1 个答案:

答案 0 :(得分:4)

通过将目标定义移动到单独的ant xml构建文件中来解决。

        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.7</version>
            <executions>
                <execution>
                    <phase>process-test-resources</phase>
                    <configuration>
                        <target>
                            <!-- maven does not support defining more than one target... -->
                            <!-- https://jira.codehaus.org/browse/MANTRUN-86 -->
                            <ant antfile="${basedir}/unzip.xml" />
                        </target>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>ant-contrib</groupId>
                    <artifactId>ant-contrib</artifactId>
                    <version>1.0b3</version>
                    <exclusions>
                        <exclusion>
                            <artifactId>ant</artifactId>
                            <groupId>ant</groupId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
            <configuration>
            </configuration>
        </plugin>            

unzip.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<project name="maven-antrun-" default="main"  >
<target name="main">
  <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
  <foreach param="fileName" target="unzipLibs">
    <path>
      <fileset dir="/home/mark/mysvn/devel/java/misc/maven/antrun-foreach" casesensitive="yes">
        <include name="*.xml"/>
      </fileset>
    </path>
  </foreach>
</target>
<target name="unzipLibs">
  <echo message="${fileName}"/>
</target>
</project>