diff --git a/pom.xml b/pom.xml
index c6b9207..8607f9c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
     <javaVersion>7</javaVersion>
     <surefire.version>2.22.2</surefire.version>
     <project.build.outputTimestamp>2020-09-26T20:10:30Z</project.build.outputTimestamp>
-    <mavenWarPluginVersion>2.1.1</mavenWarPluginVersion>
+    <mavenWarPluginVersion>3.3.1</mavenWarPluginVersion>
     <mavenCompilerPluginVersion>2.5.1</mavenCompilerPluginVersion>
     <mavenEjbPluginVersion>2.3</mavenEjbPluginVersion>
     <mavenRarPluginVersion>2.4</mavenRarPluginVersion>
@@ -94,6 +94,7 @@
     <invoker.skip>false</invoker.skip>
     <invoker.install.skip>${invoker.skip}</invoker.install.skip>
     <invoker.it.skip>${invoker.skip}</invoker.it.skip>
+    <invoker.cloneClean>true</invoker.cloneClean>
   </properties>
 
   <dependencies>
@@ -158,6 +159,12 @@
       <version>3.3.3</version>
     </dependency>
     <dependency>
+      <groupId>org.sonatype.sisu</groupId>
+      <artifactId>sisu-inject-plexus</artifactId>
+      <version>1.4.3.2</version>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-verifier</artifactId>
       <version>1.6</version>
@@ -181,12 +188,6 @@
       <version>4.13.1</version>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <version>2.28.2</version>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
@@ -293,6 +294,7 @@
               </extraArtifacts>
               <skipInstallation>${invoker.install.skip}</skipInstallation>
               <skipInvocation>${invoker.it.skip}</skipInvocation>
+              <cloneClean>${invoker.cloneClean}</cloneClean>
             </configuration>
           </plugin>
           <plugin>
diff --git a/src/it/MEAR-243-skinny-wars-provided/war-module/pom.xml b/src/it/MEAR-243-skinny-wars-provided/war-module/pom.xml
index c6be50e..9604026 100644
--- a/src/it/MEAR-243-skinny-wars-provided/war-module/pom.xml
+++ b/src/it/MEAR-243-skinny-wars-provided/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/filenamemapping-usage-fail/war-module/pom.xml b/src/it/filenamemapping-usage-fail/war-module/pom.xml
index c6be50e..9604026 100644
--- a/src/it/filenamemapping-usage-fail/war-module/pom.xml
+++ b/src/it/filenamemapping-usage-fail/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/non-skinny-wars/war-module/pom.xml b/src/it/non-skinny-wars/war-module/pom.xml
index 10c4b6c..58254c1 100644
--- a/src/it/non-skinny-wars/war-module/pom.xml
+++ b/src/it/non-skinny-wars/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-filenamemapping-full/war-module/pom.xml b/src/it/skinny-wars-filenamemapping-full/war-module/pom.xml
index c6be50e..9604026 100644
--- a/src/it/skinny-wars-filenamemapping-full/war-module/pom.xml
+++ b/src/it/skinny-wars-filenamemapping-full/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-filenamemapping-no-version/war-module/pom.xml b/src/it/skinny-wars-filenamemapping-no-version/war-module/pom.xml
index c6be50e..9604026 100644
--- a/src/it/skinny-wars-filenamemapping-no-version/war-module/pom.xml
+++ b/src/it/skinny-wars-filenamemapping-no-version/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-javaee5/war-module/pom.xml b/src/it/skinny-wars-javaee5/war-module/pom.xml
index ab808a3..9604026 100644
--- a/src/it/skinny-wars-javaee5/war-module/pom.xml
+++ b/src/it/skinny-wars-javaee5/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>3.1.0</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-timestamp/ear-module/pom.xml b/src/it/skinny-wars-timestamp/ear-module/pom.xml
index 7da0166..f279c71 100644
--- a/src/it/skinny-wars-timestamp/ear-module/pom.xml
+++ b/src/it/skinny-wars-timestamp/ear-module/pom.xml
@@ -40,7 +40,13 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven.its.ear.skinnywars</groupId>
-      <artifactId>war-module</artifactId>
+      <artifactId>war-module-one</artifactId>
+      <version>1.0</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.its.ear.skinnywars</groupId>
+      <artifactId>war-module-two</artifactId>
       <version>1.0</version>
       <type>war</type>
     </dependency>
