runtime support
diff --git a/pom.xml b/pom.xml
index 5f2226b..b26f84b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -84,13 +84,9 @@
     <dependency>
       <groupId>org.eclipse.sisu</groupId>
       <artifactId>org.eclipse.sisu.plexus</artifactId>
-      <version>0.3.0.M1</version><!-- Maven 3.2.5 -->
+      <version>0.3.5</version><!-- Maven 3.2.5 -->
     </dependency>
     <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-component-annotations</artifactId>
-    </dependency>    
-    <dependency>
       <groupId>org.apache.maven.shared</groupId>
       <artifactId>maven-shared-utils</artifactId>
       <version>4.0.0-SNAPSHOT</version>
@@ -130,32 +126,25 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.13.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>org.hamcrest</groupId>
       <artifactId>hamcrest-core</artifactId>
       <version>2.2</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-testing</artifactId>
+      <version>1.1.0</version>
+    </dependency>
 
   </dependencies>
 
   <build>
     <plugins>
       <plugin>
-        <groupId>org.codehaus.plexus</groupId>
-        <artifactId>plexus-component-metadata</artifactId>
-        <executions>
-          <execution>
-            <goals>
-              <goal>generate-metadata</goal>
-            </goals>
-          </execution>
-        </executions>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>3.0.0-M5</version>
       </plugin>
     </plugins>
   </build>
diff --git a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
index 85032b2..7bf967e 100644
--- a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
@@ -44,13 +44,20 @@
 import org.codehaus.plexus.interpolation.SingleResponseValueSource;
 import org.codehaus.plexus.interpolation.ValueSource;
 import org.codehaus.plexus.interpolation.multi.MultiDelimiterStringSearchInterpolator;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class BaseFilter
