  ------
  Eclipse and Maven integration
  ------
  Chris Graham
  Robert Scholte
  ------
  2013-11-19

~~ Copyright 2013 The Apache Software Foundation.
~~
~~ Licensed under the Apache License, Version 2.0 (the "License");
~~ you may not use this file except in compliance with the License.
~~ You may obtain a copy of the License at
~~
~~      http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

Eclipse and Maven Integration (without m2e)

  This page describes how to integrate an EAR project in Eclipse or Eclipse-based IDE <<without>> {{{http://www.eclipse.org/m2e/}m2e}} support.
  Normally however, using m2e (and m2e-wtp) should be the preferred way to integrate Maven and Eclipse. But in some rare cases that might not be possible.
  
  If you have used <<<mvn eclipse:eclipse>>> to generate the metadata for an EAR project, it will want the <<<application.xml>>> file in the <<<src/main/application/META-INF>>> directory. 

  If you edit <<<application.xml>>> using the WTP based Application Deployment Descriptor editor, it will use the name of the projects (Web, EJB etc) as the name of the modules. Here is an example:

+------------------------+
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" version="1.4">
  <display-name>FireDragon</display-name>
  <module>
    <web>
      <web-uri>FireDragonWeb.war</web-uri>
      <context-root>firedragon</context-root>
    </web>
  </module>
</application>
+------------------------+

  Obviously this does not have the typical Maven based version naming convention applied to it. This allows us to run the application internally within Eclipse using the test environments.
  When Maven is used to create the ear using <<<mvn package>>>, it will create the versionized <<<application.xml>>> file, if told to. 
  However, by default it will not pick up the generated (versionized) one, it will use the existing one in the <<<src/main/application/META-INF>>> directory.

  The solution to resolve this conflict is to have Maven generate the <<<application.xml>>> and use the generated one as opposed to the existing one.

  This can be achieved via these two directives:

+------------------------+
  <generateApplicationXml>true</generateApplicationXml>
  <applicationXml>\${project.build.directory}/application.xml</applicationXml>
+------------------------+

  The first line tells Maven to generate a new <<<application.xml>>> file, by default in the target directory.
  The second line tells Maven to use it.