diff --git a/src/it/skinny-wars-timestamp/pom.xml b/src/it/skinny-wars-timestamp/pom.xml
index b1c8946..4980a14 100644
--- a/src/it/skinny-wars-timestamp/pom.xml
+++ b/src/it/skinny-wars-timestamp/pom.xml
@@ -30,8 +30,8 @@
   <description>Test Skinny WAR generation</description>
 
   <modules>
-      <module>ear-module</module>
-      <module>war-module</module>
+    <module>ear-module</module>
+    <module>war-module-one</module>
+    <module>war-module-two</module>
   </modules>
-  
 </project>
diff --git a/src/it/skinny-wars-timestamp/verify.bsh b/src/it/skinny-wars-timestamp/verify.bsh
index f9a7270..3b9307d 100644
--- a/src/it/skinny-wars-timestamp/verify.bsh
+++ b/src/it/skinny-wars-timestamp/verify.bsh
@@ -20,78 +20,108 @@
 import java.io.*;
 import java.util.*;
 import java.util.jar.*;
-import java.util.regex.*;
 
-File jarFile = new File( basedir, "ear-module/target/ear-module-1.0/org.apache.maven.its.ear.skinnywars-war-module-1.0.war" );
-System.out.println( "Checking for existence of " + jarFile );
-if ( !jarFile.isFile() )
+assertFileExists( File file )
 {
-    throw new IllegalStateException( "Missing file: " + jarFile );
-}
-
-JarFile jar = new JarFile( jarFile );
-
-String[] includedEntries = {
-    "WEB-INF/web.xml",
-    "META-INF/MANIFEST.MF"
-};
-for ( String included : includedEntries )
-{
-    System.out.println( "Checking for included archive entry " + included );
-    if ( jar.getEntry( included ) == null )
+    System.out.println( "Checking for existence of " + file );
+    if ( !file.isFile() )
     {
-        throw new IllegalStateException( "Missing archive entry: " + included );
+        throw new IllegalStateException( "Missing file: " + file );
     }
 }
 
-Manifest manifest = jar.getManifest();
-String manifestClassPath = manifest.getMainAttributes().getValue("Class-Path");
-System.out.println( "manifestClassPath: " + manifestClassPath );
-if ( !manifestClassPath.equals("commons-lang-commons-lang-2.5.jar eartest-jar-sample-one-1.0-20150825.210557-91.jar") )
+assertIncludes( File file, String[] includedEntries )
 {
-    throw new IllegalStateException( "Missing entry in war MANIFEST.MF: commons-lang-commons-lang-2.5.jar eartest-jar-sample-one-1.0-20150825.210557-91.jar");
-}
-
-String[] excludedEntries = {
-    "WEB-INF/lib/commons-lang-2.5.jar",
-    "WEB-INF/lib/jar-sample-one-1.0-SNAPSHOT.jar"
-};
-for ( String excluded : excludedEntries )
-{
-    System.out.println( "Checking for excluded artifact " + excluded );
-    if ( jar.getEntry( excluded ) != null )
+    JarFile jar = new JarFile( file );
+    try
     {
-        throw new IllegalStateException( "Archive entry should be excluded: " + excluded );
+        for ( String included : includedEntries )
+        {
+            System.out.println( "Checking for included archive entry " + included );
+            if ( jar.getEntry( included ) == null )
+            {
+                throw new IllegalStateException( "Missing archive entry: " + included );
+            }
+        }
+    }
+    finally
+    {
+        jar.close();
     }
 }
 
