You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2014/02/19 17:26:34 UTC
git commit: [KARAF-2763] Improvements to the scr plugin to not scan
classes in dependencies and to handle lifecycle methods correctly Also remove
System.out.println() calls.
Repository: karaf
Updated Branches:
refs/heads/master 99585cf3b -> b546fdf23
[KARAF-2763] Improvements to the scr plugin to not scan classes in dependencies and to handle lifecycle methods correctly
Also remove System.out.println() calls.
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo
Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b546fdf2
Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b546fdf2
Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b546fdf2
Branch: refs/heads/master
Commit: b546fdf237f4b1314ec4426257da0c5325261abe
Parents: 99585cf
Author: Guillaume Nodet <gn...@gmail.com>
Authored: Wed Feb 19 17:25:52 2014 +0100
Committer: Guillaume Nodet <gn...@gmail.com>
Committed: Wed Feb 19 17:25:52 2014 +0100
----------------------------------------------------------------------
.../karaf/tooling/scr/ScrCommandMojo.java | 69 ++++++++++++++++----
1 file changed, 58 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/karaf/blob/b546fdf2/tooling/karaf-scr-maven-plugin/src/main/java/org/apache/karaf/tooling/scr/ScrCommandMojo.java
----------------------------------------------------------------------
diff --git a/tooling/karaf-scr-maven-plugin/src/main/java/org/apache/karaf/tooling/scr/ScrCommandMojo.java b/tooling/karaf-scr-maven-plugin/src/main/java/org/apache/karaf/tooling/scr/ScrCommandMojo.java
index 377dd60..046554c 100644
--- a/tooling/karaf-scr-maven-plugin/src/main/java/org/apache/karaf/tooling/scr/ScrCommandMojo.java
+++ b/tooling/karaf-scr-maven-plugin/src/main/java/org/apache/karaf/tooling/scr/ScrCommandMojo.java
@@ -13,6 +13,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -26,6 +27,8 @@ import org.apache.felix.service.command.Function;
import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.commands.CommandWithAction;
import org.apache.karaf.shell.console.CompletableFunction;
+import org.apache.karaf.shell.inject.Destroy;
+import org.apache.karaf.shell.inject.Init;
import org.apache.karaf.shell.inject.Reference;
import org.apache.karaf.shell.inject.Service;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
@@ -77,7 +80,7 @@ public class ScrCommandMojo extends AbstractMojo {
Command cmd = clazz.getAnnotation(Command.class);
if (cmd != null) {
- System.out.println("\nFound command: " + clazz.getName() + "\n\t" + cmd.scope() + ":" + cmd.name() + "\n");
+// System.out.println("\nFound command: " + clazz.getName() + "\n\t" + cmd.scope() + ":" + cmd.name() + "\n");
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.1'?>\n");
@@ -111,13 +114,21 @@ public class ScrCommandMojo extends AbstractMojo {
w.close();
hasCommand = true;
} else {
- System.out.println("\nFound service: " + clazz.getName() + "\n");
+// System.out.println("\nFound service: " + clazz.getName() + "\n");
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.1'?>\n");
+
+ String[] lf = getLifecycleMethods(clazz);
sb.append("<scr:component xmlns:scr=\"http://www.osgi.org/xmlns/scr/v1.1.0\" name=\"")
- .append(clazz.getName())
- .append("\" activate=\"activate\" deactivate=\"deactivate\">\n");
+ .append(clazz.getName()).append("\"");
+ if (lf[0] != null) {
+ sb.append(" activate=\"activate\"");
+ }
+ if (lf[1] != null) {
+ sb.append(" deactivate=\"deactivate\"");
+ }
+ sb.append(">\n");
sb.append(" <implementation class=\"").append(clazz.getName()).append("\"/>\n");
sb.append(" <service>\n");
List<Class> allClasses = new ArrayList<Class>();
@@ -176,6 +187,31 @@ public class ScrCommandMojo extends AbstractMojo {
}
}
+ private String[] getLifecycleMethods(Class<?> clazz) {
+ Method activate = null;
+ Method deactivate = null;
+ for (Method method : clazz.getMethods()) {
+ if (method.getAnnotation(Init.class) != null) {
+ if (activate == null) {
+ activate = method;
+ } else {
+ throw new IllegalArgumentException("Multiple methods annotated with @Init found");
+ }
+ }
+ if (method.getAnnotation(Destroy.class) != null) {
+ if (deactivate == null) {
+ deactivate = method;
+ } else {
+ throw new IllegalArgumentException("Multiple methods annotated with @Destroy found");
+ }
+ }
+ }
+ return new String[] {
+ activate != null ? activate.getName() : null,
+ deactivate != null ? deactivate.getName() : null
+ };
+ }
+
private String[] getBindMethods(Class<?> clazz, String key, Class type) {
String cap = key.substring(0, 1).toUpperCase() + key.substring(1);
Method bind = null;
@@ -225,12 +261,23 @@ public class ScrCommandMojo extends AbstractMojo {
}
private ClassLoader getClassLoader() throws MojoFailureException, DependencyResolutionRequiredException, MalformedURLException {
- List<URL> urls = new ArrayList<URL>();
- for (Object object : project.getCompileClasspathElements()) {
- String path = (String) object;
- urls.add(new File(path).toURL());
+ List<String> roots = Arrays.asList(project.getBuild().getOutputDirectory());
+ List<String> paths = project.getCompileClasspathElements();
+ List<URL> parentUrls = new ArrayList<URL>();
+ List<URL> childUrls = new ArrayList<URL>();
+
+// System.out.println("Roots: " + roots);
+// System.out.println("Paths: " + paths);
+ for (String path : paths) {
+ URL url = new File(path).toURL();
+ if (roots.contains(path)) {
+ childUrls.add(url);
+ } else {
+ parentUrls.add(url);
+ }
}
- ClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[] {}), getClass().getClassLoader());
+ ClassLoader classLoader = new URLClassLoader(childUrls.toArray(new URL[] {}),
+ new URLClassLoader(parentUrls.toArray(new URL[] {}), getClass().getClassLoader()));
return classLoader;
}
@@ -242,7 +289,7 @@ public class ScrCommandMojo extends AbstractMojo {
header = pkg;
}
project.getProperties().setProperty("Private-Package", header);
- System.out.println("\nPrivate-Package: " + header + "\n");
+// System.out.println("\nPrivate-Package: " + header + "\n");
}
/**
@@ -274,7 +321,7 @@ public class ScrCommandMojo extends AbstractMojo {
sb.append(entry);
}
project.getProperties().setProperty("Service-Component", sb.toString());
- System.out.println("\nService-Component: " + sb.toString() + "\n");
+// System.out.println("\nService-Component: " + sb.toString() + "\n");
}
}