  ------
  Generating modules ID
  ------
  Stephane Nicoll
  <snicoll@apache.org>
  ------
  2010-09-04

~~ Copyright 2006 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


Generating modules ID

  Some environment requires an ID to be generated for each module defined in the <<application.xml>>. Enabling
  the automatic IDs generation can be done as follows:

+--------
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
           [...]
           <generateModuleId>true</generateModuleId>
        </configuration>
      </plugin>
    </plugins>
  </build>
+---------

  As a result, each module defined in the <<application.xml>> will have an ID unless an ID was provided in the
  configuration. To provide an explicit ID for a given module, use the <<moduleId>> attribute; for instance:

+--------
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
           [...]
           <modules>
             <ejbModule>
               <groupId>artifactGroupId</groupId>
               <artifactId>artifactId</artifactId>
               <moduleId>some-id</moduleId>
             </ejbModule>
          </modules>
        </configuration>
      </plugin>
    </plugins>
  </build>
+---------
