X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.support.maven%2Fsrc%2Forg%2Fargeo%2Fslc%2Fmaven%2FMavenManager.java;fp=org.argeo.slc.support.maven%2Fsrc%2Forg%2Fargeo%2Fslc%2Fmaven%2FMavenManager.java;h=37dabc60e4978d5ce907e2d72b8d12914c56fca5;hb=5ff5e6e4b4e0928b9bae0da27a502b6a1885079f;hp=0000000000000000000000000000000000000000;hpb=c8d217cba139da3ef06e7da3172e100c29e257c4;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.support.maven/src/org/argeo/slc/maven/MavenManager.java b/org.argeo.slc.support.maven/src/org/argeo/slc/maven/MavenManager.java new file mode 100644 index 000000000..37dabc60e --- /dev/null +++ b/org.argeo.slc.support.maven/src/org/argeo/slc/maven/MavenManager.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.argeo.slc.maven; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.maven.repository.internal.MavenRepositorySystemUtils; +import org.argeo.slc.SlcException; +import org.argeo.slc.aether.AetherUtils; +import org.argeo.slc.aether.ConsoleRepositoryListener; +import org.argeo.slc.aether.ConsoleTransferListener; +import org.codehaus.plexus.PlexusContainer; +import org.eclipse.aether.DefaultRepositorySystemSession; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.DependencyNode; +import org.eclipse.aether.impl.DefaultServiceLocator; +import org.eclipse.aether.repository.LocalRepository; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator; + +public class MavenManager { + private final static Log log = LogFactory.getLog(MavenManager.class); + + public void init() { + try { + testMaven(); + testAether(); + // List> lst = plexusContainer + // .discoverComponents(plexusContainer.getContainerRealm()); + // for (ComponentDescriptor cd : lst) { + // log.debug(cd); + // } + // ArtifactHandler artifactHandler = plexusContainer + // .lookup(ArtifactHandler.class); + // ArtifactRepository localRepository = new + // DefaultArtifactRepositoryFactory().createArtifactRepository("local", + // , layoutId, snapshots, releases); + // Maven maven = mavenCli.getContainer().lookup(Maven.class); + // Artifact artifact = new DefaultArtifact("org.argeo.slc.dist", + // "org.argeo.slc.sdk", "0.13.1-SNAPSHOT", "compile", "pom", + // null, artifactHandler); + // ArtifactResolutionRequest req = new ArtifactResolutionRequest(); + // req.setLocalRepository(localRepository); + // req.setResolveTransitively(true); + // req.setArtifact(artifact); + // ArtifactResolver artifactResolver = plexusContainer + // .lookup(ArtifactResolver.class); + // ArtifactResolutionResult res = artifactResolver.resolve(req); + // Set artifacts = res.getArtifacts(); + // for (Artifact art : artifacts) { + // log.debug(art); + // } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void testMaven() { + Thread.currentThread().setContextClassLoader( + getClass().getClassLoader()); + String[] goals = { "-o", "-e", "-f", + "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk/pom.xml", + "dependency:tree" }; + + // String m2Home = "/opt/apache-maven-3.0.1"; + // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf"); + // System.setProperty("maven.home", m2Home); + // + // Launcher.main(goals); + + CustomCli mavenCli = new CustomCli(); + mavenCli.doMain(goals, + "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk", + System.out, System.err); + + PlexusContainer plexusContainer = mavenCli.getContainer(); + log.debug(plexusContainer.getContext().getContextData()); + plexusContainer.dispose(); + } + + public void testAether() { + try { + RepositorySystem repoSystem = createRepositorySystem(); + + RepositorySystemSession session = createRepositorySystemSession(repoSystem); + + Dependency dependency = new Dependency(new DefaultArtifact( + "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"), + "compile"); +// RemoteRepository argeo = new RemoteRepository("argeo", "default", +// "http://maven.argeo.org/argeo/"); +// RemoteRepository argeoSnapshots = new RemoteRepository( +// "argeo-snapshots", "default", +// "http://dev.argeo.org/maven/argeo-snapshots/"); + RemoteRepository argeo =null; + RemoteRepository argeoSnapshots =null; + + CollectRequest collectRequest = new CollectRequest(); + collectRequest.setRoot(dependency); + collectRequest.addRepository(argeo); + collectRequest.addRepository(argeoSnapshots); + DependencyNode node = repoSystem.collectDependencies(session, + collectRequest).getRoot(); + +// repoSystem.resolveDependencies(session, node, null); + + PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); + node.accept(nlg); + + for (Artifact artifact : nlg.getArtifacts(true)) { + log.debug(artifact); + } + + AetherUtils.logDependencyNode(0, node); + // System.out.println(nlg.getClassPath()); + + } catch (Exception e) { + throw new SlcException("Cannot resolve", e); + } + + } + + /** Creates a Maven {@link RepositorySystem}. */ + public static RepositorySystem createRepositorySystem() { + try { + DefaultServiceLocator locator = new DefaultServiceLocator(); + +// locator.setServices(WagonProvider.class, new ManualWagonProvider()); +// locator.addService(RepositoryConnectorFactory.class, +// WagonRepositoryConnectorFactory.class); + + return locator.getService(RepositorySystem.class); + } catch (Exception e) { + throw new SlcException("Cannot lookup repository system", e); + } + } + + public static RepositorySystemSession createRepositorySystemSession( + RepositorySystem system) { +// MavenRepositorySystemSession session = new MavenRepositorySystemSession(); + DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession(); + + LocalRepository localRepo = new LocalRepository( + System.getProperty("user.home") + "/.m2/repository"); + session.setLocalRepositoryManager( system.newLocalRepositoryManager( session, localRepo ) ); +// session.setLocalRepositoryManager(system +// .newLocalRepositoryManager(localRepo)); + session.setTransferListener(new ConsoleTransferListener(System.out)); + session.setRepositoryListener(new ConsoleRepositoryListener()); + return session; + } + + public static void main(String[] args) { + new MavenManager().init(); + } + +}