Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to merge wars into one?

In our company, we have a number different modules constructed as separate wars. Each client can pick and choose module he wishes to buy. Since all modules share same session, security context etc, it makes sense to merge them into a single war.

Is it possible to automate this process? For example, it should merge web.xml, calculate each wars dependencies, copy files like .jsp and .class etc. By the way, we are using Maven, but were not able to find a solution to this problem.

like image 745
Dan Avatar asked Oct 07 '09 17:10

Dan


2 Answers

Granted the risks mentioned by djna and ChssPly76, you may be able to achieve this by using overlays with the Maven WAR plugin. This will require you to separate out servlet mappings to ensure you don't have any URL collisions and the like, but it might do the trick.

Basically, you create a module with multiple WAR dependencies and use the plugin to merge them into a new one.

like image 57
Steve Reed Avatar answered Nov 15 '22 18:11

Steve Reed


I recall that the cargo-maven2-plugin has an uberwar mojo. I've not used it but I understand it is intended to merge wars, though you need to be careful to avoid conflicts.

A quick scan of the source indicates you define a merge descriptor to determine how to merge the wars. Unfortunately the documentation site has gone missing so I can't give you any more details.

You can check out the Codehaus Jira site for an understanding of its current status.

To use the plugin you'd specify the configuration something like this:

<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven2-plugin</artifactId>
      <version>1.0</version>
      <extensions>true</extensions>
      <configuration>
      <descriptor>merge.xml</descriptor>
      </configuration>
    </plugin>
  </plugins>
</build>
<dependencies>
  <dependency>
    <groupId>project1.groupId</groupId>
    <artifactId>project1</artifactId>
    <type>war</type>
    <version>1.0.0</version>
  </dependency>
  <dependency>
    <groupId>project2.groupId</groupId>
    <artifactId>project2</artifactId>
    <type>war</type>
    <version>1.2.0</version>
  </dependency>
</dependencies> 

(still looking for a merge.xml example)

like image 35
Rich Seller Avatar answered Nov 15 '22 20:11

Rich Seller