如何使用Maven包装Ant构建?

42

我们使用Maven管理较大的产品。通过Maven deploy目标,所有制品都被部署到一个共享的Archiva仓库中。现在我正在集成一个带有Ant构建的第三方产品。我知道如何使用antrun插件从Maven调用Ant目标,但我不确定如何设置POM文件。我不想让Maven实际生成一个制品,但我希望它能在运行Maven deploy目标时拉取由Ant构建的制品。

我打算将POM文件放在build.xml旁边。POM将在package目标中使用antrun插件,在适当的时间调用Ant目标来构建.war制品。

问题:

a)我正在创建一个.war文件,但它是通过Ant创建的,而不是通过Maven创建的,因此在POM中使用war打包类型没有意义。我的打包类型应该是什么?

b)我如何引导Maven从Ant输出目录中拉取制品以进行deploy目标?

c)如果没有好的答案回答问题A和B,那么是否有Ant任务可以复制Maven deploy功能,将.war制品放入共享仓库中?

4个回答

54
您可以使用maven-antrun-plugin来调用ant构建。然后使用build-helper-maven-plugin将由ant生成的jar附加到项目中。该附加的构件将与pom文件一起安装/部署。
如果您使用pom打包指定您的项目,Maven将不会与ant构建发生冲突。
在下面的示例中,假设ant build.xml位于src/main/ant目录中,具有compile目标,并且输出为ant-output.jar
<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <configuration>
        <tasks>
          <ant antfile="src/main/ant/build.xml" target="compile"/>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>add-jar</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/ant-output.jar</file>
            <type>jar</type>
          </artifact>
        </artifacts>
      </configuration>
    </execution>
  </executions>
</plugin>

非常有帮助的答案,Rich。一旦我在我的项目中让它工作,我就会接受你的答案。 - digitaljoel
很好的建议。不幸的是,它对WAR文件无效 - Maven WAR插件似乎不关心附加的WAR构件。 - mvmn
1
抱歉,一旦我将打包规范更改为<packaging>pom</packaging>,它实际上可以正常工作-附加的WAR不再干扰生成的WAR,因此最终会被正确地添加到存储库中。 - mvmn

3

你实际上可以使用多个ant运行目标将ANT项目与Maven包装起来,正如我在另一个问题中所写的那样。假设您现有的ANT项目具有清理和构建任务,这可能是一种有用的方式,以便您可以使用Maven目标并将其映射到现有的ANT代码。


谢谢Sal,好答案。虽然没有完全解决我的a、b和c问题,但还是很有帮助的。 - digitaljoel

1
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>install-library</id>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>x.x</groupId>
                <artifactId>ant-out-atifacts</artifactId>
                <version>${project.version}</version>
                <file>ant-output.jar</file>
                <packaging>zip</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接