2 * Copyright (C) 2007-2012 Argeo GmbH
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org
.argeo
.slc
.maven
;
18 import org
.apache
.commons
.logging
.Log
;
19 import org
.apache
.commons
.logging
.LogFactory
;
20 import org
.apache
.maven
.repository
.internal
.DefaultServiceLocator
;
21 import org
.apache
.maven
.repository
.internal
.MavenRepositorySystemSession
;
22 import org
.argeo
.slc
.SlcException
;
23 import org
.argeo
.slc
.aether
.AetherUtils
;
24 import org
.argeo
.slc
.aether
.ConsoleRepositoryListener
;
25 import org
.argeo
.slc
.aether
.ConsoleTransferListener
;
26 import org
.codehaus
.plexus
.PlexusContainer
;
27 import org
.sonatype
.aether
.RepositorySystem
;
28 import org
.sonatype
.aether
.RepositorySystemSession
;
29 import org
.sonatype
.aether
.artifact
.Artifact
;
30 import org
.sonatype
.aether
.collection
.CollectRequest
;
31 import org
.sonatype
.aether
.connector
.wagon
.WagonProvider
;
32 import org
.sonatype
.aether
.connector
.wagon
.WagonRepositoryConnectorFactory
;
33 import org
.sonatype
.aether
.graph
.Dependency
;
34 import org
.sonatype
.aether
.graph
.DependencyNode
;
35 import org
.sonatype
.aether
.repository
.LocalRepository
;
36 import org
.sonatype
.aether
.repository
.RemoteRepository
;
37 import org
.sonatype
.aether
.spi
.connector
.RepositoryConnectorFactory
;
38 import org
.sonatype
.aether
.util
.artifact
.DefaultArtifact
;
39 import org
.sonatype
.aether
.util
.graph
.PreorderNodeListGenerator
;
41 public class MavenManager
{
42 private final static Log log
= LogFactory
.getLog(MavenManager
.class);
48 // List<ComponentDescriptor<?>> lst = plexusContainer
49 // .discoverComponents(plexusContainer.getContainerRealm());
50 // for (ComponentDescriptor<?> cd : lst) {
53 // ArtifactHandler artifactHandler = plexusContainer
54 // .lookup(ArtifactHandler.class);
55 // ArtifactRepository localRepository = new
56 // DefaultArtifactRepositoryFactory().createArtifactRepository("local",
57 // , layoutId, snapshots, releases);
58 // Maven maven = mavenCli.getContainer().lookup(Maven.class);
59 // Artifact artifact = new DefaultArtifact("org.argeo.slc.dist",
60 // "org.argeo.slc.sdk", "0.13.1-SNAPSHOT", "compile", "pom",
61 // null, artifactHandler);
62 // ArtifactResolutionRequest req = new ArtifactResolutionRequest();
63 // req.setLocalRepository(localRepository);
64 // req.setResolveTransitively(true);
65 // req.setArtifact(artifact);
66 // ArtifactResolver artifactResolver = plexusContainer
67 // .lookup(ArtifactResolver.class);
68 // ArtifactResolutionResult res = artifactResolver.resolve(req);
69 // Set<Artifact> artifacts = res.getArtifacts();
70 // for (Artifact art : artifacts) {
73 } catch (Exception e
) {
74 // TODO Auto-generated catch block
79 public void testMaven() {
80 Thread
.currentThread().setContextClassLoader(
81 getClass().getClassLoader());
82 String
[] goals
= { "-o", "-e", "-f",
83 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk/pom.xml",
86 // String m2Home = "/opt/apache-maven-3.0.1";
87 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
88 // System.setProperty("maven.home", m2Home);
90 // Launcher.main(goals);
92 CustomCli mavenCli
= new CustomCli();
93 mavenCli
.doMain(goals
,
94 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk",
95 System
.out
, System
.err
);
97 PlexusContainer plexusContainer
= mavenCli
.getContainer();
98 log
.debug(plexusContainer
.getContext().getContextData());
99 plexusContainer
.dispose();
102 public void testAether() {
104 RepositorySystem repoSystem
= createRepositorySystem();
106 RepositorySystemSession session
= createRepositorySystemSession(repoSystem
);
108 Dependency dependency
= new Dependency(new DefaultArtifact(
109 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
111 RemoteRepository argeo
= new RemoteRepository("argeo", "default",
112 "http://maven.argeo.org/argeo/");
113 RemoteRepository argeoSnapshots
= new RemoteRepository(
114 "argeo-snapshots", "default",
115 "http://dev.argeo.org/maven/argeo-snapshots/");
117 CollectRequest collectRequest
= new CollectRequest();
118 collectRequest
.setRoot(dependency
);
119 collectRequest
.addRepository(argeo
);
120 collectRequest
.addRepository(argeoSnapshots
);
121 DependencyNode node
= repoSystem
.collectDependencies(session
,
122 collectRequest
).getRoot();
124 repoSystem
.resolveDependencies(session
, node
, null);
126 PreorderNodeListGenerator nlg
= new PreorderNodeListGenerator();
129 for (Artifact artifact
: nlg
.getArtifacts(true)) {
133 AetherUtils
.logDependencyNode(0, node
);
134 // System.out.println(nlg.getClassPath());
136 } catch (Exception e
) {
137 throw new SlcException("Cannot resolve", e
);
142 /** Creates a Maven {@link RepositorySystem}. */
143 public static RepositorySystem
createRepositorySystem() {
146 // DefaultPlexusContainer().lookup(RepositorySystem.class);
148 DefaultServiceLocator locator
= new DefaultServiceLocator();
150 locator
.setServices(WagonProvider
.class, new ManualWagonProvider());
151 locator
.addService(RepositoryConnectorFactory
.class,
152 WagonRepositoryConnectorFactory
.class);
154 return locator
.getService(RepositorySystem
.class);
155 } catch (Exception e
) {
156 throw new SlcException("Cannot lookup repository system", e
);
160 public static RepositorySystemSession
createRepositorySystemSession(
161 RepositorySystem system
) {
162 MavenRepositorySystemSession session
= new MavenRepositorySystemSession();
164 LocalRepository localRepo
= new LocalRepository(
165 System
.getProperty("user.home") + "/.m2/repository");
166 session
.setLocalRepositoryManager(system
167 .newLocalRepositoryManager(localRepo
));
168 session
.setTransferListener(new ConsoleTransferListener(System
.out
));
169 session
.setRepositoryListener(new ConsoleRepositoryListener());
173 public static void main(String
[] args
) {
174 new MavenManager().init();