2 * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
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.
17 package org
.argeo
.slc
.maven
;
19 import org
.apache
.commons
.logging
.Log
;
20 import org
.apache
.commons
.logging
.LogFactory
;
21 import org
.apache
.maven
.repository
.internal
.DefaultServiceLocator
;
22 import org
.apache
.maven
.repository
.internal
.MavenRepositorySystemSession
;
23 import org
.argeo
.slc
.SlcException
;
24 import org
.argeo
.slc
.aether
.AetherUtils
;
25 import org
.argeo
.slc
.aether
.ConsoleRepositoryListener
;
26 import org
.argeo
.slc
.aether
.ConsoleTransferListener
;
27 import org
.codehaus
.plexus
.PlexusContainer
;
28 import org
.sonatype
.aether
.RepositorySystem
;
29 import org
.sonatype
.aether
.RepositorySystemSession
;
30 import org
.sonatype
.aether
.artifact
.Artifact
;
31 import org
.sonatype
.aether
.collection
.CollectRequest
;
32 import org
.sonatype
.aether
.connector
.wagon
.WagonProvider
;
33 import org
.sonatype
.aether
.connector
.wagon
.WagonRepositoryConnectorFactory
;
34 import org
.sonatype
.aether
.graph
.Dependency
;
35 import org
.sonatype
.aether
.graph
.DependencyNode
;
36 import org
.sonatype
.aether
.repository
.LocalRepository
;
37 import org
.sonatype
.aether
.repository
.RemoteRepository
;
38 import org
.sonatype
.aether
.spi
.connector
.RepositoryConnectorFactory
;
39 import org
.sonatype
.aether
.util
.artifact
.DefaultArtifact
;
40 import org
.sonatype
.aether
.util
.graph
.PreorderNodeListGenerator
;
42 public class MavenManager
{
43 private final static Log log
= LogFactory
.getLog(MavenManager
.class);
49 // List<ComponentDescriptor<?>> lst = plexusContainer
50 // .discoverComponents(plexusContainer.getContainerRealm());
51 // for (ComponentDescriptor<?> cd : lst) {
54 // ArtifactHandler artifactHandler = plexusContainer
55 // .lookup(ArtifactHandler.class);
56 // ArtifactRepository localRepository = new
57 // DefaultArtifactRepositoryFactory().createArtifactRepository("local",
58 // , layoutId, snapshots, releases);
59 // Maven maven = mavenCli.getContainer().lookup(Maven.class);
60 // Artifact artifact = new DefaultArtifact("org.argeo.slc.dist",
61 // "org.argeo.slc.sdk", "0.13.1-SNAPSHOT", "compile", "pom",
62 // null, artifactHandler);
63 // ArtifactResolutionRequest req = new ArtifactResolutionRequest();
64 // req.setLocalRepository(localRepository);
65 // req.setResolveTransitively(true);
66 // req.setArtifact(artifact);
67 // ArtifactResolver artifactResolver = plexusContainer
68 // .lookup(ArtifactResolver.class);
69 // ArtifactResolutionResult res = artifactResolver.resolve(req);
70 // Set<Artifact> artifacts = res.getArtifacts();
71 // for (Artifact art : artifacts) {
74 } catch (Exception e
) {
75 // TODO Auto-generated catch block
80 public void testMaven() {
81 Thread
.currentThread().setContextClassLoader(
82 getClass().getClassLoader());
83 String
[] goals
= { "-o", "-e", "-f",
84 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk/pom.xml",
87 // String m2Home = "/opt/apache-maven-3.0.1";
88 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
89 // System.setProperty("maven.home", m2Home);
91 // Launcher.main(goals);
93 CustomCli mavenCli
= new CustomCli();
94 mavenCli
.doMain(goals
,
95 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk",
96 System
.out
, System
.err
);
98 PlexusContainer plexusContainer
= mavenCli
.getContainer();
99 log
.debug(plexusContainer
.getContext().getContextData());
100 plexusContainer
.dispose();
103 public void testAether() {
105 RepositorySystem repoSystem
= createRepositorySystem();
107 RepositorySystemSession session
= createRepositorySystemSession(repoSystem
);
109 Dependency dependency
= new Dependency(new DefaultArtifact(
110 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
112 RemoteRepository argeo
= new RemoteRepository("argeo", "default",
113 "http://maven.argeo.org/argeo/");
114 RemoteRepository argeoSnapshots
= new RemoteRepository(
115 "argeo-snapshots", "default",
116 "http://dev.argeo.org/maven/argeo-snapshots/");
118 CollectRequest collectRequest
= new CollectRequest();
119 collectRequest
.setRoot(dependency
);
120 collectRequest
.addRepository(argeo
);
121 collectRequest
.addRepository(argeoSnapshots
);
122 DependencyNode node
= repoSystem
.collectDependencies(session
,
123 collectRequest
).getRoot();
125 repoSystem
.resolveDependencies(session
, node
, null);
127 PreorderNodeListGenerator nlg
= new PreorderNodeListGenerator();
130 for (Artifact artifact
: nlg
.getArtifacts(true)) {
134 AetherUtils
.logDependencyNode(0, node
);
135 // System.out.println(nlg.getClassPath());
137 } catch (Exception e
) {
138 throw new SlcException("Cannot resolve", e
);
143 /** Creates a Maven {@link RepositorySystem}. */
144 public static RepositorySystem
createRepositorySystem() {
147 // DefaultPlexusContainer().lookup(RepositorySystem.class);
149 DefaultServiceLocator locator
= new DefaultServiceLocator();
151 locator
.setServices(WagonProvider
.class, new ManualWagonProvider());
152 locator
.addService(RepositoryConnectorFactory
.class,
153 WagonRepositoryConnectorFactory
.class);
155 return locator
.getService(RepositorySystem
.class);
156 } catch (Exception e
) {
157 throw new SlcException("Cannot lookup repository system", e
);
161 public static RepositorySystemSession
createRepositorySystemSession(
162 RepositorySystem system
) {
163 MavenRepositorySystemSession session
= new MavenRepositorySystemSession();
165 LocalRepository localRepo
= new LocalRepository(
166 System
.getProperty("user.home") + "/.m2/repository");
167 session
.setLocalRepositoryManager(system
168 .newLocalRepositoryManager(localRepo
));
169 session
.setTransferListener(new ConsoleTransferListener(System
.out
));
170 session
.setRepositoryListener(new ConsoleRepositoryListener());
174 public static void main(String
[] args
) {
175 new MavenManager().init();