-jar.close();
-
-
-File jarFile = new File( basedir, "war-module/target/war-module-1.0.war" );
-System.out.println( "Checking for existence of " + jarFile );
-if ( !jarFile.isFile() )
+assertExcludes( File file, String[] excludedEntries )
 {
-    throw new IllegalStateException( "Missing file: " + jarFile );
-}
-
-JarFile jar = new JarFile( jarFile );
-
-String[] includedEntries = {
-    "WEB-INF/web.xml",
-    "META-INF/MANIFEST.MF",
-    "WEB-INF/lib/commons-lang-2.5.jar",
-    "WEB-INF/lib/jar-sample-one-1.0-20150825.210557-91.jar"
-};
-for ( String included : includedEntries )
-{
-    System.out.println( "Checking for included archive entry " + included );
-    if ( jar.getEntry( included ) == null )
+    JarFile jar = new JarFile( file );
+    try
     {
-        throw new IllegalStateException( "Missing archive entry: " + included );
+        for ( String excluded : excludedEntries )
+        {
+            System.out.println( "Checking for excluded artifact " + excluded );
+            if ( jar.getEntry( excluded ) != null )
+            {
+                throw new IllegalStateException( "Archive entry should be excluded: " + excluded );
+            }
+        }
+    }
+    finally
+    {
+        jar.close();
     }
 }
 
-jar.close();
+assertManifestClassPath( File file, String classPath )
+{
+    JarFile jar = new JarFile( file );
+    try
+    {
+        Manifest manifest = jar.getManifest();
+        String manifestClassPath = manifest.getMainAttributes().getValue( "Class-Path" );
+        System.out.println( "manifestClassPath: " + manifestClassPath );
+        if ( !( classPath == null && manifestClassPath == null
+            || manifestClassPath != null && manifestClassPath.equals( classPath ) ) )
+        {
+            throw new IllegalStateException( "Missing entry in war MANIFEST.MF: " + classPath );
+        }
+    }
+    finally
+    {
+        jar.close();
+    }
+}
+
+File warOneFile = new File( basedir, "war-module-one/target/war-module-one-1.0.war" );
+assertFileExists( warOneFile );
+assertIncludes( warOneFile, new String[] { "WEB-INF/web.xml",
+                                           "META-INF/MANIFEST.MF",
+                                           "WEB-INF/lib/commons-lang-2.5.jar",
+                                           "WEB-INF/lib/jar-sample-one-1.0-20150825.210557-91.jar" } );
+assertManifestClassPath( warOneFile, "commons-lang-2.5.jar jar-sample-one-1.0-20150825.210557-91.jar" );
+
+File warTwoFile = new File( basedir, "war-module-two/target/war-module-two-1.0.war" );
+assertFileExists( warTwoFile );
+assertIncludes( warTwoFile, new String[] { "WEB-INF/web.xml",
+                                           "META-INF/MANIFEST.MF",
+                                           "WEB-INF/lib/jar-sample-one-1.0-SNAPSHOT.jar" } );
+assertExcludes( warTwoFile, new String[] { "WEB-INF/lib/commons-lang-2.5.jar" } );
+assertManifestClassPath( warTwoFile, "jar-sample-one-1.0-SNAPSHOT.jar" );
+
+File warModuleOneFile = new File( basedir, "ear-module/target/ear-module-1.0/org.apache.maven.its.ear.skinnywars-war-module-one-1.0.war" );
+assertFileExists( warModuleOneFile );
+assertIncludes( warModuleOneFile, new String[] { "WEB-INF/web.xml",
+                                                 "META-INF/MANIFEST.MF" } );
+assertExcludes( warModuleOneFile, new String[] { "WEB-INF/lib/commons-lang-2.5.jar",
+                                                 "WEB-INF/lib/jar-sample-one-1.0-SNAPSHOT.jar",
+                                                 "WEB-INF/lib/jar-sample-one-1.0-20150825.210557-91.jar" } );
+assertManifestClassPath( warModuleOneFile, "commons-lang-commons-lang-2.5.jar eartest-jar-sample-one-1.0-20150825.210557-91.jar" );
+
+File warModuleTwoFile = new File( basedir, "ear-module/target/ear-module-1.0/org.apache.maven.its.ear.skinnywars-war-module-two-1.0.war" );
+assertFileExists( warModuleTwoFile );
+assertIncludes( warModuleTwoFile, new String[] { "WEB-INF/web.xml",
+                                                 "META-INF/MANIFEST.MF" } );
+assertExcludes( warModuleTwoFile, new String[] { "WEB-INF/lib/commons-lang-2.5.jar",
+                                                 "WEB-INF/lib/jar-sample-one-1.0-SNAPSHOT.jar",
+                                                 "WEB-INF/lib/jar-sample-one-1.0-20150825.210557-91.jar" } );
+assertManifestClassPath( warModuleTwoFile, "eartest-jar-sample-one-1.0-20150825.210557-91.jar commons-lang-commons-lang-2.5.jar" );
 
 return true;
