如何用Maven包装Ant构build?

我们使用maven作为我们的大型产品。 我们所有的工件都使用maven部署目标部署到共享的archiva仓库。 我正在整合一个有ant构build的第三方产品。 我知道如何使用antrun插件从maven调用ant目标,但是我不知道如何在这个实例中设置pom。 我不想让maven实际生成一个工件,但是我确实希望它能够在maven部署目标运行时拉出由ant构build的工件。

我打算把pom与build.xml相邻。 pom将使用包目标中的antrun插件在适当的时间调用ant目标来构build.war神器。

问题:

a)我正在创build一个.war文件,但它是通过ant创build的,而不是Maven,所以在pom中有一个war包装types是没有意义的。 我的包装types应该是什么?

b)如何让maven从我的ant输出目录中取出工件以实现部署目标?

c)如果对A和B没有好的答案,那么是否有ant任务复制maven部署function以将我的.war工件放入共享存储库?

你可以使用maven-antrun-plugin来调用ant build。 然后使用build-helper-maven-plugin将ant生成的jar附加到项目中。 附件中的神器将被安装/部署在pom旁边。
如果你使用包装包来指定你的项目,Maven将不会与ant构build产生冲突。

在下面的例子中,假定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> 

实际上,您可以使用多个ant运行目标来包装Maven的ANT项目,就像我在另一个问题中写的一样。 假设你现有的ant项目有干净的构build任务,这可能是包装项目的一个有用的方法,所以你可以使用maven目标并将其映射到现有的ant代码。

 <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>xx</groupId> <artifactId>ant-out-atifacts</artifactId> <version>${project.version}</version> <file>ant-output.jar</file> <packaging>zip</packaging> </configuration> </execution> </executions> </plugin> 

请参考: 为什么你应该使用Maven Ant Tasks而不是Maven或Ivy

具体来说,如何从Ant中调用Maven目标可以在这个例子中find:

http://code.google.com/p/perfbench/source/browse/trunk/perfbench/grails-gorm/build.xml

有了上面的信息,你应该能够实现你所需要的。 如果您有任何问题,请告诉我。