Author: davsclaus
Date: Sat Apr  6 06:40:23 2013
New Revision: 1465202

URL: http://svn.apache.org/r1465202
Log:
CAMEL-6244: Fixed camel:run with blueprint. And fix scopes for camel-blueprint 
deps, so they wont conflict anymore with camel-test-blueprint etc.

Modified:
    camel/trunk/components/camel-blueprint/pom.xml
    
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java

Modified: camel/trunk/components/camel-blueprint/pom.xml
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-blueprint/pom.xml?rev=1465202&r1=1465201&r2=1465202&view=diff
==============================================================================
--- camel/trunk/components/camel-blueprint/pom.xml (original)
+++ camel/trunk/components/camel-blueprint/pom.xml Sat Apr  6 06:40:23 2013
@@ -75,11 +75,13 @@
         <dependency>
             <groupId>org.apache.aries.blueprint</groupId>
             <artifactId>org.apache.aries.blueprint.core</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.aries</groupId>
             <artifactId>org.apache.aries.util</artifactId>
             <version>${aries-util-version}</version>
+            <scope>provided</scope>
         </dependency>
 
         <!-- for testing -->

Modified: 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java?rev=1465202&r1=1465201&r2=1465202&view=diff
==============================================================================
--- 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
 (original)
+++ 
camel/trunk/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/RunMojo.java
 Sat Apr  6 06:40:23 2013
@@ -27,6 +27,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -349,6 +350,8 @@ public class RunMojo extends AbstractExe
 
     private Properties originalSystemProperties;
 
+    private String extraPluginDependencyArtifactId;
+
     /**
      * Execute goal.
      *
@@ -411,13 +414,13 @@ public class RunMojo extends AbstractExe
             getLog().info("Using org.apache.camel.spring.javaconfig.Main to 
initiate a CamelContext");
         } else if (useCdiMain) {
             mainClass = "org.apache.camel.cdi.Main";
-            // must include plugin dependencies for blueprint
-            includePluginDependencies = true;
+            // must include plugin dependencies for cdi
+            extraPluginDependencyArtifactId = "camel-cdi";
             getLog().info("Using " + mainClass + " to initiate a 
CamelContext");
         } else if (usingBlueprintMain) {
             mainClass = "org.apache.camel.test.blueprint.Main";
             // must include plugin dependencies for blueprint
-            includePluginDependencies = true;
+            extraPluginDependencyArtifactId = "camel-test-blueprint";
             getLog().info("Using org.apache.camel.test.blueprint.Main to 
initiate a CamelContext");
         } else if (mainClass != null) {
             getLog().info("Using custom " + mainClass + " to initiate a 
CamelContext");
@@ -652,14 +655,19 @@ public class RunMojo extends AbstractExe
      * @throws MojoExecutionException
      */
     private ClassLoader getClassLoader() throws MojoExecutionException {
-        List<URL> classpathURLs = new ArrayList<URL>();
+        Set<URL> classpathURLs = new LinkedHashSet<URL>();
         // project classpath must be first
         this.addRelevantProjectDependenciesToClasspath(classpathURLs);
+        // and extra plugin classpath
+        this.addExtraPluginDependenciesToClasspath(classpathURLs);
         // and plugin classpath last
         this.addRelevantPluginDependenciesToClasspath(classpathURLs);
 
         if (logClasspath) {
-            getLog().info("Classpath = " + classpathURLs);
+            getLog().info("Classpath:");
+            for (URL url : classpathURLs) {
+                getLog().info("  " + url.getFile().toString());
+            }
         }
         return new URLClassLoader(classpathURLs.toArray(new 
URL[classpathURLs.size()]));
     }
@@ -671,7 +679,7 @@ public class RunMojo extends AbstractExe
      * @param path classpath of {@link java.net.URL} objects
      * @throws MojoExecutionException
      */
-    private void addRelevantPluginDependenciesToClasspath(List<URL> path) 
throws MojoExecutionException {
+    private void addRelevantPluginDependenciesToClasspath(Set<URL> path) 
throws MojoExecutionException {
         if (hasCommandlineArgs()) {
             arguments = parseCommandlineArgs();
         }
@@ -699,13 +707,55 @@ public class RunMojo extends AbstractExe
     }
 
     /**
+     * Add any relevant project dependencies to the classpath. Indirectly takes
+     * includePluginDependencies and ExecutableDependency into consideration.
+     *
+     * @param path classpath of {@link java.net.URL} objects
+     * @throws MojoExecutionException
+     */
+    private void addExtraPluginDependenciesToClasspath(Set<URL> path) throws 
MojoExecutionException {
+        if (extraPluginDependencyArtifactId == null) {
+            return;
+        }
+
+        try {
+            Set<Artifact> artifacts = new 
HashSet<Artifact>(this.pluginDependencies);
+            for (Artifact artifact : artifacts) {
+                // must
+                if 
(artifact.getArtifactId().equals(extraPluginDependencyArtifactId)) {
+                    getLog().debug("Adding extra plugin dependency artifact: " 
+ artifact.getArtifactId()
+                            + " to classpath");
+                    path.add(artifact.getFile().toURI().toURL());
+
+                    // add the transient dependencies of this artifact
+                    Set<Artifact> deps = 
resolveExecutableDependencies(artifact);
+                    for (Artifact dep : deps) {
+
+                        // we must skip org.apache.aries.blueprint.core:, 
otherwise we get duplicate blueprint extenders
+                        if 
(dep.getArtifactId().equals("org.apache.aries.blueprint.core")) {
+                            getLog().debug("Skipping 
org.apache.aries.blueprint.core -> " + dep.getGroupId() + "/" + 
dep.getArtifactId() + "/" + dep.getVersion());
+                            continue;
+                        }
+
+                        getLog().debug("Adding extra plugin dependency 
artifact: " + dep.getArtifactId()
+                                + " to classpath");
+                        path.add(dep.getFile().toURI().toURL());
+                    }
+                }
+            }
+        } catch (MalformedURLException e) {
+            throw new MojoExecutionException("Error during setting up 
classpath", e);
+        }
+    }
+
+    /**
      * Add any relevant project dependencies to the classpath. Takes
      * includeProjectDependencies into consideration.
      *
      * @param path classpath of {@link java.net.URL} objects
      * @throws MojoExecutionException
      */
-    private void addRelevantProjectDependenciesToClasspath(List<URL> path) 
throws MojoExecutionException {
+    private void addRelevantProjectDependenciesToClasspath(Set<URL> path) 
throws MojoExecutionException {
         if (this.includeProjectDependencies) {
             try {
                 getLog().debug("Project Dependencies will be included.");


Reply via email to