2009-09-21 76 views
38

我们使用maven作为我们的大型产品。我们所有的工件都使用maven部署目标部署到共享的archiva存储库。我现在正在整合一个有蚂蚁构建的第三方产品。我知道如何使用antrun插件从maven调用ant目标,但我不知道如何在这种情况下设置pom。我不希望Maven实际生成一个工件,但我确实希望它能够在Maven部署目标运行时取出由Ant构建的工件。如何使用Maven包装Ant构建?

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

问题:

一)我创建一个.war文件,但它是通过蚂蚁,不Maven的创建,所以其在POM战争包装类型没有意义。我的包装类型应该是什么?

b)如何让maven从我的ant输出目录中为工作目标抽取工件?

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

回答

51

您可以使用maven-antrun-plugin来调用ant构建。然后使用build-helper-maven-plugin将ant生成的jar附加到项目中。附带的工件将与pom一起安装/部署。
如果您使用包装pom指定项目,则Maven不会与蚂蚁构建发生冲突。

在下面的示例中,假定ant build.xml位于src/main/ant目录中,并且输出为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> 
+0

非常有帮助的回答丰富的,一旦我得到它在我的项目中工作,我会接受你的答案。 – digitaljoel 2009-09-21 22:17:22

+0

伟大的建议。不幸的是,它不适用于WAR文件 - maven war插件似乎不关心附加的WAR工件。 – mvmn 2013-04-07 19:49:58

+0

P.S.请原谅我,一旦我将包装规格更改为 pom - 附加的WAR不再干扰生成的WAR,它就会正常工作,因此最终会正确添加回购。 – mvmn 2013-04-07 20:47:58

3

实际上,你可以通过使用multiple ant run goals我在一个不同的问题写了包装与Maven的ANT项目。假设你现有的ant项目有干净的构建任务,这可能是一个包装项目的有用方式,所以你可以使用maven目标并将其映射到现有的ant代码。

+0

谢谢Sal,很好的回答。不完全符合我上面的a,b和c,但无论如何都有帮助。 – digitaljoel 2009-09-22 16:07:58

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>