Author: alien11689
Date: Fri Apr 27 12:22:16 2018
New Revision: 1830338

URL: http://svn.apache.org/viewvc?rev=1830338&view=rev
Log:
[ARIES-1792] Add exclude and include artifact filters for bean search

Added:
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/ArtifactFilter.java
Modified:
    
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java

Added: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/ArtifactFilter.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/ArtifactFilter.java?rev=1830338&view=auto
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/ArtifactFilter.java
 (added)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/ArtifactFilter.java
 Fri Apr 27 12:22:16 2018
@@ -0,0 +1,57 @@
+package org.apache.aries.blueprint.plugin;
+
+import org.apache.maven.artifact.Artifact;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+class ArtifactFilter {
+
+    private final Set<Pattern> includeArtifactPatterns;
+    private final Set<Pattern> excludeArtifactPatterns;
+
+    ArtifactFilter(Set<String> includeArtifacts, Set<String> excludeArtifacts) 
{
+        includeArtifactPatterns = buildArtifactPatterns(includeArtifacts);
+        excludeArtifactPatterns = buildPatterns(excludeArtifacts);
+    }
+
+    boolean shouldExclude(Artifact artifact) {
+        return !canBeIncluded(artifact) || shouldBeExcluded(artifact);
+    }
+
+    private Set<Pattern> buildArtifactPatterns(Set<String> includeArtifacts) {
+        if (includeArtifacts.isEmpty()) {
+            Set<Pattern> patterns = new HashSet<>();
+            patterns.add(Pattern.compile(".*"));
+            return patterns;
+        }
+        return buildPatterns(includeArtifacts);
+    }
+
+    private Set<Pattern> buildPatterns(Set<String> artifactFilters) {
+        Set<Pattern> artifactPatterns = new HashSet<>();
+        for (String artifactFilter : artifactFilters) {
+            artifactPatterns.add(Pattern.compile(artifactFilter));
+        }
+        return artifactPatterns;
+    }
+
+    private boolean shouldBeExcluded(Artifact artifact) {
+        for (Pattern excludeArtifactPattern : excludeArtifactPatterns) {
+            if (excludeArtifactPattern.matcher(artifact.toString()).matches()) 
{
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean canBeIncluded(Artifact artifact) {
+        for (Pattern includeArtifactPattern : includeArtifactPatterns) {
+            if (includeArtifactPattern.matcher(artifact.toString()).matches()) 
{
+                return true;
+            }
+        }
+        return false;
+    }
+}

Modified: 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java
URL: 
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java?rev=1830338&r1=1830337&r2=1830338&view=diff
==============================================================================
--- 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java
 (original)
+++ 
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java
 Fri Apr 27 12:22:16 2018
@@ -33,15 +33,16 @@ import org.apache.maven.plugins.annotati
 import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
 import org.apache.xbean.finder.ClassFinder;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
 import java.io.File;
 import java.io.OutputStream;
-import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -118,6 +119,18 @@ public class GenerateMojo extends Abstra
     @Parameter
     protected Map<String, String> customParameters;
 
+    /**
+     * Which artifacts should be included in finding beans process
+     */
+    @Parameter
+    private Set<String> includeArtifacts = new HashSet<>();
+
+    /**
+     * Which artifacts should be excluded from finding beans process
+     */
+    @Parameter
+    private Set<String> excludeArtifacts = new HashSet<>();
+
     @Override
     public void execute() throws MojoExecutionException, MojoFailureException {
         List<String> toScan = getPackagesToScan();
@@ -138,10 +151,18 @@ public class GenerateMojo extends Abstra
     }
 
     private void generateBlueprint(List<String> toScan, 
BlueprintConfigurationImpl blueprintConfiguration) throws Exception {
+        long startTime = System.currentTimeMillis();
         ClassFinder classFinder = createProjectScopeFinder();
+        getLog().debug("Creating package scope class finder: " + 
(System.currentTimeMillis() - startTime) + "ms");
+        startTime = System.currentTimeMillis();
         Set<Class<?>> classes = FilteredClassFinder.findClasses(classFinder, 
toScan);
+        getLog().debug("Finding bean classes: " + (System.currentTimeMillis() 
- startTime) + "ms");
+        startTime = System.currentTimeMillis();
         Blueprint blueprint = new Blueprint(blueprintConfiguration, classes);
+        getLog().debug("Creating blueprint model: " + 
(System.currentTimeMillis() - startTime) + "ms");
+        startTime = System.currentTimeMillis();
         writeBlueprintIfNeeded(blueprint);
+        getLog().debug("Writing blueprint: " + (System.currentTimeMillis() - 
startTime) + "ms");
     }
 
     private void writeBlueprintIfNeeded(Blueprint blueprint) throws Exception {
@@ -169,19 +190,36 @@ public class GenerateMojo extends Abstra
         fos.close();
     }
 
-    private ClassFinder createProjectScopeFinder() throws 
MalformedURLException {
+    private ClassFinder createProjectScopeFinder() throws Exception {
         List<URL> urls = new ArrayList<>();
 
+        long startTime = System.currentTimeMillis();
+        ClassRealm classRealm = new ClassRealm(new ClassWorld(), 
"maven-blueprint-plugin-classloader", getClass().getClassLoader());
+        classRealm.addURL(new 
File(project.getBuild().getOutputDirectory()).toURI().toURL());
         urls.add(new 
File(project.getBuild().getOutputDirectory()).toURI().toURL());
+
+        ArtifactFilter artifactFilter = new ArtifactFilter(includeArtifacts, 
excludeArtifacts);
+
         for (Object artifactO : project.getArtifacts()) {
             Artifact artifact = (Artifact) artifactO;
             File file = artifact.getFile();
-            if (file != null) {
-                urls.add(file.toURI().toURL());
+            if (file == null) {
+                continue;
+            }
+            URL artifactUrl = file.toURI().toURL();
+            classRealm.addURL(artifactUrl);
+            if (artifactFilter.shouldExclude(artifact)) {
+                getLog().debug("Excluded artifact: " + artifact);
+                continue;
             }
+            getLog().debug("Taken artifact: " + artifact);
+            urls.add(artifactUrl);
         }
-        ClassLoader loader = new URLClassLoader(urls.toArray(new 
URL[urls.size()]), getClass().getClassLoader());
-        return new ClassFinder(loader, urls);
+        getLog().debug(" Create class loader: " + (System.currentTimeMillis() 
- startTime) + "ms");
+        startTime = System.currentTimeMillis();
+        ClassFinder classFinder = new ClassFinder(classRealm, urls);
+        getLog().debug(" Building class finder: " + 
(System.currentTimeMillis() - startTime) + "ms");
+        return classFinder;
     }
 
     private List<String> getPackagesToScan() throws MojoExecutionException {


Reply via email to