JCRVLT-501 (almost) get rid of plexus-utils (#53)

remove unneeded Apache Commons dependencies
rely on Maven 3.1+ way of resolving artifacts
diff --git a/pom.xml b/pom.xml
index bd05a83..90652ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -281,6 +281,17 @@
             <url>scm:svn:https://svn.apache.org/repos/asf/jackrabbit/site/live/filevault-package-maven-plugin-archives/${project.version}</url>
         </site>
     </distributionManagement>
+    
+    <dependencyManagement>
+        <dependencies>
+            <!-- manage to the version used by plexus-archiver, only used transitively -->
+            <dependency>
+                <groupId>org.codehaus.plexus</groupId>
+                <artifactId>plexus-utils</artifactId>
+                <version>3.3.0</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
     <!-- ====================================================================== -->
     <!-- D E P E N D E N C I E S                                                -->
@@ -333,11 +344,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.maven</groupId>
-            <artifactId>maven-compat</artifactId>
-            <version>${maven.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.maven</groupId>
             <artifactId>maven-model</artifactId>
             <version>${maven.version}</version>
         </dependency>
@@ -352,24 +358,13 @@
             <version>4.2.3</version>
         </dependency>
         <dependency>
-            <groupId>org.codehaus.plexus</groupId>
-            <artifactId>plexus-utils</artifactId>
-            <version>3.3.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-            <version>3.9</version>
-        </dependency>
-        <dependency>
-            <groupId>commons-io</groupId>
-            <artifactId>commons-io</artifactId>
-            <version>2.6</version>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-shared-utils</artifactId>
+            <version>3.3.3</version>
         </dependency>
         <dependency>
             <groupId>org.jetbrains</groupId>
             <artifactId>annotations</artifactId>
-            <version>18.0.0</version>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
@@ -386,19 +381,19 @@
         <dependency>
             <groupId>biz.aQute.bnd</groupId>
             <artifactId>biz.aQute.bndlib</artifactId>
-            <version>3.3.0</version>
+            <version>5.2.0</version>
         </dependency>
 
         <!-- used in the CheckSignature mojo -->
         <dependency>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>animal-sniffer-maven-plugin</artifactId>
-            <version>1.16</version>
+            <version>1.19</version>
         </dependency>
         <dependency>
             <groupId>org.codehaus.mojo</groupId>
             <artifactId>animal-sniffer</artifactId>
-            <version>1.16</version>
+            <version>1.19</version>
         </dependency>
 
         <!-- class analyzer -->
@@ -428,12 +423,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.apache.maven.shared</groupId>
-            <artifactId>maven-shared-utils</artifactId>
-            <version>3.3.3</version>
-        </dependency>
-        
-        <dependency>
             <groupId>org.eclipse.aether</groupId>
             <artifactId>aether-api</artifactId>
             <version>${aether.version}</version>
@@ -450,7 +439,6 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.12</version>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
index 888bbd0..4708063 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
@@ -20,6 +20,7 @@
 import java.io.IOException;
 import java.nio.file.Path;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.jar.JarFile;
 
@@ -27,9 +28,16 @@
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.util.Constants;
 import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.ArtifactResult;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -221,6 +229,17 @@
         return metaInfDirectory;
     }
 
+    protected static File resolveArtifact(org.eclipse.aether.artifact.Artifact artifact, RepositorySystem repoSystem, RepositorySystemSession repoSession, List<RemoteRepository> repositories) throws MojoExecutionException {
+        ArtifactRequest req = new ArtifactRequest(artifact, repositories, null);
+        ArtifactResult resolutionResult;
+        try {
+            resolutionResult = repoSystem.resolveArtifact(repoSession, req);
+            return resolutionResult.getArtifact().getFile();
+        } catch( ArtifactResolutionException e ) {
+            throw new MojoExecutionException("Artifact " + artifact + " could not be resolved.", e);
+        }
+    }
+
     Filters loadGeneratedFilterFile() throws IOException, ConfigurationException {
         // load filters for further processing
         Filters filters = new Filters();
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractSourceAndMetadataPackageMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractSourceAndMetadataPackageMojo.java
index cc74ad5..25bae89 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractSourceAndMetadataPackageMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractSourceAndMetadataPackageMojo.java
@@ -21,7 +21,7 @@
 
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.codehaus.plexus.util.DirectoryScanner;
+import org.apache.maven.shared.utils.io.DirectoryScanner;
 
 /**
  * Commons ancestor for all mojos dealing with package source files and meta data files
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/CheckSignatureMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/CheckSignatureMojo.java
index d0fe28b..f85533a 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/CheckSignatureMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/CheckSignatureMojo.java
@@ -19,6 +19,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -26,10 +27,6 @@
 import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.AbstractArtifactResolutionException;
-import org.apache.maven.artifact.resolver.ArtifactResolver;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -43,6 +40,10 @@
 import org.codehaus.mojo.animal_sniffer.SignatureChecker;
 import org.codehaus.mojo.animal_sniffer.maven.MavenLogger;
 import org.codehaus.mojo.animal_sniffer.maven.Signature;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.repository.RemoteRepository;
 
 /**
  * Maven goal which checks the embedded libraries against a defined
@@ -63,7 +64,7 @@
     private MavenProject project;
 
     /**
-     * list of embedded bundles
+     * list of embedded bundles to scan
      */
     @Parameter
     private Embedded[] embeddeds = new Embedded[0];
@@ -76,16 +77,20 @@
     private boolean failOnMissingEmbed;
 
 
-    /**
-     */
     @Component
-    private ArtifactFactory artifactFactory;
+    private RepositorySystem repoSystem;
+
+    @Parameter( defaultValue = "${repositorySystemSession}", readonly = true, required = true )
+    private RepositorySystemSession repoSession;
+
+    @Parameter( defaultValue = "${project.remoteProjectRepositories}", readonly = true, required = true )
+    private List<RemoteRepository> repositories;
 
     /**
      * Project classpath.
      */
     @Parameter(property = "project.compileClasspathElements", required = true, readonly = true)
-    private List classpathElements;
+    private List<String> classpathElements;
 
     /**
      * Class names to ignore signatures for (wildcards accepted).
@@ -94,16 +99,6 @@
     private String[] ignores;
 
     /**
-     */
-    @Parameter(property = "localRepository", readonly = true)
-    private ArtifactRepository localRepository;
-
-    /**
-     */
-    @Component
-    private ArtifactResolver resolver;
-
-    /**
      * Signature module to use.
      */
     @Parameter
@@ -120,9 +115,8 @@
      */
     private Set<String> buildPackageList() throws IOException {
         ClassListBuilder plb = new ClassListBuilder(new MavenLogger(getLog()));
-        for (Object classpathElement : classpathElements) {
-            String path = (String) classpathElement;
-            plb.process(new File(path));
+        for (String classpathElement : classpathElements) {
+            plb.process(new File(classpathElement));
         }
         return plb.getPackages();
     }
@@ -140,9 +134,8 @@
         try {
             getLog().info("Checking unresolved references to " + signature);
 
-            org.apache.maven.artifact.Artifact a = signature.createArtifact(artifactFactory);
-
-            resolver.resolve(a, project.getRemoteArtifactRepositories(), localRepository);
+            org.eclipse.aether.artifact.Artifact artifact = new DefaultArtifact(signature.getGroupId(),signature.getArtifactId(), "signature", signature.getVersion());
+            File signatureFile = AbstractMetadataPackageMojo.resolveArtifact(artifact, repoSystem, repoSession, repositories);
             // just check code from this module
             final Set<String> ignoredPackages = buildPackageList();
 
@@ -159,20 +152,20 @@
                 getLog().debug(ignoredPackages.toString());
             }
 
-            final SignatureChecker signatureChecker = new SignatureChecker(new FileInputStream(a.getFile()),
-                    ignoredPackages, new MavenLogger(getLog()));
-            signatureChecker.setCheckJars(true);
-            signatureChecker.setSourcePath(Collections.singletonList(new File(project.getBuild().getSourceDirectory())));
-            signatureChecker.process(getEmbeddeds().toArray(new File[0]));
+            try (InputStream signatureInput = new FileInputStream(signatureFile)) {
+                final SignatureChecker signatureChecker = new SignatureChecker(signatureInput,
+                        ignoredPackages, new MavenLogger(getLog()));
+                signatureChecker.setCheckJars(true);
+                signatureChecker.setSourcePath(Collections.singletonList(new File(project.getBuild().getSourceDirectory())));
+                signatureChecker.process(getEmbeddeds().toArray(new File[0]));
 
-            if (signatureChecker.isSignatureBroken()) {
-                throw new MojoFailureException(
-                        "Signature errors found. Verify them and put @IgnoreJRERequirement on them.");
+                if (signatureChecker.isSignatureBroken()) {
+                    throw new MojoFailureException(
+                            "Signature errors found. Verify them and put @IgnoreJRERequirement on them.");
+                }
             }
         } catch (IOException e) {
             throw new MojoExecutionException("Failed to check signatures", e);
-        } catch (AbstractArtifactResolutionException e) {
-            throw new MojoExecutionException("Failed to obtain signature: " + signature, e);
         }
     }
 
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
index e8c8886..e13e0ab 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
@@ -78,15 +78,12 @@
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.archiver.jar.ManifestException;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.IOUtil;
-import org.codehaus.plexus.util.StringUtils;
+import org.apache.maven.shared.utils.io.FileUtils;
+import org.apache.maven.shared.utils.io.IOUtil;
+import org.apache.maven.shared.utils.StringUtils;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
-import org.eclipse.aether.resolution.ArtifactRequest;
-import org.eclipse.aether.resolution.ArtifactResolutionException;
-import org.eclipse.aether.resolution.ArtifactResult;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 import aQute.bnd.header.Attrs;
@@ -1233,13 +1230,6 @@
     }
     
     private File resolveArtifact(org.eclipse.aether.artifact.Artifact artifact) throws MojoExecutionException {
-        ArtifactRequest req = new ArtifactRequest(artifact, this.repositories, null);
-        ArtifactResult resolutionResult;
-        try {
-            resolutionResult = this.repoSystem.resolveArtifact( this.repoSession, req );
-            return resolutionResult.getArtifact().getFile();
-        } catch( ArtifactResolutionException e ) {
-            throw new MojoExecutionException( "Artifact " + artifact + " could not be resolved.", e );
-        }
+        return resolveArtifact(artifact, repoSystem, repoSession, repositories);
     }
 }
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/MavenBasedPackageDependency.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/MavenBasedPackageDependency.java
index ac1eae1..fa88841 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/MavenBasedPackageDependency.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/MavenBasedPackageDependency.java
@@ -30,7 +30,7 @@
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.util.StringUtils;
+import org.apache.maven.shared.utils.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
index fd298cb..d2c0190 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/ValidateFilesMojo.java
@@ -54,8 +54,8 @@
 import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
