[MEAR-166] Handling EAR modules of all types when modifying Class-Path and when skinnyWars / skinnyModules is used (#33)

* [MEAR-166] - Removing EAR modules of all types when skinnyWars / skinnyModules is on. Updating reference to the EAR modules of all types in the Class-Path entry of MANIFEST.mf when modifying that entry.

* [MEAR-166] - Fixed typo and wording in documentation and JavaDoc.

* [MEAR-166] - Removal of Java 6 legacy and replacement of class with primitive type where primitive type is sufficient.
diff --git a/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java b/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java
index bb64744..2186b56 100644
--- a/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java
+++ b/src/main/java/org/apache/maven/plugins/ear/AbstractEarModule.java
@@ -101,6 +101,16 @@
      */

     protected String libDirectory;

 

+    /**

+     * If module is considered for inclusion into the Class-Path entry of MANIFEST.mf of other modules. {@code false}

+     * value leads to removal of the module from the Class-Path entry. {@code true} value leads to modification of the

+     * reference to the module in the Class-Path entry if such reference exists or leads to adding of the module into

+     * the Class-Path entry if such reference doesn't exist. Removal, modification or adding of the reference in the

+     * Class-Path entry depends on libDirectory property of another module and on skinnyWars / skinnyModules parameters

+     * of EAR Plugin.

+     */

+    protected boolean classPathItem;

+

     // This is injected once the module has been built.

 

     /**

@@ -264,9 +274,15 @@
     }

 

     /**

-     * Returns the bundle file name. If null, the artifact's file name is returned.

-     * 

-     * @return the bundle file name

+     * {@inheritDoc}

+     */

+    public boolean isClassPathItem()

+    {

+        return classPathItem;

+    }

+

+    /**

+     * {@inheritDoc}

      */

     public String getBundleFileName()

     {

@@ -416,25 +432,6 @@
     }

 

     /**

-     * Specify if the objects are both null or both equal.

-     * 

-     * @param first the first object

-     * @param second the second object

-     * @return true if parameters are either both null or equal

-     */

-    static boolean areNullOrEqual( Object first, Object second )

-    {

-        if ( first != null )

-        {

-            return first.equals( second );

-        }

-        else

-        {

-            return second == null;

-        }

-    }

-

-    /**

      * Sets the URI of the module explicitly for testing purposes.

      * 

      * @param uri the uri

diff --git a/src/main/java/org/apache/maven/plugins/ear/AbstractEarMojo.java b/src/main/java/org/apache/maven/plugins/ear/AbstractEarMojo.java
index e7083f6..db4be30 100644
--- a/src/main/java/org/apache/maven/plugins/ear/AbstractEarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/ear/AbstractEarMojo.java
@@ -167,9 +167,9 @@
 

     private List<EarModule> earModules;

 

-    private List<JarModule> allJarModules;

+    private List<EarModule> allEarModules;

 

-    private List<JarModule> providedJarModules;

+    private List<EarModule> providedEarModules;

 

     private JbossConfiguration jbossConfiguration;

 

@@ -272,9 +272,9 @@
 

         // Now we have everything let's built modules which have not been excluded

         ScopeArtifactFilter filter = new ScopeArtifactFilter( Artifact.SCOPE_RUNTIME );

-        allJarModules = new ArrayList<JarModule>();

-        providedJarModules = new ArrayList<JarModule>();

-        earModules = new ArrayList<EarModule>();

+        allEarModules = new ArrayList<>();

+        providedEarModules = new ArrayList<>();

+        earModules = new ArrayList<>();

         for ( EarModule earModule : allModules )

         {

             if ( earModule.isExcluded() )

@@ -283,18 +283,14 @@
             }

             else

             {

-                boolean isJarModule = earModule instanceof JarModule;

-                if ( isJarModule )

-                {

-                    allJarModules.add( (JarModule) earModule );

-                }

+                allEarModules.add( earModule );

                 if ( filter.include( earModule.getArtifact() ) )

                 {

                     earModules.add( earModule );

                 }

-                else if ( isJarModule )

+                else

                 {

-                    providedJarModules.add( (JarModule) earModule );

+                    providedEarModules.add( earModule );

                 }

             }

         }

@@ -314,27 +310,27 @@
     }

 

     /**

-     * @return The list of {@link #allJarModules}. This corresponds to all JAR modules (compile + runtime).

+     * @return The list of {@link #allEarModules}. This corresponds to all modules (provided + compile + runtime).

      */

-    protected List<JarModule> getAllJarModules()

+    protected List<EarModule> getAllEarModules()

     {

-        if ( allJarModules == null )

+        if ( allEarModules == null )

         {

-            throw new IllegalStateException( "Jar modules have not been initialized" );

+            throw new IllegalStateException( "EAR modules have not been initialized" );

         }

-        return allJarModules;

+        return allEarModules;

     }

 

     /**

-     * @return the list of {@link #providedJarModules}. This corresponds to provided JAR modules.

+     * @return the list of {@link #providedEarModules}. This corresponds to provided modules.

      */

-    protected List<JarModule> getProvidedJarModules()

+    protected List<EarModule> getProvidedEarModules()

     {

-        if ( providedJarModules == null )

+        if ( providedEarModules == null )

         {

             throw new IllegalStateException( "Jar modules have not been initialized" );

         }

-        return providedJarModules;

+        return providedEarModules;

     }

 

     /**

diff --git a/src/main/java/org/apache/maven/plugins/ear/EarModule.java b/src/main/java/org/apache/maven/plugins/ear/EarModule.java
index 4c9324a..4efd962 100644
--- a/src/main/java/org/apache/maven/plugins/ear/EarModule.java
+++ b/src/main/java/org/apache/maven/plugins/ear/EarModule.java
@@ -119,4 +119,17 @@
      */

     String getLibDir();

 

+    /**

+     * Returns the bundle file name. If {@code null}, the artifact's file name is returned.

+     *

+     * @return the bundle file name

+     */

+    String getBundleFileName();

+

+    /**

+     * If module should be included into the Class-Path entry of MANIFEST.mf. Doesn't impact Class-Path entry of

+     * MANIFEST.mf of modules which contain all of their dependencies unless skinnyWars / skinnyModules is turned on.

+     */

+    boolean isClassPathItem();

+

 }

