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
.cli
.MavenCli
;
22 import org
.apache
.maven
.repository
.internal
.DefaultServiceLocator
;
23 import org
.apache
.maven
.repository
.internal
.MavenRepositorySystemSession
;
24 import org
.argeo
.slc
.SlcException
;
25 import org
.argeo
.slc
.aether
.AetherUtils
;
26 import org
.argeo
.slc
.aether
.ConsoleRepositoryListener
;
27 import org
.argeo
.slc
.aether
.ConsoleTransferListener
;
28 import org
.codehaus
.plexus
.PlexusContainer
;
29 import org
.sonatype
.aether
.RepositorySystem
;
30 import org
.sonatype
.aether
.RepositorySystemSession
;
31 import org
.sonatype
.aether
.artifact
.Artifact
;
32 import org
.sonatype
.aether
.collection
.CollectRequest
;
33 import org
.sonatype
.aether
.connector
.wagon
.WagonProvider
;
34 import org
.sonatype
.aether
.connector
.wagon
.WagonRepositoryConnectorFactory
;
35 import org
.sonatype
.aether
.graph
.Dependency
;
36 import org
.sonatype
.aether
.graph
.DependencyNode
;
37 import org
.sonatype
.aether
.repository
.LocalRepository
;
38 import org
.sonatype
.aether
.repository
.RemoteRepository
;
39 import org
.sonatype
.aether
.spi
.connector
.RepositoryConnectorFactory
;
40 import org
.sonatype
.aether
.util
.artifact
.DefaultArtifact
;
41 import org
.sonatype
.aether
.util
.graph
.PreorderNodeListGenerator
;
42 import org
.sonatype
.aether
.util
.graph
.selector
.OptionalDependencySelector
;
44 public class MavenManager
{
45 private final static Log log
= LogFactory
.getLog(MavenManager
.class);
51 // List<ComponentDescriptor<?>> lst = plexusContainer
52 // .discoverComponents(plexusContainer.getContainerRealm());
53 // for (ComponentDescriptor<?> cd : lst) {
56 // ArtifactHandler artifactHandler = plexusContainer
57 // .lookup(ArtifactHandler.class);
58 // ArtifactRepository localRepository = new
59 // DefaultArtifactRepositoryFactory().createArtifactRepository("local",
60 // , layoutId, snapshots, releases);
61 // Maven maven = mavenCli.getContainer().lookup(Maven.class);
62 // Artifact artifact = new DefaultArtifact("org.argeo.slc.dist",
63 // "org.argeo.slc.sdk", "0.13.1-SNAPSHOT", "compile", "pom",
64 // null, artifactHandler);
65 // ArtifactResolutionRequest req = new ArtifactResolutionRequest();
66 // req.setLocalRepository(localRepository);
67 // req.setResolveTransitively(true);
68 // req.setArtifact(artifact);
69 // ArtifactResolver artifactResolver = plexusContainer
70 // .lookup(ArtifactResolver.class);
71 // ArtifactResolutionResult res = artifactResolver.resolve(req);
72 // Set<Artifact> artifacts = res.getArtifacts();
73 // for (Artifact art : artifacts) {
76 } catch (Exception e
) {
77 // TODO Auto-generated catch block
82 public void testMaven() {
83 Thread
.currentThread().setContextClassLoader(
84 getClass().getClassLoader());
85 String
[] goals
= { "-o", "-e", "-f",
86 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk/pom.xml",
89 // String m2Home = "/opt/apache-maven-3.0.1";
90 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
91 // System.setProperty("maven.home", m2Home);
93 // Launcher.main(goals);
95 CustomCli mavenCli
= new CustomCli();
96 mavenCli
.doMain(goals
,
97 "/home/mbaudier/dev/src/slc/dist/org.argeo.slc.sdk",
98 System
.out
, System
.err
);
100 PlexusContainer plexusContainer
= mavenCli
.getContainer();
101 log
.debug(plexusContainer
.getContext().getContextData());
102 plexusContainer
.dispose();
105 public void testAether() {
107 RepositorySystem repoSystem
= createRepositorySystem();
109 RepositorySystemSession session
= createRepositorySystemSession(repoSystem
);
111 Dependency dependency
= new Dependency(new DefaultArtifact(
112 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
114 RemoteRepository argeo
= new RemoteRepository("argeo", "default",
115 "http://maven.argeo.org/argeo/");
116 RemoteRepository argeoSnapshots
= new RemoteRepository(
117 "argeo-snapshots", "default",
118 "http://dev.argeo.org/maven/argeo-snapshots/");
120 CollectRequest collectRequest
= new CollectRequest();
121 collectRequest
.setRoot(dependency
);
122 collectRequest
.addRepository(argeo
);
123 collectRequest
.addRepository(argeoSnapshots
);
124 DependencyNode node
= repoSystem
.collectDependencies(session
,
125 collectRequest
).getRoot();
127 repoSystem
.resolveDependencies(session
, node
, null);
129 PreorderNodeListGenerator nlg
= new PreorderNodeListGenerator();
132 for (Artifact artifact
: nlg
.getArtifacts(true)) {
136 AetherUtils
.logDependencyNode(0, node
);
137 // System.out.println(nlg.getClassPath());
139 } catch (Exception e
) {
140 throw new SlcException("Cannot resolve", e
);
145 /** Creates a Maven {@link RepositorySystem}. */
146 public static RepositorySystem
createRepositorySystem() {
149 // DefaultPlexusContainer().lookup(RepositorySystem.class);
151 DefaultServiceLocator locator
= new DefaultServiceLocator();
153 locator
.setServices(WagonProvider
.class, new ManualWagonProvider());
154 locator
.addService(RepositoryConnectorFactory
.class,
155 WagonRepositoryConnectorFactory
.class);
157 return locator
.getService(RepositorySystem
.class);
158 } catch (Exception e
) {
159 throw new SlcException("Cannot lookup repository system", e
);
163 public static RepositorySystemSession
createRepositorySystemSession(
164 RepositorySystem system
) {
165 MavenRepositorySystemSession session
= new MavenRepositorySystemSession();
167 LocalRepository localRepo
= new LocalRepository(
168 System
.getProperty("user.home") + "/.m2/repository");
169 session
.setLocalRepositoryManager(system
170 .newLocalRepositoryManager(localRepo
));
171 session
.setTransferListener(new ConsoleTransferListener(System
.out
));
172 session
.setRepositoryListener(new ConsoleRepositoryListener());
176 public static void main(String
[] args
) {
177 new MavenManager().init();
180 static class CustomCli
extends MavenCli
{
181 private PlexusContainer container
;
184 protected void customizeContainer(PlexusContainer container
) {
185 this.container
= container
;
188 public PlexusContainer
getContainer() {