+import org.apache.maven.shared.utils.io.DirectoryScanner;
 import org.codehaus.plexus.util.AbstractScanner;
-import org.codehaus.plexus.util.DirectoryScanner;
 import org.codehaus.plexus.util.Scanner;
 
 /** 
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
index d08df70..f0189b1 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
@@ -61,10 +61,10 @@
 import org.codehaus.plexus.archiver.FileSet;
 import org.codehaus.plexus.archiver.jar.ManifestException;
 import org.codehaus.plexus.archiver.util.DefaultFileSet;
-import org.codehaus.plexus.util.DirectoryScanner;
-import org.codehaus.plexus.util.FileUtils;
-import org.codehaus.plexus.util.MatchPatterns;
-import org.codehaus.plexus.util.StringUtils;
+import org.apache.maven.shared.utils.io.DirectoryScanner;
+import org.apache.maven.shared.utils.io.FileUtils;
+import org.apache.maven.shared.utils.io.MatchPatterns;
+import org.apache.maven.shared.utils.StringUtils;
 import org.jetbrains.annotations.NotNull;
 
 /** Builds a content package. */
@@ -262,7 +262,7 @@
         Path destFile = Paths.get(destFileName);
         if ((destFile.startsWith(Constants.ROOT_DIR) && enableJcrRootFiltering) ||
             (destFile.startsWith(Constants.META_INF) && enableMetaInfFiltering)) {
-            MatchPatterns matchPatterns = MatchPatterns.from(filteredFilePatterns);
+            MatchPatterns matchPatterns = MatchPatterns.from(filteredFilePatterns.toArray(new String[0]));
             if (filteredFilePatterns == null || matchPatterns.matches(sourceFile.toString(), true)) {
                 getLog().info("Apply filtering to " + getProjectRelativeFilePath(sourceFile));
                 Resource resource = new Resource();