Author: alien11689
Date: Wed Dec 28 08:01:27 2016
New Revision: 1776239
URL: http://svn.apache.org/viewvc?rev=1776239&view=rev
Log:
[ARIES-1644] Find packages to scan in BMP when scanPaths is missing
Added:
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/PackageFinder.java
Modified:
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/GenerateMojo.java
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=1776239&r1=1776238&r2=1776239&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
Wed Dec 28 08:01:27 2016
@@ -41,6 +41,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -48,14 +49,14 @@ import java.util.Set;
/**
* Generates blueprint from CDI annotations
*/
-@Mojo(name="blueprint-generate",
requiresDependencyResolution=ResolutionScope.COMPILE,
- defaultPhase=LifecyclePhase.PROCESS_CLASSES, inheritByDefault=false)
+@Mojo(name = "blueprint-generate", requiresDependencyResolution =
ResolutionScope.COMPILE,
+ defaultPhase = LifecyclePhase.PROCESS_CLASSES, inheritByDefault = false)
public class GenerateMojo extends AbstractMojo {
- @Parameter(defaultValue="${project}", required=true)
+ @Parameter(defaultValue = "${project}", required = true)
protected MavenProject project;
- @Parameter(required=true)
+ @Parameter
protected List<String> scanPaths;
/**
@@ -70,14 +71,14 @@ public class GenerateMojo extends Abstra
/**
* Name of file to generate
*/
- @Parameter(defaultValue="autowire.xml")
+ @Parameter(defaultValue = "autowire.xml")
protected String generatedFileName;
/**
* Base directory to generate into
* (relative to ${project.build.directory}/generated-sources/blueprint).
*/
- @Parameter(defaultValue="OSGI-INF/blueprint/")
+ @Parameter(defaultValue = "OSGI-INF/blueprint/")
private String generatedDir;
/**
@@ -97,8 +98,19 @@ public class GenerateMojo extends Abstra
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
- if (scanPaths.size() == 0 || scanPaths.iterator().next() == null) {
- throw new MojoExecutionException("Configuration scanPaths must be
set");
+ List<String> toScan = scanPaths;
+ if (scanPaths == null || scanPaths.size() == 0 ||
scanPaths.iterator().next() == null) {
+ getLog().info("Scan paths not specified - searching for packages");
+ Set<String> packages =
PackageFinder.findPackagesInSources(project.getCompileSourceRoots());
+ if (packages.contains(null)) {
+ throw new MojoExecutionException("Found file without package");
+ }
+ toScan = new ArrayList<>(packages);
+ Collections.sort(toScan);
+
+ }
+ for (String aPackage : toScan) {
+ getLog().info("Package " + aPackage + " will be scan");
}
if (!buildContext.hasDelta(new
File(project.getCompileSourceRoots().iterator().next()))) {
return;
@@ -107,7 +119,7 @@ public class GenerateMojo extends Abstra
try {
ClassFinder finder = createProjectScopeFinder();
- Set<Class<?>> classes = FilteredClassFinder.findClasses(finder,
scanPaths);
+ Set<Class<?>> classes = FilteredClassFinder.findClasses(finder,
toScan);
BlueprintConfiguration blueprintConfiguration = new
BlueprintConfigurationImpl(namespaces, defaultActivation, customParameters);
Added:
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/PackageFinder.java
URL:
http://svn.apache.org/viewvc/aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/PackageFinder.java?rev=1776239&view=auto
==============================================================================
---
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/PackageFinder.java
(added)
+++
aries/trunk/blueprint/plugin/blueprint-maven-plugin/src/main/java/org/apache/aries/blueprint/plugin/PackageFinder.java
Wed Dec 28 08:01:27 2016
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.aries.blueprint.plugin;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.Stack;
+
+class PackageFinder {
+ static Set<String> findPackagesInSources(List<String> compileSourceRoots) {
+ Set<String> packages = new HashSet<>();
+ for (String src : compileSourceRoots) {
+ File root = new File(src);
+ if (root.exists()) {
+ packages.addAll(findPackageRoots(root));
+ }
+ }
+ return packages;
+ }
+
+ private static Set<String> findPackageRoots(File file) {
+ Set<String> packages = new HashSet<>();
+ Stack<SearchFile> stack = new Stack<>();
+ stack.add(new SearchFile(null, file));
+ while (!stack.isEmpty()) {
+ SearchFile cur = stack.pop();
+ File[] files = cur.f.listFiles();
+ boolean foundFile = false;
+ for (File child : files) {
+ if (child.isFile()) {
+ packages.add(cur.prefix);
+ foundFile = true;
+ }
+ }
+ if (foundFile) {
+ continue;
+ }
+ for (File child : files) {
+ if (child.isDirectory()) {
+ stack.add(new SearchFile(cur.prefix != null ? cur.prefix +
"." + child.getName() : child.getName(), child));
+ }
+ }
+ }
+ return packages;
+ }
+
+ static class SearchFile {
+ String prefix;
+ File f;
+
+ public SearchFile(String prefix, File f) {
+ this.prefix = prefix;
+ this.f = f;
+ }
+ }
+}