diff --git a/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java b/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
index 4894536..ac63901 100644
--- a/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java
@@ -794,9 +794,7 @@
             return useJvmChmod;
         }
 
-        /**
-         * {@inheritDoc}
-         */
+        @Override
         public Boolean isFailOnMissingWebXml()
         {
             return failOnMissingWebXml;
diff --git a/src/main/java/org/apache/maven/plugins/war/Overlay.java b/src/main/java/org/apache/maven/plugins/war/Overlay.java
index d0ef32a..c42f1c7 100644
--- a/src/main/java/org/apache/maven/plugins/war/Overlay.java
+++ b/src/main/java/org/apache/maven/plugins/war/Overlay.java
@@ -37,7 +37,6 @@
  * and no artifactId represents the current project.</p>
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class Overlay
 {
@@ -318,17 +317,13 @@
         this.type = type;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public String toString()
     {
         return " id " + getId();
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public boolean equals( Object o )
     {
         if ( this == o )
@@ -358,9 +353,7 @@
         return true;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public int hashCode()
     {
         int result;
diff --git a/src/main/java/org/apache/maven/plugins/war/WarExplodedMojo.java b/src/main/java/org/apache/maven/plugins/war/WarExplodedMojo.java
index d1d6e0d..530cc23 100644
--- a/src/main/java/org/apache/maven/plugins/war/WarExplodedMojo.java
+++ b/src/main/java/org/apache/maven/plugins/war/WarExplodedMojo.java
@@ -28,16 +28,13 @@
 /**
  * Create an exploded webapp in a specified directory.
  *
- * @version $Id$
  */
 // CHECKSTYLE_OFF: LineLength
 @Mojo( name = "exploded", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true, requiresDependencyResolution = ResolutionScope.RUNTIME )
 public class WarExplodedMojo
     extends AbstractWarMojo
 {
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/WarInPlaceMojo.java b/src/main/java/org/apache/maven/plugins/war/WarInPlaceMojo.java
index fb2a5e6..9cfe02c 100644
--- a/src/main/java/org/apache/maven/plugins/war/WarInPlaceMojo.java
+++ b/src/main/java/org/apache/maven/plugins/war/WarInPlaceMojo.java
@@ -27,15 +27,12 @@
 /**
  * Generate the webapp in the WAR source directory.
  *
- * @version $Id$
  */
 @Mojo( name = "inplace", requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true )
 public class WarInPlaceMojo
     extends AbstractWarMojo
 {
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/WarMojo.java b/src/main/java/org/apache/maven/plugins/war/WarMojo.java
index ecf4fd0..7426e18 100644
--- a/src/main/java/org/apache/maven/plugins/war/WarMojo.java
+++ b/src/main/java/org/apache/maven/plugins/war/WarMojo.java
@@ -50,7 +50,6 @@
  * Build a WAR file.
  *
  * @author <a href="evenisse@apache.org">Emmanuel Venisse</a>
- * @version $Id$
  */
 // CHECKSTYLE_OFF: LineLength
 @Mojo( name = "war", defaultPhase = LifecyclePhase.PACKAGE, threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME )
@@ -167,6 +166,7 @@
      * @throws MojoExecutionException if an error occurred while building the webapp
      * @throws MojoFailureException if an error.
      */
+    @Override
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/overlay/DefaultOverlay.java b/src/main/java/org/apache/maven/plugins/war/overlay/DefaultOverlay.java
index a000449..831a53a 100644
--- a/src/main/java/org/apache/maven/plugins/war/overlay/DefaultOverlay.java
+++ b/src/main/java/org/apache/maven/plugins/war/overlay/DefaultOverlay.java
@@ -26,7 +26,6 @@
  * A default overlay implementation based on an {@link Artifact}.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class DefaultOverlay
     extends Overlay
diff --git a/src/main/java/org/apache/maven/plugins/war/overlay/InvalidOverlayConfigurationException.java b/src/main/java/org/apache/maven/plugins/war/overlay/InvalidOverlayConfigurationException.java
index 18b48b5..3470ef5 100644
--- a/src/main/java/org/apache/maven/plugins/war/overlay/InvalidOverlayConfigurationException.java
+++ b/src/main/java/org/apache/maven/plugins/war/overlay/InvalidOverlayConfigurationException.java
@@ -25,7 +25,6 @@
  * Thrown if the overlay configuration is invalid.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class InvalidOverlayConfigurationException
     extends MojoExecutionException
diff --git a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
index d1cf6d0..318ec68 100644
--- a/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
+++ b/src/main/java/org/apache/maven/plugins/war/overlay/OverlayManager.java
@@ -35,7 +35,6 @@
  * Manages the overlays.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class OverlayManager
 {
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/ArtifactsPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/ArtifactsPackagingTask.java
index f01ecc9..2fa484d 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/ArtifactsPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/ArtifactsPackagingTask.java
@@ -34,7 +34,6 @@
  * Handles the artifacts that needs to be packaged in the web application.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class ArtifactsPackagingTask
     extends AbstractWarPackagingTask
@@ -74,9 +73,7 @@
         this.id = currentProjectOverlay.getId();
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void performPackaging( WarPackagingContext context )
         throws MojoExecutionException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
index e07cff6..4456df0 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/ClassesPackagingTask.java
@@ -38,7 +38,6 @@
  * <tt>WEB-INF/classes</tt> directory or archived in a jar within the <tt>WEB-INF/lib</tt> directory.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class ClassesPackagingTask
     extends AbstractWarPackagingTask
@@ -53,9 +52,7 @@
         this.currentProjectOverlay = currentProjectOverlay;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void performPackaging( WarPackagingContext context )
         throws MojoExecutionException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
index e045bd1..df7f2b4 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/OverlayPackagingTask.java
@@ -31,7 +31,6 @@
  * Handles an overlay.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class OverlayPackagingTask
     extends AbstractWarPackagingTask
@@ -55,9 +54,7 @@
         this.overlay = overlay;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void performPackaging( WarPackagingContext context )
         throws MojoExecutionException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
index d2c0da7..4260e1d 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingTask.java
@@ -26,7 +26,6 @@
  * The base packaging task.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public interface WarPackagingTask
 {
diff --git a/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java b/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
index 64e37de..a628144 100644
--- a/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
+++ b/src/main/java/org/apache/maven/plugins/war/packaging/WarProjectPackagingTask.java
@@ -79,9 +79,7 @@
         this.id = currentProjectOverlay.getId();
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public void performPackaging( WarPackagingContext context )
         throws MojoExecutionException, MojoFailureException
     {
diff --git a/src/main/java/org/apache/maven/plugins/war/util/ClassesPackager.java b/src/main/java/org/apache/maven/plugins/war/util/ClassesPackager.java
index e2008b1..354e13a 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/ClassesPackager.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/ClassesPackager.java
@@ -37,20 +37,11 @@
  * Packages the content of the classes directory.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class ClassesPackager
 {
 
     /**
-     * Creates a new instance.
-     */
-    public ClassesPackager()
-    {
-        super();
-    }
-
-    /**
      * Package the classes
      *
      * @param classesDirectory the classes directory
diff --git a/src/main/java/org/apache/maven/plugins/war/util/DependencyInfo.java b/src/main/java/org/apache/maven/plugins/war/util/DependencyInfo.java
index ff145e3..f38ab06 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/DependencyInfo.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/DependencyInfo.java
@@ -27,7 +27,6 @@
  * Holds a dependency and packaging information.
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class DependencyInfo
 {
@@ -76,9 +75,7 @@
         this.targetFileName = targetFileName;
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public boolean equals( Object o )
     {
         if ( this == o )
@@ -95,9 +92,7 @@
         return Objects.equals( dependency, that.dependency );
     }
 
-    /**
-     * {@inheritDoc}
-     */
+    @Override
     public int hashCode()
     {
         int result;
diff --git a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
index 4fdf7e6..23da7b3 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/PathSet.java
@@ -35,7 +35,6 @@
  * converted to unix form (slashes) and they don't start with starting /.
  *
  * @author Piotr Tabor
- * @version $Id$
  */
 
 public class PathSet
@@ -207,6 +206,7 @@
      *
      * @return iterator of normalized paths (strings)
      */
+    @Override
     public Iterator<String> iterator()
     {
         return pathsSet.iterator();
diff --git a/src/main/java/org/apache/maven/plugins/war/util/WarUtils.java b/src/main/java/org/apache/maven/plugins/war/util/WarUtils.java
index 50a9628..19dbb79 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/WarUtils.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/WarUtils.java
@@ -19,14 +19,14 @@
  * under the License.
  */
 
+import java.util.Objects;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.StringUtils;
 
 /**
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class WarUtils
 {
@@ -38,9 +38,8 @@
      */
     public static Artifact getArtifact( MavenProject project, Dependency dependency )
     {
-        for ( Object o : project.getArtifacts() )
+        for ( Artifact artifact : project.getArtifacts() )
         {
-            Artifact artifact = (Artifact) o;
             if ( artifact.getGroupId().equals( dependency.getGroupId() )
                 && artifact.getArtifactId().equals( dependency.getArtifactId() )
                 && artifact.getType().equals( dependency.getType() ) )
@@ -71,31 +70,27 @@
             return false;
         }
 
-        if ( !StringUtils.equals( artifact.getGroupId(), dependency.getGroupId() ) )
+        if ( !Objects.equals( artifact.getGroupId(), dependency.getGroupId() ) )
         {
             return false;
         }
-        if ( !StringUtils.equals( artifact.getArtifactId(), dependency.getArtifactId() ) )
+        if ( !Objects.equals( artifact.getArtifactId(), dependency.getArtifactId() ) )
         {
             return false;
         }
-        if ( artifact.getVersion() != null ? !artifact.getVersion().equals( dependency.getVersion() )
-                        : dependency.getVersion() != null )
+        if ( Objects.equals( artifact.getVersion(), dependency.getVersion() ) )
         {
             return false;
         }
-        if ( artifact.getType() != null ? !artifact.getType().equals( dependency.getType() )
-                        : dependency.getType() != null )
+        if ( Objects.equals( artifact.getType(), dependency.getType() ) )
         {
             return false;
         }
-        if ( artifact.getClassifier() != null ? !artifact.getClassifier().equals( dependency.getClassifier() )
-                        : dependency.getClassifier() != null )
+        if ( Objects.equals( artifact.getClassifier(), dependency.getClassifier() ) )
         {
             return false;
         }
-        if ( artifact.getScope() != null ? !artifact.getScope().equals( dependency.getScope() )
-                        : dependency.getScope() != null )
+        if ( Objects.equals( artifact.getScope(), dependency.getScope() ) )
         {
             return false;
         }
@@ -107,59 +102,4 @@
         return true;
     }
 
-    /**
-     * @param first {@link Dependency}
-     * @param second {@link Dependency}
-     * @return are the dependencies equal.
-     */
-    public static boolean dependencyEquals( Dependency first, Dependency second )
-    {
-        if ( first == second )
-        {
-            return true;
-        }
-
-        if ( first.isOptional() != second.isOptional() )
-        {
-            return false;
-        }
-        if ( !StringUtils.equals( first.getArtifactId(), second.getArtifactId() ) )
-        {
-            return false;
-        }
-        if ( first.getClassifier() != null ? !first.getClassifier().equals( second.getClassifier() )
-                        : second.getClassifier() != null )
-        {
-            return false;
-        }
-        if ( first.getExclusions() != null ? !first.getExclusions().equals( second.getExclusions() )
-                        : second.getExclusions() != null )
-        {
-            return false;
-        }
-        if ( !StringUtils.equals( first.getGroupId(), second.getGroupId() ) )
-        {
-            return false;
-        }
-        if ( first.getScope() != null ? !first.getScope().equals( second.getScope() ) : second.getScope() != null )
-        {
-            return false;
-        }
-        if ( first.getSystemPath() != null ? !first.getSystemPath().equals( second.getSystemPath() )
-                        : second.getSystemPath() != null )
-        {
-            return false;
-        }
-        if ( first.getType() != null ? !first.getType().equals( second.getType() ) : second.getType() != null )
-        {
-            return false;
-        }
-        if ( first.getVersion() != null ? !first.getVersion().equals( second.getVersion() )
-                        : second.getVersion() != null )
-        {
-            return false;
-        }
-        return true;
-    }
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java b/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
index f5dc06c..9d11650 100644
--- a/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
+++ b/src/main/java/org/apache/maven/plugins/war/util/WebappStructure.java
@@ -37,7 +37,6 @@
  * Note that this structure is persisted to disk at each invocation to store which owner holds which path (file).
  *
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class WebappStructure
 {
diff --git a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
index 55e165f..9997f4d 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarExplodedMojoFilteringTest.java
@@ -32,7 +32,6 @@
 /**
  * @author Olivier Lamy
  * @since 21 juil. 2008
- * @version $Id$
  */
 public class WarExplodedMojoFilteringTest
     extends AbstractWarExplodedMojoTest
diff --git a/src/test/java/org/apache/maven/plugins/war/WarMojoTest.java b/src/test/java/org/apache/maven/plugins/war/WarMojoTest.java
index dd6acae..5696965 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarMojoTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarMojoTest.java
@@ -115,6 +115,7 @@
         setVariableValueToObject( mojo, "warName", warName );
         mojo.setWebXml( new File( xmlSource, "web.xml" ) );
         setVariableValueToObject( mojo, "packagingIncludes", "%regex[(.(?!exile))+]" );
+//        setVariableValueToObject( mojo, "packagingIncludes", "%regex" );
 
         mojo.execute();
 
diff --git a/src/test/java/org/apache/maven/plugins/war/WarZipTest.java b/src/test/java/org/apache/maven/plugins/war/WarZipTest.java
index f88b273..731cffe 100644
--- a/src/test/java/org/apache/maven/plugins/war/WarZipTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/WarZipTest.java
@@ -34,7 +34,6 @@
 
 /**
  * @author Olivier Lamy
- * @version $Id$
  * @since 7 Oct 07
  */
 public class WarZipTest
diff --git a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java
index c46f2e4..59ed9e0 100644
--- a/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java
+++ b/src/test/java/org/apache/maven/plugins/war/overlay/OverlayManagerTest.java
@@ -33,7 +33,6 @@
 
 /**
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class OverlayManagerTest
     extends PlexusTestCase
diff --git a/src/test/java/org/apache/maven/plugins/war/stub/AarArtifactStub.java b/src/test/java/org/apache/maven/plugins/war/stub/AarArtifactStub.java
index 572cf84..db50049 100644
--- a/src/test/java/org/apache/maven/plugins/war/stub/AarArtifactStub.java
+++ b/src/test/java/org/apache/maven/plugins/war/stub/AarArtifactStub.java
@@ -26,7 +26,6 @@
 
 /**
  * @author Stephane Nicoll
- * @version $Id$
  */
 public class AarArtifactStub
     extends AbstractArtifactStub
diff --git a/src/test/java/org/apache/maven/plugins/war/stub/MavenProjectArtifactsStub.java b/src/test/java/org/apache/maven/plugins/war/stub/MavenProjectArtifactsStub.java
index 45f7855..a8e2119 100644
--- a/src/test/java/org/apache/maven/plugins/war/stub/MavenProjectArtifactsStub.java
+++ b/src/test/java/org/apache/maven/plugins/war/stub/MavenProjectArtifactsStub.java
@@ -56,20 +56,19 @@
             return new ArrayList<>();
         }
         final List<Dependency> dependencies = new ArrayList<>();
-        for (Object o : getArtifacts()) {
-            Artifact a = (Artifact) o;
+        for ( Artifact a : getArtifacts() )
+        {
             Dependency dependency = new Dependency();
-            dependency.setArtifactId(a.getArtifactId());
-            dependency.setGroupId(a.getGroupId());
-            dependency.setVersion(a.getVersion());
-            dependency.setScope(a.getScope());
-            dependency.setType(a.getType());
-            dependency.setClassifier(a.getClassifier());
-            dependencies.add(dependency);
+            dependency.setArtifactId( a.getArtifactId() );
+            dependency.setGroupId( a.getGroupId() );
+            dependency.setVersion( a.getVersion() );
+            dependency.setScope( a.getScope() );
+            dependency.setType( a.getType() );
+            dependency.setClassifier( a.getClassifier() );
+            dependencies.add( dependency );
 
         }
         return dependencies;
-
     }
 
     public List<String> getRuntimeClasspathElements()
diff --git a/src/test/java/org/apache/maven/plugins/war/stub/MavenZipProject.java b/src/test/java/org/apache/maven/plugins/war/stub/MavenZipProject.java
index 7a5b95d..c2ff170 100644
--- a/src/test/java/org/apache/maven/plugins/war/stub/MavenZipProject.java
+++ b/src/test/java/org/apache/maven/plugins/war/stub/MavenZipProject.java
@@ -27,7 +27,6 @@
 /**
  * @author Olivier Lamy
  * @since 9 juin 07
- * @version $Id$
  */
 public class MavenZipProject
     extends MavenProject4CopyConstructor
diff --git a/src/test/java/org/apache/maven/plugins/war/stub/XarArtifactStub.java b/src/test/java/org/apache/maven/plugins/war/stub/XarArtifactStub.java
index d99f7a1..92e195f 100644
--- a/src/test/java/org/apache/maven/plugins/war/stub/XarArtifactStub.java
+++ b/src/test/java/org/apache/maven/plugins/war/stub/XarArtifactStub.java
@@ -26,7 +26,6 @@
 
 /**
  * @author Auke Schrijnen
- * @version $Id$
  */
 public class XarArtifactStub
     extends AbstractArtifactStub
diff --git a/src/test/java/org/apache/maven/plugins/war/stub/ZipArtifactStub.java b/src/test/java/org/apache/maven/plugins/war/stub/ZipArtifactStub.java
index 8bad697..50c01d9 100644
--- a/src/test/java/org/apache/maven/plugins/war/stub/ZipArtifactStub.java
+++ b/src/test/java/org/apache/maven/plugins/war/stub/ZipArtifactStub.java
@@ -26,7 +26,6 @@
 /**
  * @author Olivier Lamy
  * @since 8 juin 07
- * @version $Id$
  */
 public class ZipArtifactStub
     extends AbstractArtifactStub
diff --git a/src/test/java/org/apache/maven/plugins/war/util/WarUtilsTest.java b/src/test/java/org/apache/maven/plugins/war/util/WarUtilsTest.java
deleted file mode 100644
index 35e0a41..0000000
--- a/src/test/java/org/apache/maven/plugins/war/util/WarUtilsTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.maven.plugins.war.util;
-
-/*
- * 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.
- */
-
-import junit.framework.TestCase;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.plugins.war.util.WarUtils;
-
-/**
- * Test the WarUtils.
- *
- * @author Dennis Lundberg
- * @version $Id$
- */
-public class WarUtilsTest
-    extends TestCase
-{
-    /**
-     * Test for MWAR-160.
-     */
-    public void testDependencyEquals()
-    {
-        Dependency firstDependency = new Dependency();
-        firstDependency.setGroupId( "1" );
-        firstDependency.setArtifactId( "a" );
-        Dependency secondDependency = new Dependency();
-        secondDependency.setGroupId( "2" );
-        secondDependency.setArtifactId( "b" );
-        Dependency thirdDependency = new Dependency();
-        thirdDependency.setGroupId( "1" );
-        thirdDependency.setArtifactId( "c" );
-        Dependency fourthDependency = new Dependency();
-        fourthDependency.setGroupId( "4" );
-        fourthDependency.setArtifactId( "a" );
-
-        assertFalse( "dependencies 1:a and 2:b should not be equal", WarUtils.dependencyEquals( firstDependency,
-                                                                                                secondDependency ) );
-        assertFalse( "dependencies 1:a and 1:c should not be equal", WarUtils.dependencyEquals( firstDependency,
-                                                                                                thirdDependency ) );
-        assertFalse( "dependencies 1:a and 4:a should not be equal", WarUtils.dependencyEquals( firstDependency,
-                                                                                                fourthDependency ) );
-        assertFalse( "dependencies 2:b and 1:c should not be equal", WarUtils.dependencyEquals( secondDependency,
-                                                                                                thirdDependency ) );
-        assertFalse( "dependencies 2:b and 4:a should not be equal", WarUtils.dependencyEquals( secondDependency,
-                                                                                                fourthDependency ) );
-        assertFalse( "dependencies 1:c and 4:a should not be equal", WarUtils.dependencyEquals( thirdDependency,
-                                                                                                fourthDependency ) );
-    }
-}
\ No newline at end of file
