  ---
  Including Module Sources
  ---
  John Casey
  ---
  05-May-2006
  ---
  
~~ 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/guides/mini/guide-apt-format.html
                                                                                                                        
Including Module Sources

* Introduction

  It is common practice to create an assembly using the parent POM of a
  multimodule build. At times, you may want to ensure that this assembly also
  includes the source code from one or more of the modules in this build.
  
  This example demonstrates how to include the project sources from a module in
  the project assembly, under the directory <<<sources/\<module-name\>>>>.
  
* The Assembly Descriptor

  First, let's write an assembly descriptor to create this assembly. For the
  sake of clarity, this descriptor will be as simple as possible, only
  demonstrating the features described by this example.
  
+---+
<assembly>
  <id>src</id>
  <formats>
    <format>dir</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <includes>
        <include>org.test:child1</include>
      </includes>
      <sources>
        <outputDirectory>sources/${artifactId}</outputDirectory>
      </sources>
    </moduleSet>
  </moduleSets>
</assembly>
+---+

  This descriptor states that the assembly id should be <<<src>>>, that the
  output format is a directory, and that the contents of the assembly should
  <<not>> be contained within a directory named after the finalName of the 
  top-level project.
  
  Furthermore, it states that we wish to include the source files for the module
  with a groupId of <<<org.test>>> and an artifactId of <<<child1>>>. These
  sources should be contained within the directory structure
  <<<sources/child1>>> for this module, since the outputDirectory expression
  will be interpolated on a module-by-module basis.
  
* The POM

  Now, let's review the POM configuration necessary to enable the building of
  this assembly via the <assembly:directory> mojo:
  
+---+
<?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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.test</groupId>
  <artifactId>parent</artifactId>
  <version>1.0</version>
  
  <packaging>pom</packaging>
  
  <name>Parent</name>

  <modules>
    <module>child1</module>
    <module>child2</module>
    <module>child3</module>
  </modules>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>src/assemble/src.xml</descriptor>
          </descriptors>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
+---+

  This POM simply directs the Assembly Plugin to use the <<<src.xml>>>
  assembly descriptor when executing.
  
* Execute!

  To build the assembly, we issue the following command:
  
+---+
mvn clean assembly:directory
+---+

  This will ensure that the output directory (normally, <<<target>>>), is
  removed before building the assembly directory.
  
* Examining the Output

  When the Maven execution completes, the following directory structure should
  be left:
  
+---+
target/parent-1.0-src/
`-- sources
    `-- child1
        |-- pom.xml
        `-- src
            |-- main
            |   `-- java
            |       `-- org
            |           `-- test
            |               `-- App.java
            `-- test
                `-- java
                    `-- org
                        `-- test
                            `-- AppTest.java
+---+

