Mvn 任务

注意:此任务从 Maven Ant 任务 2.0.10 版本开始可用

Maven Ant 任务对从 Ant 调用完整的 Maven 构建有一些有限的支持。mvn任务是 Ant java任务的子类,支持它的所有选项,例如 args、fork、resultproperty 等。

如果本地系统上已经安装了 Maven,则可以通过指定mavenHome参数使用此本地安装调用 Maven 构建。

  <artifact:mvn mavenHome="/path/to/maven-2.0.x">
    <arg value="install"/>
  </artifact:mvn>

Maven 将在当前目录中搜索 pom.xml 文件并运行安装目标。

如果 pom 文件不在当前目录中,则可以指定 pom 的备用路径。

  <artifact:mvn pom="path/to/my-pom.xml" mavenHome="/path/to/maven-2.0.x">
    <arg value="install"/>
  </artifact:mvn>

在没有 Maven 安装的情况下运行 Mvn 任务

如果没有可用的本地 Maven 安装,mvn 任务将尝试从中央 Maven 存储库解析(下载)必要的 jar 文件并使用这些 jar 文件运行 Maven 构建。

未设置mavenHome属性时, mvn任务将尝试自动解析所需的 jar 文件。

  <artifact:mvn pom="path/to/my-pom.xml">
    <arg value="install"/>
  </artifact:mvn>

注意:这将使用 Maven Ant Tasks jar 中包含的核心 Maven 库的 2.2.1 版本

使用 Java 任务

java任务可以直接使用,不需要Maven Ant Tasks。但是,这种方法要求系统上已经安装了 Maven。必须将一个名为maven.home的属性设置为指向本地 Maven 安装,然后可以定义一个 Ant 宏来调用 Maven。

  <macrodef name="maven">
    <attribute name="options" default="" />
    <attribute name="goal" />
    <attribute name="basedir" />
    <attribute name="resultproperty" default="maven.result" />
    <element name="args" implicit="true" optional="true" />
    <sequential>
      <java classname="org.codehaus.classworlds.Launcher" fork="true"
            dir="@{basedir}" resultproperty="@{resultproperty}">
        <jvmarg value="-Xmx512m"/>
        <classpath>
          <fileset dir="${maven.home}/boot">
            <include name="*.jar" />
          </fileset>
          <fileset dir="${maven.home}/lib">
            <include name="*.jar" />
          </fileset>
        </classpath>
        <sysproperty key="classworlds.conf" value="${maven.home}/bin/m2.conf" />
        <sysproperty key="maven.home" value="${maven.home}" />
        <arg line="--batch-mode @{options} @{goal}" />
      </java>
    </sequential>
  </macrodef>

此示例定义了一个名为maven的 Ant 宏。然后可以在构建中使用宏,如下所示:

      <maven basedir="${basedir}"
             options="${maven.opts}"
             goal="install"
             resultproperty="maven.build.result"/>