Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to wrap an Ant build with Maven?

Tags:

maven-2

ant

We use maven for our large-ish product. All of our artifacts are deployed to a shared archiva repository using the maven deploy goal. I am now integrating a third party product that has an ant build. I know how to call ant targets from maven using the antrun plugin, but I'm not sure how to setup the pom in this instance. I don't want maven to actually generate an artifact, but I do want it to pull the artifact that was built by ant when the maven deploy goal is run.

I am planning on having the pom adjacent to build.xml. The pom will use the antrun plugin in the package goal to call the ant target at the appropriate time to build the .war artifact.

Questions:

a) I am creating a .war file but it is created via ant, not Maven, so having a war packaging type in the pom doesn't make sense. What should my packaging type be?

b) How do I cause maven to pull the artifact from my ant output directory for the deploy goal?

c) If there are no good answers to A and B, then are there ant tasks that replicate the maven deploy functionality for getting my .war artifact into the shared repository?

like image 994
digitaljoel Avatar asked Sep 21 '09 21:09

digitaljoel


People also ask

Can you use Ant and Maven together?

You can use the maven-antrun-plugin to invoke the ant build. Then use the build-helper-maven-plugin to attach the jar produced by ant to the project. The attached artifact will be installed/deployed alongside the pom. If you specify your project with packaging pom , Maven will not conflict with the ant build.

How do I run an Ant script in Maven?

Action. Configure the run goal form the Maven AntRun plugin. Define any properties you wish to pass to the external Ant build, and then call the external Ant build with the ant task, specifying the antfile and target you wish to execute. To execute this external Ant build, run mvn package.

Does maven replace Ant?

There are basically three build tools that can replace Ant: Maven, gradle and Buildr. It is important to be able to continue using existing Ant scripts and custom tasks alongside the new tool.


2 Answers

You can use the maven-antrun-plugin to invoke the ant build. Then use the build-helper-maven-plugin to attach the jar produced by ant to the project. The attached artifact will be installed/deployed alongside the pom.
If you specify your project with packaging pom, Maven will not conflict with the ant build.

In the example below, the ant build.xml is assumed to be in src/main/ant, have a compile goal, and output to 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> 
like image 114
Rich Seller Avatar answered Oct 04 '22 13:10

Rich Seller


You can actually wrap an ANT project with Maven by using multiple ant run goals as I wrote in a different question. Assuming your existing ant project has clean and build tasks, this might be a useful way of wrapping the project so you can use maven goals and have it map to existing ant code.

like image 35
sal Avatar answered Oct 04 '22 12:10

sal