-    extends AbstractLogEnabled
     implements DefaultFilterInfo
 {
 
+    protected final Logger logger = LoggerFactory.getLogger( getClass() );
+
+    public Logger getLogger()
+    {
+        return logger;
+    }
+
     @Override
     public List<FileUtils.FilterWrapper> getDefaultFilterWrappers( final Project mavenProject,
                                                                    List<String> filters,
@@ -118,7 +125,7 @@
 
         final Properties filterProperties = new Properties();
 
-        File basedir = request.getMavenProject() != null
+        File basedir = request.getMavenProject() != null && request.getMavenProject().getBasedir() != null
                 ? request.getMavenProject().getBasedir().toFile() : new File( "." );
 
         loadProperties( filterProperties, basedir, request.getFileFilters(), baseProps );
@@ -131,8 +138,9 @@
         {
             if ( request.isInjectProjectBuildFilters() )
             {
-                List<String> buildFilters =
-                        new ArrayList<>( request.getMavenProject().getModel().getBuild().getFilters() );
+                List<String> buildFilters = request.getMavenProject().getModel().getBuild() != null
+                        ? new ArrayList<>( request.getMavenProject().getModel().getBuild().getFilters() )
+                        : new ArrayList<>();
 
                 // JDK-8015656: (coll) unexpected NPE from removeAll
                 if ( request.getFileFilters() != null )
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
index f2d9bb2..1bf7663 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.List;
@@ -27,23 +31,22 @@
 import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 /**
  * @author Olivier Lamy
  */
-@Component( role = org.apache.maven.shared.filtering.MavenFileFilter.class, hint = "default" )
+@Singleton
+@Named( "default" )
 public class DefaultMavenFileFilter
     extends BaseFilter
     implements MavenFileFilter
 {
 
-    @Requirement
+    @Inject
     private MavenReaderFilter readerFilter;
 
-    @Requirement
+    @Inject
     private BuildContext buildContext;
 
     @Override
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
index ee91e12..2dfec08 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilter.java
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.Reader;
 import java.util.Collections;
 import java.util.List;
@@ -26,12 +29,12 @@
 import org.apache.maven.api.Project;
 import org.apache.maven.api.Session;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
-import org.codehaus.plexus.component.annotations.Component;
 
 /**
  * @author Kristian Rosenvold
  */
-@Component( role = org.apache.maven.shared.filtering.MavenReaderFilter.class, hint = "default" )
+@Named( "default" )
+@Singleton
 public class DefaultMavenReaderFilter
     extends BaseFilter
     implements MavenReaderFilter
diff --git a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
index e2fc2cc..020aeae 100644
--- a/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
+++ b/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.Reader;
@@ -37,33 +41,34 @@
 import org.apache.maven.shared.utils.ReaderFactory;
 import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
-import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 import org.codehaus.plexus.util.Scanner;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 /**
  * @author Olivier Lamy
  */
-@Component( role = MavenResourcesFiltering.class, hint = "default" )
+@Named( "default" )
+@Singleton
 public class DefaultMavenResourcesFiltering
-    extends AbstractLogEnabled
     implements MavenResourcesFiltering, Initializable
 {
 
     private static final String[] EMPTY_STRING_ARRAY = {};
 
     private static final String[] DEFAULT_INCLUDES = { "**/**" };
+    
+    private static final Logger LOGGER = LoggerFactory.getLogger( DefaultMavenResourcesFiltering.class );
 
     private List<String> defaultNonFilteredFileExtensions;
 
-    @Requirement
+    @Inject
     private BuildContext buildContext;
 
-    @Requirement
+    @Inject
     private MavenFileFilter mavenFileFilter;
 
     // ------------------------------------------------
@@ -92,9 +97,9 @@
         }
         String extension = StringUtils.lowerCase( FilenameUtils.getExtension( fileName ) );
         boolean filteredFileExtension = !nonFilteredFileExtensions.contains( extension );
-        if ( getLogger().isDebugEnabled() )
+        if ( LOGGER.isDebugEnabled() )
         {
-            getLogger().debug( "file " + fileName + " has a" + ( filteredFileExtension ? " " : " non " )
+            LOGGER.debug( "file " + fileName + " has a" + ( filteredFileExtension ? " " : " non " )
                 + "filtered file extension" );
         }
         return filteredFileExtension;
@@ -121,7 +126,7 @@
 
         if ( mavenResourcesExecution.getResources() == null )
         {
-            getLogger().info( "No resources configured skip copying/filtering" );
+            LOGGER.info( "No resources configured skip copying/filtering" );
             return;
         }
 
@@ -137,24 +142,24 @@
 
         if ( mavenResourcesExecution.getEncoding() == null || mavenResourcesExecution.getEncoding().length() < 1 )
         {
-            getLogger().warn( "Using platform encoding (" + ReaderFactory.FILE_ENCODING
+            LOGGER.warn( "Using platform encoding (" + ReaderFactory.FILE_ENCODING
                 + " actually) to copy filtered resources, i.e. build is platform dependent!" );
         }
         else
         {
-            getLogger().debug( "Using '" + mavenResourcesExecution.getEncoding()
+            LOGGER.debug( "Using '" + mavenResourcesExecution.getEncoding()
                 + "' encoding to copy filtered resources." );
         }
 
         if ( mavenResourcesExecution.getPropertiesEncoding() == null
             || mavenResourcesExecution.getPropertiesEncoding().length() < 1 )
         {
-            getLogger().debug( "Using '" + mavenResourcesExecution.getEncoding()
+            LOGGER.debug( "Using '" + mavenResourcesExecution.getEncoding()
                 + "' encoding to copy filtered properties files." );
         }
         else
         {
-            getLogger().debug( "Using '" + mavenResourcesExecution.getPropertiesEncoding()
+            LOGGER.debug( "Using '" + mavenResourcesExecution.getPropertiesEncoding()
                 + "' encoding to copy filtered properties files." );
         }
 
@@ -165,7 +170,7 @@
         for ( Resource resource : mavenResourcesExecution.getResources() )
         {
 
-            if ( getLogger().isDebugEnabled() )
+            if ( LOGGER.isDebugEnabled() )
             {
                 String ls = System.lineSeparator();
                 StringBuilder debugMessage =
@@ -179,7 +184,7 @@
                                 : resource.getIncludes().toString() );
 
                 // @formatter:on
-                getLogger().debug( debugMessage.toString() );
+                LOGGER.debug( debugMessage.toString() );
             }
 
             String targetPath = resource.getTargetPath();
@@ -194,7 +199,7 @@
 
             if ( resourceDirectory == null || !resourceDirectory.exists() )
             {
-                getLogger().info( "skip non existing resourceDirectory " + resourceDirectory );
+                LOGGER.info( "skip non existing resourceDirectory " + resourceDirectory );
                 continue;
             }
 
@@ -214,7 +219,7 @@
             }
             boolean ignoreDelta = !outputExists || buildContext.hasDelta( mavenResourcesExecution.getFileFilters() )
                 || buildContext.hasDelta( getRelativeOutputDirectory( mavenResourcesExecution ) );
-            getLogger().debug( "ignoreDelta " + ignoreDelta );
+            LOGGER.debug( "ignoreDelta " + ignoreDelta );
             Scanner scanner = buildContext.newScanner( resourceDirectory, ignoreDelta );
 
             setupScanner( resource, scanner, mavenResourcesExecution.isAddDefaultExcludes() );
@@ -238,13 +243,13 @@
 
             List<String> includedFiles = Arrays.asList( scanner.getIncludedFiles() );
 
-            getLogger().info( "Copying " + includedFiles.size() + " resource" + ( includedFiles.size() > 1 ? "s" : "" )
+            LOGGER.info( "Copying " + includedFiles.size() + " resource" + ( includedFiles.size() > 1 ? "s" : "" )
                 + ( targetPath == null ? "" : " to " + targetPath ) );
 
             for ( String name : includedFiles )
             {
 
-                getLogger().debug( "Copying file " + name );
+                LOGGER.debug( "Copying file " + name );
                 File source = new File( resourceDirectory, name );
 
                 File destinationFile = getDestinationFile( outputDirectory, targetPath, name, mavenResourcesExecution );
@@ -253,7 +258,7 @@
                 {
                     if ( mavenResourcesExecution.isOverwrite() )
                     {
-                        getLogger().warn( "existing file " + destinationFile.getName()
+                        LOGGER.warn( "existing file " + destinationFile.getName()
                                 + " will be overwritten by " + name );
                     }
                     else
@@ -272,7 +277,7 @@
                 // Determine which encoding to use when filtering this file
                 String encoding = getEncoding( source, mavenResourcesExecution.getEncoding(),
                                                mavenResourcesExecution.getPropertiesEncoding() );
-                getLogger().debug( "Using '" + encoding + "' encoding to copy filtered resource '"
+                LOGGER.debug( "Using '" + encoding + "' encoding to copy filtered resource '"
                                        + source.getName() + "'." );
                 mavenFileFilter.copyFile( source, destinationFile, resource.isFiltering() && filteredExt,
                                           mavenResourcesExecution.getFilterWrappers(),
@@ -313,7 +318,7 @@
             && propertiesFiles.size() > 0 )
         {
             // @todo Sometime in the future we should change this to be a warning
-            getLogger().info( "The encoding used to copy filtered properties files have not been set."
+            LOGGER.info( "The encoding used to copy filtered properties files have not been set."
                                   + " This means that the same encoding will be used to copy filtered properties files"
                                   + " as when copying other filtered resources. This might not be what you want!"
                                   + " Run your build with --debug to see which files might be affected."
@@ -328,7 +333,7 @@
             {
                 affectedFiles.append( System.lineSeparator() ).append( " - " ).append( propertiesFile.getPath() );
             }
-            getLogger().debug( affectedFiles.toString() );
+            LOGGER.debug( affectedFiles.toString() );
 
         }
 
@@ -534,9 +539,9 @@
             IOUtils.copy( reader, writer );
             String filteredFilename = writer.toString();
 
-            if ( getLogger().isDebugEnabled() )
+            if ( LOGGER.isDebugEnabled() )
             {
-                getLogger().debug( "renaming filename " + name + " to " + filteredFilename );
+                LOGGER.debug( "renaming filename " + name + " to " + filteredFilename );
             }
             return filteredFilename;
         }
diff --git a/src/main/java/org/apache/maven/shared/filtering/PropertyUtils.java b/src/main/java/org/apache/maven/shared/filtering/PropertyUtils.java
index b37f7de..fa2fe7c 100644
--- a/src/main/java/org/apache/maven/shared/filtering/PropertyUtils.java
+++ b/src/main/java/org/apache/maven/shared/filtering/PropertyUtils.java
@@ -29,7 +29,7 @@
 import java.util.Properties;
 
 import org.apache.maven.shared.utils.StringUtils;
-import org.codehaus.plexus.logging.Logger;
+import org.slf4j.Logger;
 
 /**
  * @author <a href="mailto:kenney@neonics.com">Kenney Westerhof</a>
diff --git a/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java b/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
index 863ed7a..3ee7aa4 100644
--- a/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/AbstractInterpolatorFilterReaderLineEndingTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.when;
@@ -31,8 +31,8 @@
 import org.apache.commons.io.IOUtils;
 import org.codehaus.plexus.interpolation.Interpolator;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -42,7 +42,7 @@
     @Mock
     private Interpolator interpolator;
 
-    @Before
+    @BeforeEach
     public void onSetup()
     {
         MockitoAnnotations.initMocks( this );
diff --git a/src/test/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequestTest.java b/src/test/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequestTest.java
index 6799737..033ceb0 100644
--- a/src/test/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequestTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequestTest.java
@@ -25,7 +25,7 @@
 import java.util.LinkedHashSet;
 
 import org.hamcrest.Matchers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
 
 /**
  * @author Karl Heinz Marbaise <a href="mailto:khmarbaise@apache.org">khmarbaise@apache.org</a>.
diff --git a/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java b/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
index 28ecfc0..a990985 100644
--- a/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/BoundedReaderTest.java
@@ -18,14 +18,14 @@
  */
 package org.apache.maven.shared.filtering;
 
-import static org.junit.Assert.assertEquals;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class BoundedReaderTest
 {
diff --git a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
index 1ba136e..1f01961 100644
--- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenFileFilterTest.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.io.Reader;
 import java.io.StringReader;
@@ -32,32 +34,40 @@
 
 import org.apache.commons.io.IOUtils;
 import org.apache.maven.api.Project;
+import org.apache.maven.model.Build;
 import org.apache.maven.shared.utils.io.FileUtils.FilterWrapper;
-import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Olivier Lamy
  *
  */
+@PlexusTest
 public class DefaultMavenFileFilterTest
-    extends PlexusTestCase
 {
 
     File to = new File( getBasedir(), "target/reflection-test.properties" );
 
-    @Override
+    @Inject
+    MavenFileFilter mavenFileFilter;
+
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         Files.deleteIfExists( to.toPath() );
     }
 
+    @Test
     public void testNotOverwriteFile()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         File from = new File( getBasedir(), "src/test/units-files/reflection-test.properties" );
 
         mavenFileFilter.copyFile( from, to, false, null, null );
@@ -76,11 +86,10 @@
 
     }
 
+    @Test
     public void testOverwriteFile()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         File from = new File( getBasedir(), "src/test/units-files/reflection-test.properties" );
 
         mavenFileFilter.copyFile( from, to, false, null, null );
@@ -99,11 +108,10 @@
 
     }
 
+    @Test
     public void testNullSafeDefaultFilterWrappers()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         mavenFileFilter.getDefaultFilterWrappers( null, null, false, null, null );
 
         // shouldn't fail
@@ -131,15 +139,15 @@
 
     // MSHARED-161: DefaultMavenFileFilter.getDefaultFilterWrappers loads
     // filters from the current directory instead of using basedir
+    @Test
     public void testMavenBasedir()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
         req.setFileFilters( Collections.singletonList( "src/main/filters/filefilter.properties" ) );
 
         Project mavenProject = new StubMavenProject( new File( "src/test/units-files/MSHARED-161" ) );
+        mavenProject.getModel().setBuild( new Build() );
         mavenProject.getModel().getBuild().setFilters( Collections.singletonList( "src/main/filters/buildfilter.properties" ) );
         req.setMavenProject( mavenProject );
         req.setInjectProjectBuildFilters( true );
@@ -153,11 +161,10 @@
     }
 
     // MSHARED-198: custom delimiters doesn't work as expected
+    @Test
     public void testCustomDelimiters()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
         Properties additionalProperties = new Properties();
         additionalProperties.setProperty( "FILTER.a.ME", "DONE" );
@@ -174,11 +181,10 @@
     }
 
     // MSHARED-199: Filtering doesn't work if 2 delimiters are used on the same line, the first one being left open
+    @Test
     public void testLineWithSingleAtAndExpression()
         throws Exception
     {
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
-
         AbstractMavenFilteringRequest req = new AbstractMavenFilteringRequest();
         Properties additionalProperties = new Properties();
         additionalProperties.setProperty( "foo", "bar" );
diff --git a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilterTest.java b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilterTest.java
index 49d6ec6..d9bf8c1 100644
--- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilterTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenReaderFilterTest.java
@@ -19,24 +19,32 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.Properties;
 
 import org.apache.commons.io.IOUtils;
-import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Kristian Rosenvold
  */
+@PlexusTest
 public class DefaultMavenReaderFilterTest
-    extends PlexusTestCase
 {
+
+    @Inject
+    MavenReaderFilter readerFilter;
+
+    @Test
     public void testJustDoSomeFiltering()
         throws Exception
     {
-        MavenReaderFilter readerFilter = lookup( MavenReaderFilter.class );
-
         StringReader src = new StringReader( "toto@titi.com ${foo}" );
         MavenReaderFilterRequest req = new MavenReaderFilterRequest();
         Properties additionalProperties = new Properties();
diff --git a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
index d1e6a5c..9671e80 100644
--- a/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -33,29 +35,39 @@
 import org.apache.maven.api.Session;
 import org.apache.maven.model.Resource;
 import org.apache.maven.settings.Settings;
-import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
 import org.codehaus.plexus.interpolation.ValueSource;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Olivier Lamy
  *
  * @since 1.0-beta-1
  */
+@PlexusTest
 public class DefaultMavenResourcesFilteringTest
-    extends PlexusTestCase
 {
 
     private File outputDirectory = new File( getBasedir(), "target/DefaultMavenResourcesFilteringTest" );
     private File baseDir = new File( "c:\\foo\\bar" );
     private StubMavenProject mavenProject = new StubMavenProject( baseDir );
+
+    @Inject
     private MavenResourcesFiltering mavenResourcesFiltering;
 
-    @Override
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         if ( outputDirectory.exists() )
         {
             FileUtils.deleteDirectory( outputDirectory );
@@ -65,10 +77,9 @@
         mavenProject.setVersion( "1.0" );
         mavenProject.setGroupId( "org.apache" );
         mavenProject.setName( "test project" );
-        
-        mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
     }
 
+    @Test
     public void testSimpleFiltering()
         throws Exception
     {
@@ -101,6 +112,7 @@
         assertFiltering( initialImageFile, false, false );
     }
 
+    @Test
     public void testSessionFiltering()
         throws Exception
     {
@@ -146,6 +158,7 @@
         assertEquals( settings.getLocalRepository(), result.getProperty( "local.repo" ) );
     }
 
+    @Test
     public void testWithMavenResourcesExecution()
         throws Exception
     {
@@ -176,6 +189,7 @@
         assertFiltering( initialImageFile, true, false );
     }
 
+    @Test
     public void testWithMavenResourcesExecutionWithAdditionalProperties()
         throws Exception
     {
@@ -256,7 +270,7 @@
 
         String userHome = result.getProperty( "userHome" );
 
-        assertTrue( "'" + userHome + "' does not exist.", new File( userHome ).exists() );
+        assertTrue( new File( userHome ).exists(), "'" + userHome + "' does not exist." );
         assertEquals( new File( System.getProperty( "user.home" ) ), new File( userHome ) );
 
         if ( escapeTest )
@@ -273,6 +287,7 @@
         assertTrue( filesAreIdentical( initialImageFile, imageFile ) );
     }
 
+    @Test
     public void testAddingTokens()
         throws Exception
     {
@@ -313,6 +328,7 @@
         assertFiltering( initialImageFile, false, false );
     }
 
+    @Test
     public void testNoFiltering()
         throws Exception
     {
@@ -376,9 +392,10 @@
                 return false;
             }
         }
-    return true;
+        return true;
     }
 
+    @Test
     public void testIncludeOneFile()
         throws Exception
     {
@@ -407,6 +424,7 @@
 
     }
 
+    @Test
     public void testIncludeOneFileAndDirectory()
         throws Exception
     {
@@ -440,6 +458,7 @@
 
     }
 
+    @Test
     public void testFlattenDirectoryStructure()
             throws Exception
     {
@@ -449,8 +468,6 @@
         mavenProject.setGroupId( "org.apache" );
         mavenProject.setName( "test project" );
 
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
-
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
 
         Resource resource = new Resource();
@@ -483,6 +500,7 @@
 
     }
 
+    @Test
     public void testFlattenDirectoryStructureWithoutOverride()
             throws Exception
     {
@@ -492,8 +510,6 @@
         mavenProject.setGroupId( "org.apache" );
         mavenProject.setName( "test project" );
 
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
-
         String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
 
         Resource resource = new Resource();
@@ -522,6 +538,7 @@
 
     }
 
+    @Test
     public void testExcludeOneFile()
         throws Exception
     {
@@ -560,6 +577,7 @@
         assertFalse( excludeDir.exists() );
     }
 
+    @Test
     public void testTargetAbsolutePath()
         throws Exception
     {
@@ -599,6 +617,7 @@
         assertEquals( "includefile.txt", files[0].getName() );
     }
 
+    @Test
     public void testTargetPath()
         throws Exception
     {
@@ -629,6 +648,7 @@
     }
 
     @SuppressWarnings( "serial" )
+    @Test
     public void testEmptyDirectories()
         throws Exception
     {
@@ -681,6 +701,7 @@
     }
 
     @SuppressWarnings( "serial" )
+    @Test
     public void testShouldReturnGitIgnoreFiles()
         throws Exception
     {
@@ -776,6 +797,7 @@
      * unit test for MSHARED-81 : https://issues.apache.org/jira/browse/MSHARED-81
      */
     @SuppressWarnings( "serial" )
+    @Test
     public void testMSHARED81()
         throws Exception
     {
@@ -870,6 +892,7 @@
      * unit test for edge cases : https://issues.apache.org/jira/browse/MSHARED-228
      */
     @SuppressWarnings( "serial" )
+    @Test
     public void testEdgeCases()
         throws Exception
     {
@@ -926,6 +949,7 @@
     }
 
     // MSHARED-220: Apply filtering to filenames
+    @Test
     public void testFilterFileName()
         throws Exception
     {
@@ -955,6 +979,7 @@
     /**
      * MRESOURCES-171: Use correct encoding when filtering properties-files
      */
+    @Test
     public void testFilterPropertiesFiles()
         throws Exception
     {
@@ -980,6 +1005,7 @@
                                              new File( targetPathFile, "test.txt" ) ) );
     }
 
+    @Test
     public void testGetEncoding()
     {
         File propertiesFile = new File( "file.properties" );
@@ -995,6 +1021,7 @@
         assertEquals( "UTF-8", DefaultMavenResourcesFiltering.getEncoding( regularFile, "UTF-8", "ISO-8859-1" ) );
     }
 
+    @Test
     public void testIsPropertiesFile()
     {
         // Properties files
diff --git a/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java b/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
index 0f23b80..8c623bc 100644
--- a/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/EscapeStringTest.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
@@ -29,23 +31,31 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.model.Resource;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Olivier Lamy
  */
+@PlexusTest
 public class EscapeStringTest
-    extends PlexusTestCase
 {
 
     File outputDirectory = new File( getBasedir(), "target/EscapeStringTest" );
 
     File unitDirectory = new File( getBasedir(), "src/test/units-files/escape-remove-char" );
 
-    @Override
+    @Inject
+    MavenResourcesFiltering mavenResourcesFiltering;
+
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         if ( outputDirectory.exists() )
         {
             FileUtils.deleteDirectory( outputDirectory );
@@ -53,6 +63,7 @@
         outputDirectory.mkdirs();
     }
 
+    @Test
     public void testEscape()
         throws Exception
     {
@@ -67,7 +78,6 @@
         projectProperties.put( "java.version", "zloug" );
         projectProperties.put( "replaceThis", "I am the replacement" );
         mavenProject.getModel().setProperties( projectProperties );
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         Resource resource = new Resource();
         List<Resource> resources = new ArrayList<>();
diff --git a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
index 1516aa8..a4fefe7 100644
--- a/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/FilteringUtilsTest.java
@@ -20,6 +20,10 @@
  */
 
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author John Casey
@@ -27,19 +31,22 @@
  * @since 1.0
  *
  */
+@PlexusTest
 public class FilteringUtilsTest
-    extends PlexusTestCase
 {
+    @Test
     public void testEscapeWindowsPathStartingWithDrive()
     {
         assertEquals( "C:\\\\Users\\\\Administrator", FilteringUtils.escapeWindowsPath( "C:\\Users\\Administrator" ) );
     }
 
+    @Test
     public void testEscapeWindowsPathMissingDriveLetter()
     {
         assertEquals( ":\\Users\\Administrator", FilteringUtils.escapeWindowsPath( ":\\Users\\Administrator" ) );
     }
 
+    @Test
     public void testEscapeWindowsPathInvalidDriveLetter()
     {
         assertEquals( "4:\\Users\\Administrator", FilteringUtils.escapeWindowsPath( "4:\\Users\\Administrator" ) );
@@ -62,6 +69,7 @@
      */
 
     // MSHARED-179
+    @Test
     public void testEscapeWindowsPathNotAtBeginning()
         throws Exception
     {
diff --git a/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
index 0195fff..2542f3b 100644
--- a/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -32,23 +34,32 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.model.Resource;
-import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.sonatype.plexus.build.incremental.ThreadBuildContext;
 import org.sonatype.plexus.build.incremental.test.TestIncrementalBuildContext;
 
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@PlexusTest
 public class IncrementalResourceFilteringTest
-    extends PlexusTestCase
 {
 
     File outputDirectory = new File( getBasedir(), "target/IncrementalResourceFilteringTest" );
 
     File unitDirectory = new File( getBasedir(), "src/test/units-files/incremental" );
 
-    @Override
+    @Inject
+    MavenResourcesFiltering mavenResourcesFiltering;
+
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         if ( outputDirectory.exists() )
         {
             FileUtils.deleteDirectory( outputDirectory );
@@ -56,6 +67,7 @@
         outputDirectory.mkdirs();
     }
 
+    @Test
     public void testSimpleIncrementalFiltering()
         throws Exception
     {
@@ -91,6 +103,7 @@
 
     }
 
+    @Test
     public void testOutputChange()
         throws Exception
     {
@@ -113,6 +126,7 @@
 
     }
 
+    @Test
     public void testFilterChange()
         throws Exception
     {
@@ -135,6 +149,7 @@
 
     }
 
+    @Test
     public void testFilterDeleted()
         throws Exception
     {
@@ -183,7 +198,6 @@
         projectProperties.put( "time", time );
         projectProperties.put( "java.version", "zloug" );
         mavenProject.getModel().setProperties( projectProperties );
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         String unitFilesDir = new File( unitDirectory, "files" ).getPath();
 
diff --git a/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java b/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
index 9f3fc9b..76d5c37 100644
--- a/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/InvalidMarkTest.java
@@ -19,26 +19,36 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.util.Collections;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.model.Resource;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.fail;
 
 /**
  * @author Mikolaj Izdebski
  */
+@PlexusTest
 public class InvalidMarkTest
-    extends PlexusTestCase
 {
     File outputDirectory = new File( getBasedir(), "target/LongLineTest" );
 
-    @Override
+    @Inject
+    MavenResourcesFiltering mavenResourcesFiltering;
+
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         if ( outputDirectory.exists() )
         {
             FileUtils.deleteDirectory( outputDirectory );
@@ -46,11 +56,10 @@
         outputDirectory.mkdirs();
     }
 
+    @Test
     public void testEscape()
         throws Exception
     {
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
-
         Resource resource = new Resource();
         resource.setDirectory( "src/test/units-files/MSHARED-325" );
         resource.setFiltering( true );
diff --git a/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
index cc102af..057289e 100644
--- a/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/MuliLinesMavenResourcesFilteringTest.java
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.ArrayList;
@@ -29,22 +31,30 @@
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.model.Resource;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Olivier Lamy
  *
  */
+@PlexusTest
 public class MuliLinesMavenResourcesFilteringTest
-    extends PlexusTestCase
 {
 
     File outputDirectory = new File( getBasedir(), "target/MuliLinesMavenResourcesFilteringTest" );
 
-    @Override
+    @Inject
+    MavenResourcesFiltering mavenResourcesFiltering;
+
+    @BeforeEach
     protected void setUp()
         throws Exception
     {
-        super.setUp();
         if ( outputDirectory.exists() )
         {
             FileUtils.deleteDirectory( outputDirectory );
@@ -55,6 +65,7 @@
     /**
      * @throws Exception
      */
+    @Test
     public void testFilteringTokenOnce()
         throws Exception
     {
@@ -68,7 +79,6 @@
         projectProperties.put( "foo", "bar" );
         projectProperties.put( "java.version", "zloug" );
         mavenProject.getModel().setProperties( projectProperties );
-        MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
 
         String unitFilesDir = getBasedir() + "/src/test/units-files/MRESOURCES-104";
 
diff --git a/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java b/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
index e1b8a4e..4a0507d 100644
--- a/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/MultiDelimiterInterpolatorFilterReaderLineEndingTest.java
@@ -19,7 +19,7 @@
  * under the License.
  */
 
-import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.when;
@@ -33,8 +33,8 @@
 import org.apache.commons.io.IOUtils;
 import org.codehaus.plexus.interpolation.Interpolator;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
-import org.junit.Before;
-import org.junit.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -46,7 +46,7 @@
     private Interpolator interpolator;
 
     @Override
-    @Before
+    @BeforeEach
     public void onSetup()
     {
         MockitoAnnotations.initMocks( this );
diff --git a/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java b/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
index 107d406..720ddf6 100644
--- a/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/PropertyUtilsTest.java
@@ -25,19 +25,27 @@
 import java.util.ArrayList;
 import java.util.Properties;
 
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * @author Olivier Lamy
  * @since 1.0-beta-1
  *
  */
+@PlexusTest
 public class PropertyUtilsTest
-    extends PlexusTestCase
 {
     private static File testDirectory = new File( getBasedir(), "target/test-classes/" );
 
+    @Test
     public void testBasic()
         throws Exception
     {
@@ -62,6 +70,7 @@
         assertTrue( prop.getProperty( "ghost" ).equals( "${non_existent}" ) );
     }
 
+    @Test
     public void testSystemProperties()
         throws Exception
     {
@@ -83,17 +92,18 @@
         assertTrue( prop.getProperty( "key" ).equals( System.getProperty( "user.dir" ) ) );
     }
 
+    @Test
     public void testException()
         throws Exception
     {
         File nonExistent = new File( testDirectory, "not_existent_file" );
 
-        assertFalse( "property file exist: " + nonExistent.toString(), nonExistent.exists() );
+        assertFalse( nonExistent.exists(), "property file exist: " + nonExistent.toString() );
 
         try
         {
             PropertyUtils.loadPropertyFile( nonExistent, true, false );
-            assertTrue( "Exception failed", false );
+            assertTrue( false, "Exception failed" );
         }
         catch ( Exception ex )
         {
@@ -101,6 +111,7 @@
         }
     }
 
+    @Test
     public void testloadpropertiesFile()
         throws Exception
     {
@@ -120,6 +131,7 @@
      *
      * @throws IOException if problem writing file
      */
+    @Test
     public void testCircularReferences()
         throws IOException
     {
@@ -153,6 +165,7 @@
      *
      * @throws IOException if problem writing file
      */
+    @Test
     public void testCircularReferences3Vars()
         throws IOException
     {
@@ -268,45 +281,297 @@
         }
 
         @Override
-        public void fatalError( String message )
+        public String getName()
         {
-            // nothing
+            return null;
         }
 
         @Override
-        public void fatalError( String message, Throwable throwable )
-        {
-            // nothing
-        }
-
-        @Override
-        public boolean isFatalErrorEnabled()
+        public boolean isTraceEnabled()
         {
             return false;
         }
 
         @Override
-        public int getThreshold()
+        public void trace( String s )
         {
-            return 0;
+
         }
 
         @Override
-        public void setThreshold( int threshold )
+        public void trace( String s, Object o )
         {
-            // nothing
+
         }
 
         @Override
-        public Logger getChildLogger( String name )
+        public void trace( String s, Object o, Object o1 )
         {
-            return null;
+
         }
 
         @Override
-        public String getName()
+        public void trace( String s, Object... objects )
         {
-            return null;
+
+        }
+
+        @Override
+        public void trace( String s, Throwable throwable )
+        {
+
+        }
+
+        @Override
+        public boolean isTraceEnabled( Marker marker )
+        {
+            return false;
+        }
+
+        @Override
+        public void trace( Marker marker, String s )
+        {
+
+        }
+
+        @Override
+        public void trace( Marker marker, String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void trace( Marker marker, String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void trace( Marker marker, String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void trace( Marker marker, String s, Throwable throwable )
+        {
+
+        }
+
+        @Override
+        public void debug( String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void debug( String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void debug( String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public boolean isDebugEnabled( Marker marker )
+        {
+            return false;
+        }
+
+        @Override
+        public void debug( Marker marker, String s )
+        {
+
+        }
+
+        @Override
+        public void debug( Marker marker, String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void debug( Marker marker, String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void debug( Marker marker, String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void debug( Marker marker, String s, Throwable throwable )
+        {
+
+        }
+
+        @Override
+        public void info( String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void info( String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void info( String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public boolean isInfoEnabled( Marker marker )
+        {
+            return false;
+        }
+
+        @Override
+        public void info( Marker marker, String s )
+        {
+
+        }
+
+        @Override
+        public void info( Marker marker, String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void info( Marker marker, String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void info( Marker marker, String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void info( Marker marker, String s, Throwable throwable )
+        {
+
+        }
+
+        @Override
+        public void warn( String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void warn( String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void warn( String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public boolean isWarnEnabled( Marker marker )
+        {
+            return false;
+        }
+
+        @Override
+        public void warn( Marker marker, String s )
+        {
+
+        }
+
+        @Override
+        public void warn( Marker marker, String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void warn( Marker marker, String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void warn( Marker marker, String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void warn( Marker marker, String s, Throwable throwable )
+        {
+
+        }
+
+        @Override
+        public void error( String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void error( String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void error( String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public boolean isErrorEnabled( Marker marker )
+        {
+            return false;
+        }
+
+        @Override
+        public void error( Marker marker, String s )
+        {
+
+        }
+
+        @Override
+        public void error( Marker marker, String s, Object o )
+        {
+
+        }
+
+        @Override
+        public void error( Marker marker, String s, Object o, Object o1 )
+        {
+
+        }
+
+        @Override
+        public void error( Marker marker, String s, Object... objects )
+        {
+
+        }
+
+        @Override
+        public void error( Marker marker, String s, Throwable throwable )
+        {
+
         }
     }
 }
diff --git a/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java b/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
index f8d27e4..6c97ff1 100644
--- a/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
+++ b/src/test/java/org/apache/maven/shared/filtering/StubMavenProject.java
@@ -41,8 +41,9 @@
 
     private Model model = new Model();
     private File basedir;
+    private boolean executionRoot;
 
-    protected StubMavenProject( File basedir )
+    public StubMavenProject( File basedir )
     {
         this.basedir = basedir;
     }
@@ -138,7 +139,17 @@
     @Override
     public Path getBasedir()
     {
-        return basedir.toPath();
+        return basedir != null ? basedir.toPath() : null;
     }
 
+    @Override
+    public boolean isExecutionRoot()
+    {
+        return executionRoot;
+    }
+
+    public void setExecutionRoot( boolean executionRoot )
+    {
+        this.executionRoot = executionRoot;
+    }
 }
diff --git a/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java b/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
index cbdb3a1..af617e8 100644
--- a/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
+++ b/src/test/java/org/apache/maven/shared/filtering/TestReflectionProperties.java
@@ -19,21 +19,30 @@
  * under the License.
  */
 
+import javax.inject.Inject;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.util.Properties;
 
-import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.testing.PlexusTest;
+import org.junit.jupiter.api.Test;
+
+import static org.codehaus.plexus.testing.PlexusExtension.getBasedir;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
  * @author Olivier Lamy
  * @since 1.0-beta-1
  *
  */
+@PlexusTest
 public class TestReflectionProperties
-    extends PlexusTestCase
 {
+    @Inject
+    MavenFileFilter mavenFileFilter;
 
+    @Test
     public void testSimpleFiltering()
         throws Exception
     {
@@ -42,7 +51,6 @@
         mavenProject.setGroupId( "org.apache" );
         Properties userProperties = new Properties();
         userProperties.setProperty( "foo", "bar" );
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
 
         File from = new File( getBasedir() + "/src/test/units-files/reflection-test.properties" );
         File to = new File( getBasedir() + "/target/reflection-test.properties" );
@@ -68,6 +76,7 @@
         assertEquals( "none filtered", reading.get( "none" ) );
     }
 
+    @Test
     public void testSimpleNonFiltering()
         throws Exception
     {
@@ -77,7 +86,6 @@
         mavenProject.setGroupId( "org.apache" );
         Properties userProperties = new Properties();
         userProperties.setProperty( "foo", "bar" );
-        MavenFileFilter mavenFileFilter = lookup( MavenFileFilter.class );
 
         File from = new File( getBasedir() + "/src/test/units-files/reflection-test.properties" );
         File to = new File( getBasedir() + "/target/reflection-test.properties" );