如何通过maven执行简单的ant调用?

时间:2011-12-12 20:47:43

标签: maven ant

我的项目使用以下命令完美运行:

C:\project\<project_name>\ant -lib ant\lib -buildfile applications/<sub-project-path>/ant/build.xml deploy

但是,如果我在pom中的maven-antrun-plugin或exec-maven-plugin中包装此命令,我会遇到各种路径问题。

对于maven-antrun-plugin,由于路径问题,似乎无法加载某些属性。在exec-maven-plugin中,似乎蚂蚁目标从未正确传递过 有人可以建议我如何在pom文件中应用它吗?非常感谢。

这是我执掌的pom:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                    <executable>ant</executable>
                    <workingDirectory>${basedir}</workingDirectory>
                    <arguments>
                        <argument>'-lib ant/lib'</argument>
                        <argument>'-buildfile $basedir/<project-path>/build.xml'</argument>
                        <argument>deploy</argument>
                    </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:1)

没有尝试过,但你可以做类似于maven antrun插件example中记载的内容。

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <id>ant</id>
            <phase>process-resources</phase>
            <configuration>
              <target>
                <ant antfile="${basedir}/<project-path>/build.xml">
                  <target name="deploy"/>
                </ant>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

不确定您要在上面的代码段中的-lib中作为参数传递哪个库,但同样可以声明为plugin dependencies

请注意,此插件并不关心系统上是否存在ant安装。它下载了必要的ant库。

答案 1 :(得分:0)

您应该在<executions>元素之后直接将所需的依赖项传递给antrun插件声明。

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            ...
        </executions>
        <dependencies>
          <dependency>
            <groupId>ant-contrib</groupId>
            <artifactId>ant-contrib</artifactId>
            <version>${ant-contrib.version}</version>
            <exclusions>
              <exclusion>
                <groupId>ant</groupId>
                <artifactId>ant</artifactId>
              </exclusion>
            </exclusions>
          </dependency>
          <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>jasper</artifactId>
            <version>${tomcat.compile.version}</version>
          </dependency>
          <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>${java.version}.0</version>
            <scope>system</scope>
            <systemPath>${jdk.home}/tools.jar</systemPath>
          </dependency>
        </dependencies>
    </plugin>

我已经包含了一些我在项目中使用的库,所以你有一个例子。请注意,如果您的构建使用某些非标准(即java.lang之外的某些Java API类),则必须将tools.jar作为依赖项传递。

此外,如果您使用ant-contrib,请不要忘记将ant排除为依赖项,因为它依赖于某些古老版本的ant,您将获得版本冲突。

另一个令人讨厌的事情是,直接分配给插件执行的依赖项不是POM的<dependencyManagement>的一部分,所以你必须拼出精确的版本。一种解决方法是在与中心<dependencyManagement>相同的位置声明版本属性,并使用属性而不是硬编码版本。