diff --git a/src/it/skinny-wars-timestamp/war-module/pom.xml b/src/it/skinny-wars-timestamp/war-module-one/pom.xml
similarity index 79%
rename from src/it/skinny-wars-timestamp/war-module/pom.xml
rename to src/it/skinny-wars-timestamp/war-module-one/pom.xml
index 82cce9e..553f3bc 100644
--- a/src/it/skinny-wars-timestamp/war-module/pom.xml
+++ b/src/it/skinny-wars-timestamp/war-module-one/pom.xml
@@ -23,7 +23,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.apache.maven.its.ear.skinnywars</groupId>
-  <artifactId>war-module</artifactId>
+  <artifactId>war-module-one</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>
 
@@ -45,7 +45,15 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
+        <configuration>
+          <outputFileNameMapping>@{artifactId}@-@{version}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+            </manifest>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-timestamp/war-module/src/main/webapp/WEB-INF/web.xml b/src/it/skinny-wars-timestamp/war-module-one/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from src/it/skinny-wars-timestamp/war-module/src/main/webapp/WEB-INF/web.xml
rename to src/it/skinny-wars-timestamp/war-module-one/src/main/webapp/WEB-INF/web.xml
diff --git a/src/it/skinny-wars-timestamp/war-module/pom.xml b/src/it/skinny-wars-timestamp/war-module-two/pom.xml
similarity index 68%
copy from src/it/skinny-wars-timestamp/war-module/pom.xml
copy to src/it/skinny-wars-timestamp/war-module-two/pom.xml
index 82cce9e..b719677 100644
--- a/src/it/skinny-wars-timestamp/war-module/pom.xml
+++ b/src/it/skinny-wars-timestamp/war-module-two/pom.xml
@@ -23,17 +23,12 @@
   <modelVersion>4.0.0</modelVersion>
 
   <groupId>org.apache.maven.its.ear.skinnywars</groupId>
-  <artifactId>war-module</artifactId>
+  <artifactId>war-module-two</artifactId>
   <version>1.0</version>
   <packaging>war</packaging>
 
   <dependencies>
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>2.5</version>
-    </dependency>
-    <dependency>
       <groupId>eartest</groupId>
       <artifactId>jar-sample-one</artifactId>
       <version>1.0-SNAPSHOT</version>
@@ -45,7 +40,17 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
+        <configuration>
+          <outputFileNameMapping>@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
+          <archive>
+            <manifest>
+              <addClasspath>true</addClasspath>
+              <classpathLayoutType>custom</classpathLayoutType>
+              <customClasspathLayout>$${artifact.artifactId}-$${artifact.baseVersion}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
+            </manifest>
+          </archive>
+        </configuration>
       </plugin>
     </plugins>
   </build>
