Hi all, When switching from Maven 3.0.x to 3.1.x some of our projects where not able to execute anymore due to a problem with MavenEmbedder. Both projects are command line based, no Maven plugin around it.
I think the most important part of the stack trace is this: 37) No implementation for java.util.Set<org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory> was bound. while locating java.util.Set<org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory> for parameter 0 at org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider.<init>(Unknown ... 37 errors role: org.apache.maven.execution.MavenExecutionRequestPopulator roleHint: at com.google.inject.internal.InjectorImpl$3.get(InjectorImpl.java:974) at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82) at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:260) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:252) at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:246) at hudson.maven.MavenEmbedder.lookup(MavenEmbedder.java:567) at hudson.maven.MavenEmbedder.buildMavenExecutionRequest(MavenEmbedder.java:157) at hudson.maven.MavenEmbedder.<init>(MavenEmbedder.java:120) at hudson.maven.MavenEmbedder.<init>(MavenEmbedder.java:109) at hudson.maven.MavenEmbedder.<init>(MavenEmbedder.java:136) at test.embedder.AppTest.testLookup(AppTest.java:57) I know this problem came when I changed my aether-dependencies from 'org.sonatype.aether' to 'org.eclipse.aether' in order to work with Maven 3.1.x. Fortunately this can be reproduced with a simple project which can be found here: https://dl.dropboxusercontent.com/u/86229859/embedder-test.tgz Usage of the MavenEmbedder looks like this: package test.embedder; import hudson.maven.MavenEmbedder; import hudson.maven.MavenEmbedderException; import hudson.maven.MavenRequest; import java.io.File; import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.project.MavenProject; public class App { private static final ClassLoader mavenClassLoader = App.class.getClassLoader(); private static final ThreadLocal<MavenEmbedder> embedder = new ThreadLocal<MavenEmbedder>() { @Override protected MavenEmbedder initialValue() { try { MavenRequest req = new MavenRequest(); req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1); return new MavenEmbedder(mavenClassLoader, req); } catch (MavenEmbedderException e) { throw new RuntimeException( "Error creating MavenEmbedder", e); } } }; public static MavenProject getMavenProject(File pomFile) { try { return embedder.get().readProject(pomFile); } catch (Exception e) { throw new RuntimeException("Error parsing POM at " + pomFile, e); } } } This unit test will then trigger the error: package test.embedder; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import java.io.File; import org.apache.commons.io.FileUtils; import org.apache.maven.project.MavenProject; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class AppTest { private static File mvnUtilFolder = null; @BeforeClass public static void setUpBeforeClass() throws Exception { mvnUtilFolder = FileUtils.toFile(AppTest.class.getClassLoader().getResource("mvnUtil")); } @Test public void testGetMavenProject() { File mvnPom = new File(mvnUtilFolder.getAbsolutePath() + "/pom.xml"); MavenProject mvnProject = App.getMavenProject(mvnPom); assertNotNull(mvnProject); assertEquals("3.5.2", mvnProject.getVersion()); } } For me all this looks like a 'simple' classloader issue when Guice tries to load the classes (e.g.: org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory) but can't find them. I've googled presumably all the places dealing with problems when switching from 3.0.x to 3.1.x and tried a lot of things without success. In particular: * fixed all versions of plugins as described here: https://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound * changed dependencies to Ather as described here: http://eclipse.org/aether * basically I implemented things the way they are done in the lib-jenkins implementation itself here: https://github.com/jenkinsci/lib-jenkins-maven-embedder/blob/master/src/test/java/hudson/maven/TestMavenEmbedderSimpleProject.java * tried to deal with different versions of validation level 'req.setValidationLevel(ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1)' * tried myriads of different POM configurations (dependencies, versions) But actually this error persists (also when building with 3.0.x). So maybe anyone can point me to the right direction? I've dealt with this problem too long now and maybe I got blind for new approaches. Thanks in advance! Bernd