diff --git a/src/main/java/org/apache/maven/plugins/ear/EarMojo.java b/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
index 0ffdd6f..3713c19 100644
--- a/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
@@ -839,9 +839,13 @@
 

             if ( ( moduleLibDir != null ) && ( skinnyModules || ( skinnyWars && module instanceof WebModule ) ) )

             {

-                // Remove JAR modules

-                for ( JarModule jm : getAllJarModules() )

+                // Remove modules

+                for ( EarModule otherModule : getAllEarModules() )

                 {

+                    if ( module.equals( otherModule ) )

+                    {

+                        continue;

+                    }

                     // MEAR-189:

                     // We use the original name, cause in case of outputFileNameMapping

                     // we could not not delete it and it will end up in the resulting EAR and the WAR

@@ -856,34 +860,35 @@
                     if ( !artifact.exists() )

                     {

                         getLog().debug( "module does not exist with original file name." );

-                        artifact = new File( workLibDir, jm.getBundleFileName() );

+                        artifact = new File( workLibDir, otherModule.getBundleFileName() );

                         getLog().debug( "Artifact with mapping: " + artifact.getAbsolutePath() );

                     }

 

                     if ( !artifact.exists() )

                     {

                         getLog().debug( "Artifact with mapping does not exist." );

-                        artifact = new File( workLibDir, jm.getArtifact().getFile().getName() );

+                        artifact = new File( workLibDir, otherModule.getArtifact().getFile().getName() );

                         getLog().debug( "Artifact with original file name: " + artifact.getAbsolutePath() );

                     }

 

                     if ( !artifact.exists() )

                     {

                         getLog().debug( "Artifact with original file name does not exist." );

-                        final Artifact jmArtifact = jm.getArtifact();

-                        if ( jmArtifact.isSnapshot() )

+                        final Artifact otherModuleArtifact = otherModule.getArtifact();

+                        if ( otherModuleArtifact.isSnapshot() )

                         {

                             try

                             {

-                                artifact = new File( workLibDir, MappingUtils

-                                    .evaluateFileNameMapping( ARTIFACT_DEFAULT_FILE_NAME_MAPPING, jmArtifact ) );

+                                artifact = new File( workLibDir, MappingUtils.evaluateFileNameMapping(

+                                        ARTIFACT_DEFAULT_FILE_NAME_MAPPING, otherModuleArtifact ) );

                                 getLog()

                                     .debug( "Artifact with default mapping file name: " + artifact.getAbsolutePath() );

                             }

                             catch ( InterpolationException e )

                             {

-                                getLog().warn( "Failed to evaluate file name for [" + jm + "] module using mapping: "

-                                    + ARTIFACT_DEFAULT_FILE_NAME_MAPPING );

+                                getLog().warn(

+                                    "Failed to evaluate file name for [" + otherModule + "] module using mapping: "

+                                        + ARTIFACT_DEFAULT_FILE_NAME_MAPPING );

                             }

                         }

                     }

@@ -900,28 +905,37 @@
             }

 

             // Modify the classpath entries in the manifest

-            boolean forceClassPathModification = javaEEVersion.lt( JavaEEVersion.FIVE ) || defaultLibBundleDir == null;

-            for ( EarModule o : getModules() )

+            final boolean forceClassPathModification =

+                javaEEVersion.lt( JavaEEVersion.FIVE ) || defaultLibBundleDir == null;

+            final boolean classPathExtension = !skipClassPathModification || forceClassPathModification;

+            for ( EarModule otherModule : getModules() )

             {

-                if ( o instanceof JarModule )

+                if ( module.equals( otherModule ) )

                 {

-                    JarModule jm = (JarModule) o;

-                    final int moduleClassPathIndex = findModuleInClassPathElements( classPathElements, jm );

-                    if ( moduleClassPathIndex != -1 )

+                    continue;

+                }

+                final int moduleClassPathIndex = findModuleInClassPathElements( classPathElements, otherModule );

+                if ( moduleClassPathIndex != -1 )

+                {

+                    if ( otherModule.isClassPathItem() )

                     {

-                        classPathElements.set( moduleClassPathIndex, jm.getUri() );

+                        classPathElements.set( moduleClassPathIndex, otherModule.getUri() );

                     }

-                    else if ( !skipClassPathModification || forceClassPathModification )

+                    else

                     {

-                        classPathElements.add( jm.getUri() );

+                        classPathElements.remove( moduleClassPathIndex );

                     }

                 }

+                else if ( otherModule.isClassPathItem() && classPathExtension )

+                {

+                    classPathElements.add( otherModule.getUri() );

+                }

             }

 

-            // Remove provided Jar modules from classpath

-            for ( JarModule jm : getProvidedJarModules() )

+            // Remove provided modules from classpath

+            for ( EarModule otherModule : getProvidedEarModules() )

             {

-                final int moduleClassPathIndex = findModuleInClassPathElements( classPathElements, jm );

+                final int moduleClassPathIndex = findModuleInClassPathElements( classPathElements, otherModule );

                 if ( moduleClassPathIndex != -1 )

                 {

                     classPathElements.remove( moduleClassPathIndex );

@@ -1022,7 +1036,7 @@
      * @return -1 if {@code module} was not found in {@code classPathElements} or index of item of

      * {@code classPathElements} which matches {@code module}

      */

-    private int findModuleInClassPathElements( final List<String> classPathElements, final JarModule module )

+    private int findModuleInClassPathElements( final List<String> classPathElements, final EarModule module )

     {

         if ( classPathElements.isEmpty() )

         {

diff --git a/src/main/java/org/apache/maven/plugins/ear/JarModule.java b/src/main/java/org/apache/maven/plugins/ear/JarModule.java
index 9f9f318..ccdef84 100644
--- a/src/main/java/org/apache/maven/plugins/ear/JarModule.java
+++ b/src/main/java/org/apache/maven/plugins/ear/JarModule.java
@@ -51,6 +51,7 @@
     public JarModule()

     {

         this.type = DEFAULT_ARTIFACT_TYPE;

+        this.classPathItem = true;

     }

 

     /**

@@ -63,7 +64,7 @@
         super( a );

         setLibBundleDir( defaultLibBundleDir );

         this.includeInApplicationXml = includeInApplicationXml;

-

+        this.classPathItem = true;

     }

 

     /**

diff --git a/src/site/apt/index.apt.vm b/src/site/apt/index.apt.vm
index 9b24c40..43f8f80 100644
--- a/src/site/apt/index.apt.vm
+++ b/src/site/apt/index.apt.vm
@@ -65,8 +65,9 @@
 
 * Version 3.2.0
 
-  {{{./ear-mojo.html#skinnyModules}skinnyModules}} parameter and libDirectory property
-  of EAR modules have been implemented.
+  {{{./ear-mojo.html#skinnyModules}skinnyModules}} parameter, <<<libDirectory>>> property
+  of EAR modules, <<<type>>> property of EAR modules and <<<classPathItem>>> property of
+  EAR modules have been implemented.
 
 * Version 3.0.0
 
diff --git a/src/site/apt/modules.apt.vm b/src/site/apt/modules.apt.vm
index e0f8362..488f9a9 100644
--- a/src/site/apt/modules.apt.vm
+++ b/src/site/apt/modules.apt.vm
@@ -141,6 +141,13 @@
   setting in module <<<MANIFEST.MF>>> is modified and libraries of module located in
   <<<libDirectory>>> and matching libraries of EAR are removed from module.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is true. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {ejbModule} Properties
 
@@ -180,6 +187,13 @@
 
   * <<libDirectory>> - refer to the same name property of {{{ejbClientModule}ejbClientModule}}.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {jarModule} Properties
 
@@ -220,6 +234,50 @@
   * <<includeInApplicationXml>> - set to true to if you want to generate an entry
   of this module in <<<application.xml>>>. Default is false.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is true.
+
+  The module is removed from the <<<Class-Path>>> setting of <<<MANIFEST.MF>>> of another module
+  if the <<<classPathItem>>> property is false and one of the following conditions is met:
+
+    * Another module doesn't contain all of its dependencies (refer to the <<<libDirectory>>>
+    property of particular module type).
+
+    * {{{./ear-mojo.html#skinnyWars}skinnyWars}} parameter is true and another module is
+    a {{{webModule}webModule}}.
+
+    * {{{./ear-mojo.html#skinnyModules}skinnyModules}} parameter is true.
+
+  Existing reference to the module in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of another module is updated to match location of the module in EAR if
+  the <<<classPathItem>>> property is true and one of the following conditions is met:
+
+    * Another module doesn't contain all of its dependencies (refer to the <<<libDirectory>>>
+    property of particular module type).
+
+    * {{{./ear-mojo.html#skinnyWars}skinnyWars}} parameter is true and another module is
+    a {{{webModule}webModule}}.
+
+    * {{{./ear-mojo.html#skinnyModules}skinnyModules}} parameter is true.
+
+  The module is added into the <<<Class-Path>>> setting of another module
+  if the <<<classPathItem>>> is true, there is no existing reference to the module
+  in the <<<Class-Path>>> setting and one of the following conditions is met:
+
+    * {{{./ear-mojo.html#skinnyWars}skinnyWars}} parameter is true, another module is
+    a {{{webModule}webModule}} and one of the following conditions is met:
+
+      * {{{./ear-mojo.html#skipClassPathModification}skipClassPathModification}} parameter is false.
+
+      * {{{./ear-mojo.html#version}version}} parameter is less than 5.
+
+    * {{{./ear-mojo.html#skinnyModules}skinnyModules}} parameter is true and
+    one of the following conditions is met:
+
+      * {{{./ear-mojo.html#skipClassPathModification}skipClassPathModification}} parameter is false.
+
+      * {{{./ear-mojo.html#version}version}} parameter is less than 5.
+
 
 * {parModule} Properties
 
@@ -261,6 +319,13 @@
 
   * <<libDirectory>> - refer to the same name property of {{{ejbClientModule}ejbClientModule}}.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {rarModule} Properties
 
@@ -303,6 +368,13 @@
   at the root of archive. Refer to the same name property of
   {{{ejbClientModule}ejbClientModule}} for details.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {sarModule} Properties
 
@@ -343,6 +415,13 @@
   packaged into archive. Default is 'lib'. Refer to the same name property of
   {{{ejbClientModule}ejbClientModule}} for details.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {webModule} Properties
 
@@ -391,6 +470,13 @@
   setting in module <<<MANIFEST.MF>>> is modified and libraries of module located in
   <<<libDirectory>>> and matching libraries of EAR are removed from module.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {wsrModule} Properties
 
@@ -432,6 +518,13 @@
   packaged into archive. Default is 'lib'. Refer to the same name property of
   {{{ejbClientModule}ejbClientModule}} for details.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {harModule} Properties
 
@@ -470,6 +563,13 @@
   packaged into archive. Default is 'lib'. Refer to the same name property of
   {{{ejbClientModule}ejbClientModule}} for details.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * {appClientModule} Properties
 
@@ -507,6 +607,13 @@
 
   * <<moduleId>> - sets the id of the module in the generated application.xml.
 
+  * <<classPathItem>> - defines if the module is an element of the <<<Class-Path>>> setting
+  of <<<MANIFEST.MF>>> of other modules. Default is false. Refer to the <<<classPathItem>>>
+  property of {{{jarModule}jarModule}} for the cases when the module is removed from
+  the <<<Class-Path>>> setting or added into the <<<Class-Path>>> setting or existing
+  reference to the module is updated in the <<<Class-Path>>> setting of <<<MANIFEST.MF>>>
+  of other modules.
+
 
 * Adding {Custom Artifact Types}
 
diff --git a/src/test/java/org/apache/maven/plugins/ear/it/EarMojoIT.java b/src/test/java/org/apache/maven/plugins/ear/it/EarMojoIT.java
index 3bd317c..af49067 100644
--- a/src/test/java/org/apache/maven/plugins/ear/it/EarMojoIT.java
+++ b/src/test/java/org/apache/maven/plugins/ear/it/EarMojoIT.java
@@ -1232,4 +1232,72 @@
         final boolean[] artifactsDirectory = { false, false, false, false };

         doTestProject( "project-097", "ear", artifacts, artifactsDirectory, null, null, null , true );

     }

+

+    /**

+     * Ensures that when skinnyModules option is turned on then

+     * <ul>

+     * <li>EAR module whose classPathItem property is {@code false} is removed from the Class-Path entry of

+     * MANIFEST.mf of other modules</li>

+     * <li>EAR module whose classPathItem property is {@code true} is added into the Class-Path entry of MANIFEST.mf

+     * or existing reference is updated to match location of the module</li>

+     * <li>EAR module is removed from WARs and RARs (from modules which include their dependencies)</li>

+     * </ul>

+     */

+    public void testProject098()

+        throws Exception

+    {

+        final String projectName = "project-098";

+        final String earModuleName = "ear";

+        final String jarSampleOneLibrary = "jar-sample-one-1.0.jar";

+        final String jarSampleTwoLibrary = "jar-sample-two-1.0.jar";

+        final String jarSampleThreeLibrary = "jar-sample-three-with-deps-1.0.jar";

+        final String ejbFourClientLibrary = "ejb-sample-four-1.0-client.jar";

+        final String jarSampleOneEarLibrary = "lib/eartest-" + jarSampleOneLibrary;

+        final String jarSampleTwoEarLibrary = "lib/eartest-" + jarSampleTwoLibrary;

+        final String jarSampleThreeEarLibrary = "lib/eartest-" + jarSampleThreeLibrary;

+        final String ejbFourClientEarLibrary = "lib/eartest-" + ejbFourClientLibrary;

+        final String ejbThreeLibrary = "ejb-sample-three-1.0.jar";

+        final String ejbFourLibrary = "ejb-sample-four-1.0.jar";

+        final String ejbThreeModule = "eartest-" + ejbThreeLibrary;

+        final String ejbFourModule = "eartest-" + ejbFourLibrary;

+        final String rarLibrary = "rar-sample-one-1.0.rar";

+        final String rarModule = "eartest-" + rarLibrary;

+        final String warModule = "eartest-war-sample-three-1.0.war";

+        final String[] earModules = { ejbThreeModule, ejbFourModule, rarModule, warModule };

+        final boolean[] earModuleDirectory = { false, false, false, false };

+        final String warModuleLibDir = "WEB-INF/lib/";

+        final String rarModuleLibDir = "";

+

+        final File baseDir = doTestProject( projectName, earModuleName,

+            new String[] { ejbThreeModule, ejbFourModule, rarModule, warModule,

+                jarSampleOneEarLibrary, jarSampleTwoEarLibrary, jarSampleThreeEarLibrary, ejbFourClientEarLibrary },

+            new boolean[] { false, false, false, false, false, false, false, false },

+            earModules, earModuleDirectory,

+            new String[][] {

+                { jarSampleThreeEarLibrary, jarSampleTwoEarLibrary, ejbFourClientEarLibrary, jarSampleOneEarLibrary },

+                { jarSampleOneEarLibrary, jarSampleTwoEarLibrary, jarSampleThreeEarLibrary, ejbFourClientEarLibrary },

+                { jarSampleThreeEarLibrary, jarSampleTwoEarLibrary, jarSampleOneEarLibrary, ejbFourClientEarLibrary },

+                { jarSampleOneEarLibrary, jarSampleThreeEarLibrary, jarSampleTwoEarLibrary, ejbFourClientEarLibrary } },

+            true );

+

+        assertEarModulesContent( baseDir, projectName, earModuleName, earModules, earModuleDirectory,

+            new String[][] { null, null, null, { warModuleLibDir } },

+            new String[][] { null, null,

+                {

+                    rarModuleLibDir + jarSampleTwoLibrary,

+                    rarModuleLibDir + jarSampleThreeLibrary,

+                    rarModuleLibDir + ejbFourLibrary,

+                    rarModuleLibDir + ejbFourClientLibrary,

+                },

+                {

+                    warModuleLibDir + jarSampleOneLibrary,

+                    rarModuleLibDir + jarSampleThreeLibrary,

+                    rarModuleLibDir + jarSampleTwoLibrary,

+                    warModuleLibDir + ejbThreeLibrary,

+                    warModuleLibDir + ejbFourLibrary,

+                    warModuleLibDir + ejbFourClientLibrary,

+                    warModuleLibDir + rarLibrary,

+                    warModuleLibDir + rarLibrary

+                } } );

+    }

 }

diff --git a/src/test/resources/projects/project-098/ear/expected-META-INF/application.xml b/src/test/resources/projects/project-098/ear/expected-META-INF/application.xml
new file mode 100644
index 0000000..a7a9475
--- /dev/null
+++ b/src/test/resources/projects/project-098/ear/expected-META-INF/application.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" version="6">
+  <display-name>maven-ear-plugin-test-project-098</display-name>
+  <module>
+    <ejb>eartest-ejb-sample-three-1.0.jar</ejb>
+  </module>
+  <module>
+    <ejb>eartest-ejb-sample-four-1.0.jar</ejb>
+  </module>
+  <module>
+    <connector>eartest-rar-sample-one-1.0.rar</connector>
+  </module>
+  <module>
+    <web>
+      <web-uri>eartest-war-sample-three-1.0.war</web-uri>
+      <context-root>/war-sample-three</context-root>
+    </web>
+  </module>
+  <library-directory>lib</library-directory>
+</application>
diff --git a/src/test/resources/projects/project-098/ear/pom.xml b/src/test/resources/projects/project-098/ear/pom.xml
new file mode 100644
index 0000000..f4675b6
--- /dev/null
+++ b/src/test/resources/projects/project-098/ear/pom.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>
+  <parent>
+    <groupId>ear</groupId>
+    <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+    <version>99.0</version>
+  </parent>
+  <artifactId>maven-ear-plugin-test-project-098</artifactId>
+  <packaging>ear</packaging>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.jboss.spec.javax.servlet</groupId>
+        <artifactId>jboss-servlet-api_3.0_spec</artifactId>
+        <version>${jboss-servlet-api_3.0_spec.version}</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.jboss.spec.javax.ejb</groupId>
+        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
+        <version>${jboss-ejb-api_3.1_spec.version}</version>
+        <scope>provided</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <dependencies>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-one</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-two</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-three-with-deps</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>ejb-sample-three</artifactId>
+      <type>ejb</type>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>ejb-sample-four</artifactId>
+      <type>ejb</type>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>rar-sample-one</artifactId>
+      <type>rar</type>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>war-sample-three</artifactId>
+      <type>war</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-ear-plugin</artifactId>
+        <version>@project.version@</version>
+        <configuration>
+          <version>6</version>
+          <defaultLibBundleDir>lib</defaultLibBundleDir>
+          <skinnyModules>true</skinnyModules>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/ejb-one/pom.xml b/src/test/resources/projects/project-098/ejb-one/pom.xml
new file mode 100644
index 0000000..bb4c723
--- /dev/null
+++ b/src/test/resources/projects/project-098/ejb-one/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>
+  <parent>
+    <groupId>ear</groupId>
+    <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+    <version>99.0</version>
+  </parent>
+  <groupId>eartest</groupId>
+  <artifactId>ejb-sample-three</artifactId>
+  <version>1.0</version>
+  <packaging>ejb</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>org.jboss.spec.javax.ejb</groupId>
+      <artifactId>jboss-ejb-api_3.1_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-three-with-deps</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>ejb-sample-four</artifactId>
+      <type>ejb-client</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-ejb-plugin</artifactId>
+        <configuration>
+          <ejbVersion>3.1</ejbVersion>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/ejb-one/src/main/java/eartest/Stub.java b/src/test/resources/projects/project-098/ejb-one/src/main/java/eartest/Stub.java
new file mode 100644
index 0000000..b8b0059
--- /dev/null
+++ b/src/test/resources/projects/project-098/ejb-one/src/main/java/eartest/Stub.java
@@ -0,0 +1,22 @@
+package eartest;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+public class Stub {}
diff --git a/src/test/resources/projects/project-098/ejb-two/pom.xml b/src/test/resources/projects/project-098/ejb-two/pom.xml
new file mode 100644
index 0000000..9b3f271
--- /dev/null
+++ b/src/test/resources/projects/project-098/ejb-two/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>
+  <parent>
+    <groupId>ear</groupId>
+    <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+    <version>99.0</version>
+  </parent>
+  <groupId>eartest</groupId>
+  <artifactId>ejb-sample-four</artifactId>
+  <version>1.0</version>
+  <packaging>ejb</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>org.jboss.spec.javax.ejb</groupId>
+      <artifactId>jboss-ejb-api_3.1_spec</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-two</artifactId>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-ejb-plugin</artifactId>
+        <configuration>
+          <ejbVersion>3.1</ejbVersion>
+          <generateClient>true</generateClient>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/ejb-two/src/main/java/eartest/Stub.java b/src/test/resources/projects/project-098/ejb-two/src/main/java/eartest/Stub.java
new file mode 100644
index 0000000..b8b0059
--- /dev/null
+++ b/src/test/resources/projects/project-098/ejb-two/src/main/java/eartest/Stub.java
@@ -0,0 +1,22 @@
+package eartest;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.
+ */
+
+public class Stub {}
diff --git a/src/test/resources/projects/project-098/pom.xml b/src/test/resources/projects/project-098/pom.xml
new file mode 100644
index 0000000..56570bc
--- /dev/null
+++ b/src/test/resources/projects/project-098/pom.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>ear</groupId>
+  <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+  <version>99.0</version>
+  <packaging>pom</packaging>
+  <modules>
+    <module>ejb-one</module>
+    <module>ejb-two</module>
+    <module>rar</module>
+    <module>war</module>
+    <module>ear</module>
+  </modules>
+  <properties>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
+    <jboss-servlet-api_3.0_spec.version>1.0.2.Final</jboss-servlet-api_3.0_spec.version>
+    <jboss-ejb-api_3.1_spec.version>1.0.2.Final</jboss-ejb-api_3.1_spec.version>
+  </properties>
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.jboss.spec.javax.servlet</groupId>
+        <artifactId>jboss-servlet-api_3.0_spec</artifactId>
+        <version>${jboss-servlet-api_3.0_spec.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.jboss.spec.javax.ejb</groupId>
+        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
+        <version>${jboss-ejb-api_3.1_spec.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>jar-sample-one</artifactId>
+        <version>1.0</version>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>jar-sample-two</artifactId>
+        <version>1.0</version>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>jar-sample-three-with-deps</artifactId>
+        <version>1.0</version>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>ejb-sample-three</artifactId>
+        <version>1.0</version>
+        <type>ejb</type>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>ejb-sample-four</artifactId>
+        <version>1.0</version>
+        <type>ejb</type>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>ejb-sample-four</artifactId>
+        <version>1.0</version>
+        <type>ejb-client</type>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>rar-sample-one</artifactId>
+        <version>1.0</version>
+        <type>rar</type>
+      </dependency>
+      <dependency>
+        <groupId>eartest</groupId>
+        <artifactId>war-sample-three</artifactId>
+        <version>1.0</version>
+        <type>war</type>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>@mavenCompilerPluginVersion@</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-ejb-plugin</artifactId>
+          <version>@mavenEjbPluginVersion@</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-rar-plugin</artifactId>
+          <version>@mavenRarPluginVersion@</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-war-plugin</artifactId>
+          <version>@mavenWarPluginVersion@</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/rar/pom.xml b/src/test/resources/projects/project-098/rar/pom.xml
new file mode 100644
index 0000000..8757ce9
--- /dev/null
+++ b/src/test/resources/projects/project-098/rar/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>
+  <parent>
+    <groupId>ear</groupId>
+    <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+    <version>99.0</version>
+  </parent>
+  <groupId>eartest</groupId>
+  <artifactId>rar-sample-one</artifactId>
+  <version>1.0</version>
+  <packaging>rar</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-three-with-deps</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>ejb-sample-four</artifactId>
+      <type>ejb</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-rar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/rar/src/main/rar/META-INF/ra.xml b/src/test/resources/projects/project-098/rar/src/main/rar/META-INF/ra.xml
new file mode 100644
index 0000000..c84c609
--- /dev/null
+++ b/src/test/resources/projects/project-098/rar/src/main/rar/META-INF/ra.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<connector>
+  <fake-content></fake-content>
+</connector>
diff --git a/src/test/resources/projects/project-098/rar/src/main/rar/SomeResource.txt b/src/test/resources/projects/project-098/rar/src/main/rar/SomeResource.txt
new file mode 100644
index 0000000..b74423f
--- /dev/null
+++ b/src/test/resources/projects/project-098/rar/src/main/rar/SomeResource.txt
@@ -0,0 +1,16 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
diff --git a/src/test/resources/projects/project-098/war/pom.xml b/src/test/resources/projects/project-098/war/pom.xml
new file mode 100644
index 0000000..1112d26
--- /dev/null
+++ b/src/test/resources/projects/project-098/war/pom.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+
+<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>
+  <parent>
+    <groupId>ear</groupId>
+    <artifactId>maven-ear-plugin-test-project-098-parent</artifactId>
+    <version>99.0</version>
+  </parent>
+  <groupId>eartest</groupId>
+  <artifactId>war-sample-three</artifactId>
+  <version>1.0</version>
+  <packaging>war</packaging>
+  <dependencies>
+    <dependency>
+      <groupId>org.jboss.spec.javax.servlet</groupId>
+      <artifactId>jboss-servlet-api_3.0_spec</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>jar-sample-one</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>eartest</groupId>
+      <artifactId>ejb-sample-three</artifactId>
+      <type>ejb</type>
+    </dependency>
+  </dependencies>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-war-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/test/resources/projects/project-098/war/src/main/webapp/WEB-INF/web.xml b/src/test/resources/projects/project-098/war/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..fbbf307
--- /dev/null
+++ b/src/test/resources/projects/project-098/war/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+         version="3.0">
+</web-app>