]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
Introduce MavenCall
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.maven / src / main / java / org / argeo / slc / maven / MavenManager.java
1 /*
2 * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17 package org.argeo.slc.maven;
18
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;
41
42 public class MavenManager {
43 private final static Log log = LogFactory.getLog(MavenManager.class);
44
45 public void init() {
46 try {
47 testMaven();
48 testAether();
49 // List<ComponentDescriptor<?>> lst = plexusContainer
50 // .discoverComponents(plexusContainer.getContainerRealm());
51 // for (ComponentDescriptor<?> cd : lst) {
52 // log.debug(cd);
53 // }
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) {
72 // log.debug(art);
73 // }
74 } catch (Exception e) {
75 // TODO Auto-generated catch block
76 e.printStackTrace();
77 }
78 }
79
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",
85 "dependency:tree" };
86
87 // String m2Home = "/opt/apache-maven-3.0.1";
88 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
89 // System.setProperty("maven.home", m2Home);
90 //
91 // Launcher.main(goals);
92
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);
97
98 PlexusContainer plexusContainer = mavenCli.getContainer();
99 log.debug(plexusContainer.getContext().getContextData());
100 plexusContainer.dispose();
101 }
102
103 public void testAether() {
104 try {
105 RepositorySystem repoSystem = createRepositorySystem();
106
107 RepositorySystemSession session = createRepositorySystemSession(repoSystem);
108
109 Dependency dependency = new Dependency(new DefaultArtifact(
110 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
111 "compile");
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/");
117
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();
124
125 repoSystem.resolveDependencies(session, node, null);
126
127 PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
128 node.accept(nlg);
129
130 for (Artifact artifact : nlg.getArtifacts(true)) {
131 log.debug(artifact);
132 }
133
134 AetherUtils.logDependencyNode(0, node);
135 // System.out.println(nlg.getClassPath());
136
137 } catch (Exception e) {
138 throw new SlcException("Cannot resolve", e);
139 }
140
141 }
142
143 /** Creates a Maven {@link RepositorySystem}. */
144 public static RepositorySystem createRepositorySystem() {
145 try {
146 // return new
147 // DefaultPlexusContainer().lookup(RepositorySystem.class);
148
149 DefaultServiceLocator locator = new DefaultServiceLocator();
150
151 locator.setServices(WagonProvider.class, new ManualWagonProvider());
152 locator.addService(RepositoryConnectorFactory.class,
153 WagonRepositoryConnectorFactory.class);
154
155 return locator.getService(RepositorySystem.class);
156 } catch (Exception e) {
157 throw new SlcException("Cannot lookup repository system", e);
158 }
159 }
160
161 public static RepositorySystemSession createRepositorySystemSession(
162 RepositorySystem system) {
163 MavenRepositorySystemSession session = new MavenRepositorySystemSession();
164
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());
171 return session;
172 }
173
174 public static void main(String[] args) {
175 new MavenManager().init();
176 }
177
178 }