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 {