views:

5610

answers:

2

Hello everyone,

I am just switching from Ant to Maven and am trying to figure out the best practice to set up a EAR file based Enterprise project?

Let's say I want to create a pretty standard project with a jar file for the EJBs, a WAR file for the Web tier and the encapsulating EAR file, with the corresponding deployment descriptors.

How would I go about it? Create the project with archetypeArtifactId=maven-archetype-webapp liek a war file and extend from there? What is the best project structure (and POM file example) for this? Where do you stick the ear file related deployment descriptors, etc?

Thanks for any help.

+3  A: 

You create a new project. The new project is your EAR assembly project which contains your two dependencies for your EJB project and your WAR project.

So you actually have three maven projects here. One EJB. One WAR. One EAR that pulls the two parts together and creates the ear.

Deployment descriptors can be generated by maven, or placed inside the resources directory in the EAR project structure.

The maven-ear-plugin is what you use to configure it, and the documentation is good, but not quite clear if you're still figuring out how maven works in general.

So as an example you might do something like this:

<?xml version="1.0" encoding="utf-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&gt;
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany</groupId>
<artifactId>myEar</artifactId>
<packaging>ear</packaging>
<name>My EAR</name>

<build>
  <plugins>
    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.5</source>
        <target>1.5</target>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-ear-plugin</artifactId>
      <configuration>
        <version>1.4</version>
        <modules>
          <webModule>
            <groupId>com.mycompany</groupId>
            <artifactId>myWar</artifactId>
 <bundleFileName>myWarNameInTheEar.war</bundleFileName>
            <contextRoot>/myWarConext</contextRoot>
          </webModule>
          <ejbModule>
            <groupId>com.mycompany</groupId>
            <artifactId>myEjb</artifactId>
 <bundleFileName>myEjbNameInTheEar.jar</bundleFileName>
          </ejbModule>
        </modules>
        <displayName>My Ear Name displayed in the App Server</displayName>
        <!-- If I want maven to generate the application.xml, set this to true -->
        <generateApplicationXml>true</generateApplicationXml>
      </configuration>
    </plugin>
    <plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.3</version>
      <configuration>
        <encoding>UTF-8</encoding>
      </configuration>
    </plugin>
  </plugins>
  <finalName>myEarName</finalName>
</build>

<!-- Define the versions of your ear components here -->
<dependencies>
  <dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>myWar</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>war</type>
  </dependency>
  <dependency>
    <groupId>com.mycompany</groupId>
    <artifactId>myEjb</artifactId>
    <version>1.0-SNAPSHOT</version>
    <type>jar</type>
  </dependency>
</dependencies>

Mike Cornell
If no better examples come along, I'll provide an example tomorrow when I have a sample in front of me.
Mike Cornell
That would be awesome and greatly appreciated
Maik
I found my own answer a year later when I had the same question. Good job self!
Mike Cornell
A: 

This is a good example of the maven-ear-plugin part.

You can also check the maven archetypes that are available as an example. If you just runt mvn archetype:generate you'll get a list of available archetypes. One of them is

maven-archetype-j2ee-simple
hcpl