diff --git a/.gitignore b/.gitignore
index f79c928..c687bc7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
 /bootstrap
 /dependencies.xml
 .java-version
+*.versionsBackup
diff --git a/pom.xml b/pom.xml
index a1e7b72..238b344 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,13 +123,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.13</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.assertj</groupId>
-      <artifactId>assertj-core</artifactId>
-      <version>2.9.1</version>
+      <version>4.13.1</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java b/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java
index 3a86f2a..62241f7 100644
--- a/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java
+++ b/src/test/java/org/apache/maven/plugins/ejb/EjbHelperTest.java
@@ -19,10 +19,10 @@
  * under the License.
  */
 
-import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.File;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 public class EjbHelperTest
@@ -31,62 +31,61 @@
     @Test
     public void validClassifier()
     {
-        assertThat( EjbHelper.isClassifierValid( "anton" ) ).isTrue();
+        Assert.assertTrue( EjbHelper.isClassifierValid( "anton" ) );
     }
 
     @Test
     public void anOtherValidClassifier()
     {
-        assertThat( EjbHelper.isClassifierValid( "jdk15" ) ).isTrue();
+        Assert.assertTrue( EjbHelper.isClassifierValid( "jdk15" ) );
     }
 
     @Test
     public void moreValidClassifier()
     {
-        assertThat( EjbHelper.isClassifierValid( "client-classifier" ) ).isTrue();
+        Assert.assertTrue( EjbHelper.isClassifierValid( "client-classifier" ) );
     }
 
     @Test
     public void isClassifierValidShouldReturnFalseIfClassifierIsPrefixedByDash()
     {
-        assertThat( EjbHelper.isClassifierValid( "-anton" ) ).isFalse();
+        Assert.assertFalse( EjbHelper.isClassifierValid( "-anton" ) );
     }
 
     @Test
     public void isClassifierValidShouldReturnFalseIfClassifierIsNull()
     {
-        assertThat( EjbHelper.isClassifierValid( null ) ).isFalse();
+        Assert.assertFalse( EjbHelper.isClassifierValid( null ) );
     }
 
     @Test
     public void hasClassifierShouldReturnFalseForNull()
     {
-        assertThat( EjbHelper.hasClassifier( null ) ).isFalse();
+        Assert.assertFalse( EjbHelper.hasClassifier( null ) );
     }
 
     @Test
     public void hasClassifierShouldReturnFalseForEmptyString()
     {
-        assertThat( EjbHelper.hasClassifier( "" ) ).isFalse();
+        Assert.assertFalse( EjbHelper.hasClassifier( "" ) );
     }
 
     @Test
     public void hasClassifierShouldReturnTrueForNonEmptyString()
     {
-        assertThat( EjbHelper.hasClassifier( "x" ) ).isTrue();
+        Assert.assertTrue( EjbHelper.hasClassifier( "x" ) );
     }
 
     @Test
     public void getJarFileNameShouldReturnFileNameWithoutClassifier()
     {
-        assertThat( EjbHelper.getJarFile( new File( "base" ), "test",
-                                              null ) ).isEqualTo( new File( "base/test.jar" ) );
+        Assert.assertEquals( EjbHelper.getJarFile( new File( "base" ), "test", null ), new File( "base/test.jar" ) );
     }
 
     @Test
     public void getJarFileNameShouldReturnFileNameWithClassifier()
     {
-        assertThat( EjbHelper.getJarFile( new File( "base" ), "test",
-                                              "alpha" ) ).isEqualTo( new File( "base/test-alpha.jar" ) );
+        Assert.assertEquals( EjbHelper.getJarFile( new File( "base" ), "test",
+                                              "alpha" ), new File( "base/test-alpha.jar" ) );
     }
 }
diff --git a/src/test/java/org/apache/maven/plugins/ejb/IncludesExcludesTest.java b/src/test/java/org/apache/maven/plugins/ejb/IncludesExcludesTest.java
index 5261d21..36c07a5 100644
--- a/src/test/java/org/apache/maven/plugins/ejb/IncludesExcludesTest.java
+++ b/src/test/java/org/apache/maven/plugins/ejb/IncludesExcludesTest.java
@@ -19,11 +19,11 @@
  * under the License.
  */
 
-import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Arrays;
 import java.util.Collections;
 
+import org.junit.Assert;
 import org.junit.Test;
 
 public class IncludesExcludesTest
@@ -35,8 +35,8 @@
         IncludesExcludes ie = new IncludesExcludes( Collections.<String>emptyList(), Collections.<String>emptyList(),
                                                     Collections.<String>emptyList(), Collections.<String>emptyList() );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[0] );
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[0] );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[0] );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[0] );
     }
 
     @Test
@@ -45,8 +45,8 @@
         IncludesExcludes ie = new IncludesExcludes( null, Collections.<String>emptyList(),
                                                     Collections.<String>emptyList(), Collections.<String>emptyList() );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[0] );
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[0] );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[0] );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[0] );
     }
 
     @Test
@@ -55,8 +55,8 @@
         IncludesExcludes ie = new IncludesExcludes( Collections.<String>emptyList(), null,
                                                     Collections.<String>emptyList(), Collections.<String>emptyList() );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[0] );
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[0] );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[0] );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[0] );
     }
 
     @Test
@@ -65,8 +65,8 @@
         IncludesExcludes ie = new IncludesExcludes( null, null, Collections.<String>emptyList(),
                                                     Arrays.asList( "**/package.html" ) );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[0] );
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[] { "**/package.html" } );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[0] );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[] { "**/package.html" } );
     }
 
     @Test
@@ -75,8 +75,8 @@
         IncludesExcludes ie = new IncludesExcludes( null, null, Arrays.asList( "**/package.html" ),
                                                     Collections.<String>emptyList() );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[] { "**/package.html" } );
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[0] );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[] { "**/package.html" } );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[0] );
     }
 
     @Test
@@ -85,7 +85,7 @@
         IncludesExcludes ie = new IncludesExcludes( Arrays.asList( "**/package.html" ), null,
                                                     Arrays.asList( "**/site.html" ), null );
 
-        assertThat( ie.resultingIncludes() ).isEqualTo( new String[] { "**/package.html" } );
+        Assert.assertArrayEquals( ie.resultingIncludes(), new String[] { "**/package.html" } );
     }
 
     @Test
@@ -94,6 +94,6 @@
         IncludesExcludes ie = new IncludesExcludes( null, Arrays.asList( "**/package.html" ),
                                                     null, Arrays.asList( "**/site.html" ) );
 
-        assertThat( ie.resultingExcludes() ).isEqualTo( new String[] { "**/package.html" } );
+        Assert.assertArrayEquals( ie.resultingExcludes(), new String[] { "**/package.html" } );
     }
 }
