From 711eb8c4168baf36b6661dac1b618cfe9bf7d158 Mon Sep 17 00:00:00 2001 From: Kenney Westerhof Date: Mon, 6 Aug 2007 15:38:57 +0000 Subject: [PATCH] Add get/setParentContainer to the configuration, and use it in the embedder. If the classrealm that's passed in has a parent realm, then only the resources from the realm are scanned (getRealmResources). This was done to re-use components from parent realms. However, when embedding maven within another plexus container, providing a new dummy classworld with the current classloader as the parent, no components will be found. Since there's no parent container, it won't be checked for components. So, allowing a parent realm to be set in classworlds also requires a parent container to be set, so that when no components are found (since they're present in the parent container), there is a parent container available to delegate lookups to. git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@563173 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/maven/embedder/Configuration.java | 7 ++++++- .../maven/embedder/DefaultConfiguration.java | 14 ++++++++++++++ .../org/apache/maven/embedder/MavenEmbedder.java | 10 +++++----- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java b/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java index 1bb1a48555..2b6a499d4d 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/Configuration.java @@ -18,6 +18,7 @@ * under the License. */ +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.ClassWorld; import java.io.File; @@ -76,6 +77,10 @@ public interface Configuration Configuration setClassLoader( ClassLoader loader ); + PlexusContainer getParentContainer(); + + Configuration setParentContainer( PlexusContainer parentContainer ); + // ---------------------------------------------------------------------------- // Profiles // ---------------------------------------------------------------------------- @@ -120,5 +125,5 @@ public interface Configuration void addExtension( URL url ); - List getExtensions(); + List getExtensions(); } diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java index a65b4082ee..cf878a4a40 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/DefaultConfiguration.java @@ -18,6 +18,7 @@ * under the License. */ +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.classworlds.ClassWorld; import java.io.File; @@ -53,6 +54,8 @@ public class DefaultConfiguration private ClassWorld classWorld; + private PlexusContainer parentContainer; + private File localRepository; /** Creates a new instance of DefaultConfiguration */ @@ -189,6 +192,17 @@ public Configuration setClassLoader( ClassLoader loader ) return this; } + public PlexusContainer getParentContainer() + { + return parentContainer; + } + + public Configuration setParentContainer( PlexusContainer parentContainer ) + { + this.parentContainer = parentContainer; + return this; + } + // ---------------------------------------------------------------------------- // Local Repository // ---------------------------------------------------------------------------- diff --git a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java index 1df4e32ebd..665f5dfc54 100644 --- a/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java +++ b/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java @@ -494,17 +494,17 @@ public List getLifecyclePhases() { return getBuildLifecyclePhases(); } - + public List getAllLifecyclePhases() { return LifecycleUtils.getValidPhaseNames(); } - + public List getDefaultLifecyclePhases() { return getBuildLifecyclePhases(); } - + public List getBuildLifecyclePhases() { return LifecycleUtils.getValidBuildPhaseNames(); @@ -557,7 +557,7 @@ private void start( Configuration configuration ) try { ContainerConfiguration cc = new DefaultContainerConfiguration() - .setClassWorld( classWorld ); + .setClassWorld( classWorld ).setParentContainer( configuration.getParentContainer() ); container = new DefaultPlexusContainer( cc ); } @@ -918,7 +918,7 @@ public MavenExecutionResult execute( MavenExecutionRequest request ) /** * Return the instance of the plexus container being used in the embedder. - * + * * @return The plexus container used in the embedder. */ public PlexusContainer getPlexusContainer()