]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
d3f4f4389feb7a04380f58bcd8c4f7cea4e6fabf
[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.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;
43
44 public class MavenManager {
45 private final static Log log = LogFactory.getLog(MavenManager.class);
46
47 public void init() {
48 try {
49 testMaven();
50 testAether();
51 // List<ComponentDescriptor<?>> lst = plexusContainer
52 // .discoverComponents(plexusContainer.getContainerRealm());
53 // for (ComponentDescriptor<?> cd : lst) {
54 // log.debug(cd);
55 // }
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) {
74 // log.debug(art);
75 // }
76 } catch (Exception e) {
77 // TODO Auto-generated catch block
78 e.printStackTrace();
79 }
80 }
81
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",
87 "dependency:tree" };
88
89 // String m2Home = "/opt/apache-maven-3.0.1";
90 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
91 // System.setProperty("maven.home", m2Home);
92 //
93 // Launcher.main(goals);
94
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);
99
100 PlexusContainer plexusContainer = mavenCli.getContainer();
101 log.debug(plexusContainer.getContext().getContextData());
102 plexusContainer.dispose();
103 }
104
105 public void testAether() {
106 try {
107 RepositorySystem repoSystem = createRepositorySystem();
108
109 RepositorySystemSession session = createRepositorySystemSession(repoSystem);
110
111 Dependency dependency = new Dependency(new DefaultArtifact(
112 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
113 "compile");
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/");
119
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();
126
127 repoSystem.resolveDependencies(session, node, null);
128
129 PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
130 node.accept(nlg);
131
132 for (Artifact artifact : nlg.getArtifacts(true)) {
133 log.debug(artifact);
134 }
135
136 AetherUtils.logDependencyNode(0, node);
137 // System.out.println(nlg.getClassPath());
138
139 } catch (Exception e) {
140 throw new SlcException("Cannot resolve", e);
141 }
142
143 }
144
145 /** Creates a Maven {@link RepositorySystem}. */
146 public static RepositorySystem createRepositorySystem() {
147 try {
148 // return new
149 // DefaultPlexusContainer().lookup(RepositorySystem.class);
150
151 DefaultServiceLocator locator = new DefaultServiceLocator();
152
153 locator.setServices(WagonProvider.class, new ManualWagonProvider());
154 locator.addService(RepositoryConnectorFactory.class,
155 WagonRepositoryConnectorFactory.class);
156
157 return locator.getService(RepositorySystem.class);
158 } catch (Exception e) {
159 throw new SlcException("Cannot lookup repository system", e);
160 }
161 }
162
163 public static RepositorySystemSession createRepositorySystemSession(
164 RepositorySystem system) {
165 MavenRepositorySystemSession session = new MavenRepositorySystemSession();
166
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());
173 return session;
174 }
175
176 public static void main(String[] args) {
177 new MavenManager().init();
178 }
179
180 static class CustomCli extends MavenCli {
181 private PlexusContainer container;
182
183 @Override
184 protected void customizeContainer(PlexusContainer container) {
185 this.container = container;
186 }
187
188 public PlexusContainer getContainer() {
189 return container;
190 }
191
192 }
193 }