X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.maven%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fmaven%2FMavenManager.java;h=049ce8233addab30e4f5455b9dc5eb63659b3d1b;hb=bd07be7603d234ac496652aaa07ded77d4a2a292;hp=20120bdf77127e7b3368f3e18aef8b75438f5672;hpb=600777d558fd165dabc6c3a19f3356f1e6b85c50;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java b/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java index 20120bdf7..049ce8233 100644 --- a/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java +++ b/runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java @@ -1,104 +1,177 @@ +/* + * 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.DefaultServiceLocator; +import org.apache.maven.repository.internal.MavenRepositorySystemSession; +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.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; +import org.eclipse.aether.artifact.Artifact; +import org.eclipse.aether.collection.CollectRequest; +import org.eclipse.aether.connector.wagon.WagonProvider; +import org.eclipse.aether.connector.wagon.WagonRepositoryConnectorFactory; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.graph.DependencyNode; +import org.eclipse.aether.repository.LocalRepository; +import org.eclipse.aether.repository.RemoteRepository; +import org.eclipse.aether.spi.connector.RepositoryConnectorFactory; +import org.eclipse.aether.util.artifact.DefaultArtifact; +import org.eclipse.aether.util.graph.PreorderNodeListGenerator; public class MavenManager { - /* - private final Log log = LogFactory.getLog(getClass()); + private final static Log log = LogFactory.getLog(MavenManager.class); - private String localRepositoryPath = System.getProperty("user.home") - + File.separator + ".m2" + File.separator + "repository"; - - private ArtifactRepository localRepository; - private List remoteRepositoriesInternal; - private List remoteRepositories = new Vector(); + 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(); + } + } - private MavenEmbedder mavenEmbedder; + 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 init() { + public void testAether() { try { - mavenEmbedder = new MavenEmbedder(); - mavenEmbedder.setOffline(true); - mavenEmbedder.setClassLoader(Thread.currentThread() - .getContextClassLoader()); - mavenEmbedder.start(); + RepositorySystem repoSystem = createRepositorySystem(); - mavenEmbedder.setLocalRepositoryDirectory(new File( - localRepositoryPath)); + RepositorySystemSession session = createRepositorySystemSession(repoSystem); - localRepository = mavenEmbedder.getLocalRepository(); + 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/"); - remoteRepositoriesInternal = new Vector(); - for (RemoteRepository remoteRepository : remoteRepositories) { + CollectRequest collectRequest = new CollectRequest(); + collectRequest.setRoot(dependency); + collectRequest.addRepository(argeo); + collectRequest.addRepository(argeoSnapshots); + DependencyNode node = repoSystem.collectDependencies(session, + collectRequest).getRoot(); - ArtifactRepository repository = mavenEmbedder.createRepository( - remoteRepository.getUrl(), remoteRepository.getId()); - remoteRepositoriesInternal.add(repository); - } - - MavenFile mavenFile = new MavenFile(); - mavenFile.setGroupId("org.argeo.slc.runtime"); - mavenFile.setArtifactId("org.argeo.slc.specs"); - mavenFile.setVersion("0.11.3-SNAPSHOT"); - Artifact artifact = resolve(mavenFile); - log.debug("Dependencies of "+artifact); - for(Object obj : artifact.getDependencyTrail()){ - log.debug(" "+obj); - } + repoSystem.resolveDependencies(session, node, null); - } catch (Exception e) { - throw new SlcException("Cannot initialize Maven manager", e); - } - } + PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); + node.accept(nlg); - private Artifact resolve(MavenFile mavenDistribution) { - try { - Artifact artifact; - if (mavenDistribution.getClassifier() == null) { - artifact = mavenEmbedder.createArtifact(mavenDistribution - .getGroupId(), mavenDistribution.getArtifactId(), - mavenDistribution.getVersion(), - Artifact.SCOPE_PROVIDED, mavenDistribution.getType()); - } else { - artifact = mavenEmbedder.createArtifactWithClassifier( - mavenDistribution.getGroupId(), mavenDistribution - .getArtifactId(), mavenDistribution - .getVersion(), mavenDistribution.getType(), - mavenDistribution.getClassifier()); + for (Artifact artifact : nlg.getArtifacts(true)) { + log.debug(artifact); } - mavenEmbedder.resolve(artifact, remoteRepositoriesInternal, - localRepository); + AetherUtils.logDependencyNode(0, node); + // System.out.println(nlg.getClassPath()); - return artifact; } catch (Exception e) { - throw new SlcException("Cannot resolve artifact.", e); + throw new SlcException("Cannot resolve", e); } - } - public File getPackageLocation(MavenFile mavenDistribution) { - return resolve(mavenDistribution).getFile(); } - public void destroy() { + /** Creates a Maven {@link RepositorySystem}. */ + public static RepositorySystem createRepositorySystem() { try { - if (mavenEmbedder != null) { - mavenEmbedder.stop(); - } - } catch (MavenEmbedderException e) { - log.error("Cannot destroy Maven manager", e); + // return new + // DefaultPlexusContainer().lookup(RepositorySystem.class); + + 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 void setLocalRepositoryPath(String localRepositoryPath) { - this.localRepositoryPath = localRepositoryPath; + public static RepositorySystemSession createRepositorySystemSession( + RepositorySystem system) { + MavenRepositorySystemSession session = new MavenRepositorySystemSession(); + + LocalRepository localRepo = new LocalRepository( + System.getProperty("user.home") + "/.m2/repository"); + session.setLocalRepositoryManager(system + .newLocalRepositoryManager(localRepo)); + session.setTransferListener(new ConsoleTransferListener(System.out)); + session.setRepositoryListener(new ConsoleRepositoryListener()); + return session; } - public List getRemoteRepositories() { - return remoteRepositories; + public static void main(String[] args) { + new MavenManager().init(); } - public void setRemoteRepositories(List remoteRepositories) { - this.remoteRepositories = remoteRepositories; - } -*/ }