Skip to content

Commit

Permalink
make native maven pom parser in kie-ci to work with switchyard
Browse files Browse the repository at this point in the history
(cherry picked from commit 0fa253f)
  • Loading branch information
mariofusco committed Nov 8, 2013
1 parent 7d6ee15 commit d582424
Showing 1 changed file with 34 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.kie.scanner.embedder;

import org.apache.maven.execution.MavenExecutionRequestPopulator;
import org.apache.tools.ant.AntClassLoader;
import org.codehaus.plexus.ContainerConfiguration;
import org.codehaus.plexus.DefaultContainerConfiguration;
Expand All @@ -8,10 +9,14 @@
import org.codehaus.plexus.PlexusContainerException;
import org.codehaus.plexus.classworlds.ClassWorld;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.plexus.components.cipher.PlexusCipher;

import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.util.HashSet;
import java.util.Set;

public class MavenEmbedderUtils {

Expand Down Expand Up @@ -69,7 +74,8 @@ public static PlexusContainer buildPlexusContainer(File mavenHome, MavenRequest
DefaultContainerConfiguration conf = new DefaultContainerConfiguration();

conf.setContainerConfigurationURL( mavenRequest.getOverridingComponentsXml() )
.setRealm( classRealm ).setClassWorld( world );
.setRealm(classRealm)
.setClassWorld(world);

return buildPlexusContainer(mavenRequest,conf);
}
Expand All @@ -85,21 +91,43 @@ public static PlexusContainer buildPlexusContainer(ClassLoader mavenClassLoader,

ClassWorld classWorld = new ClassWorld();

ClassRealm parentRealm = createParentRealm(classWorld, parent,
MavenExecutionRequestPopulator.class,
RepositorySystem.class,
PlexusCipher.class);

ClassRealm classRealm = new ClassRealm( classWorld, "maven", mavenClassLoader );
classRealm.setParentRealm( new ClassRealm( classWorld, "maven-parent",
parent == null ? Thread.currentThread().getContextClassLoader()
: parent ) );
classRealm.setParentRealm( parentRealm );
conf.setRealm( classRealm );

conf.setClassWorld( classWorld );

return buildPlexusContainer(mavenRequest,conf);
}

private static ClassRealm createParentRealm(ClassWorld classWorld, ClassLoader parent, Class... requiredClasses) {
ClassLoader parentCL = parent == null ? Thread.currentThread().getContextClassLoader() : parent;
Set<ClassLoader> usedCLs = new HashSet<ClassLoader>();
usedCLs.add(parentCL);

ClassRealm parentRealm = new ClassRealm( classWorld, "maven-parent", parentCL);

int i = 1;
ClassRealm lastParent = parentRealm;
for ( Class c : requiredClasses ) {
if ( usedCLs.add(c.getClassLoader()) ) {
ClassRealm newParent = new ClassRealm( classWorld, "maven-parent" + i++, c.getClassLoader() );
lastParent.setParentRealm( newParent );
lastParent = newParent;
}
}

return parentRealm;
}

private static PlexusContainer buildPlexusContainer(MavenRequest mavenRequest,ContainerConfiguration containerConfiguration )
throws MavenEmbedderException {
try
{
try {
DefaultPlexusContainer plexusContainer = new DefaultPlexusContainer( containerConfiguration );
if (mavenRequest.getMavenLoggerManager() != null) {
plexusContainer.setLoggerManager( mavenRequest.getMavenLoggerManager() );
Expand Down

0 comments on commit d582424

Please sign in to comment.