diff --git a/src/it/skinny-wars-timestamp/war-module/src/main/webapp/WEB-INF/web.xml b/src/it/skinny-wars-timestamp/war-module-two/src/main/webapp/WEB-INF/web.xml
similarity index 100%
copy from src/it/skinny-wars-timestamp/war-module/src/main/webapp/WEB-INF/web.xml
copy to src/it/skinny-wars-timestamp/war-module-two/src/main/webapp/WEB-INF/web.xml
diff --git a/src/it/skinny-wars/war-module/pom.xml b/src/it/skinny-wars/war-module/pom.xml
index c6be50e..9604026 100644
--- a/src/it/skinny-wars/war-module/pom.xml
+++ b/src/it/skinny-wars/war-module/pom.xml
@@ -40,7 +40,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
-        <version>2.1.1</version>
+        <version>@mavenWarPluginVersion@</version>
       </plugin>
     </plugins>
   </build>
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 a474d08..258a1cc 100644
--- a/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/ear/EarMojo.java
@@ -40,6 +40,7 @@
 
 import org.apache.maven.archiver.MavenArchiveConfiguration;
 import org.apache.maven.archiver.MavenArchiver;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -56,6 +57,7 @@
 import org.apache.maven.shared.filtering.MavenFilteringException;
 import org.apache.maven.shared.filtering.MavenResourcesExecution;
 import org.apache.maven.shared.filtering.MavenResourcesFiltering;
+import org.apache.maven.shared.mapping.MappingUtils;
 import org.apache.maven.shared.utils.io.FileUtils;
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
@@ -70,6 +72,7 @@
 import org.codehaus.plexus.archiver.zip.ZipArchiver;
 import org.codehaus.plexus.archiver.zip.ZipUnArchiver;
 import org.codehaus.plexus.components.io.filemappers.FileMapper;
+import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -85,6 +88,12 @@
     extends AbstractEarMojo
 {
     /**
+     * Default file name mapping used by artifacts located in local repository.
+     */
+    private static final String ARTIFACT_DEFAULT_FILE_NAME_MAPPING =
+        "@{artifactId}@-@{version}@@{dashClassifier?}@.@{extension}@";
+
+    /**
      * Single directory for extra files to include in the EAR.
      */
     @Parameter( defaultValue = "${basedir}/src/main/application", required = true )
@@ -836,14 +845,35 @@
                     {
                         getLog().debug( "module does not exist with original file name." );
                         artifact = new File( workLibDir, jm.getBundleFileName() );
-                        getLog().debug( "Artifact with mapping:" + artifact.getAbsolutePath() );
+                        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() );
-                        getLog().debug( "Artifact with original file name:" + artifact.getAbsolutePath() );
+                        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() )
+                        {
+                            try
+                            {
+                                artifact = new File( workLibDir, MappingUtils
+                                    .evaluateFileNameMapping( ARTIFACT_DEFAULT_FILE_NAME_MAPPING, jmArtifact ) );
+                                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 );
+                            }
+                        }
                     }
 
                     if ( artifact.exists() )
@@ -986,11 +1016,29 @@
         {
             return moduleClassPathIndex;
         }
-        moduleClassPathIndex = classPathElements.indexOf( module.getArtifact().getFile().getName() );
+        final Artifact artifact = module.getArtifact();
+        moduleClassPathIndex = classPathElements.indexOf( artifact.getFile().getName() );
         if ( moduleClassPathIndex != -1 )
         {
             return moduleClassPathIndex;
         }
+        if ( artifact.isSnapshot() )
+        {
+            try
+            {
+                moduleClassPathIndex = classPathElements
+                    .indexOf( MappingUtils.evaluateFileNameMapping( ARTIFACT_DEFAULT_FILE_NAME_MAPPING, artifact ) );
+                if ( moduleClassPathIndex != -1 )
+                {
+                    return moduleClassPathIndex;
+                }
+            }
+            catch ( InterpolationException e )
+            {
+                getLog().warn( "Failed to evaluate file name for [" + module + "] module using mapping: "
+                    + ARTIFACT_DEFAULT_FILE_NAME_MAPPING );
+            }
+        }
         return classPathElements.indexOf( module.getUri() );
     }
 }
