]> git.argeo.org Git - gpl/argeo-slc.git/blob - runtime/org.argeo.slc.support.maven/src/main/java/org/argeo/slc/maven/MavenManager.java
SLC UI building (except Dist)
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.maven / src / main / java / org / argeo / slc / maven / MavenManager.java
1 /*
2 * Copyright (C) 2007-2012 Argeo GmbH
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 package org.argeo.slc.maven;
17
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.eclipse.aether.RepositorySystem;
28 import org.eclipse.aether.RepositorySystemSession;
29 import org.eclipse.aether.artifact.Artifact;
30 import org.eclipse.aether.collection.CollectRequest;
31 import org.eclipse.aether.connector.wagon.WagonProvider;
32 import org.eclipse.aether.connector.wagon.WagonRepositoryConnectorFactory;
33 import org.eclipse.aether.graph.Dependency;
34 import org.eclipse.aether.graph.DependencyNode;
35 import org.eclipse.aether.repository.LocalRepository;
36 import org.eclipse.aether.repository.RemoteRepository;
37 import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
38 import org.eclipse.aether.util.artifact.DefaultArtifact;
39 import org.eclipse.aether.util.graph.PreorderNodeListGenerator;
40
41 public class MavenManager {
42 private final static Log log = LogFactory.getLog(MavenManager.class);
43
44 public void init() {
45 try {
46 testMaven();
47 testAether();
48 // List<ComponentDescriptor<?>> lst = plexusContainer
49 // .discoverComponents(plexusContainer.getContainerRealm());
50 // for (ComponentDescriptor<?> cd : lst) {
51 // log.debug(cd);
52 // }
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) {
71 // log.debug(art);
72 // }
73 } catch (Exception e) {
74 // TODO Auto-generated catch block
75 e.printStackTrace();
76 }
77 }
78
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",
84 "dependency:tree" };
85
86 // String m2Home = "/opt/apache-maven-3.0.1";
87 // System.setProperty("classworlds.conf", m2Home + "/bin/m2.conf");
88 // System.setProperty("maven.home", m2Home);
89 //
90 // Launcher.main(goals);
91
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);
96
97 PlexusContainer plexusContainer = mavenCli.getContainer();
98 log.debug(plexusContainer.getContext().getContextData());
99 plexusContainer.dispose();
100 }
101
102 public void testAether() {
103 try {
104 RepositorySystem repoSystem = createRepositorySystem();
105
106 RepositorySystemSession session = createRepositorySystemSession(repoSystem);
107
108 Dependency dependency = new Dependency(new DefaultArtifact(
109 "org.argeo.slc.dep:org.argeo.slc.dep.sdk:0.13.1-SNAPSHOT"),
110 "compile");
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/");
116
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();
123
124 repoSystem.resolveDependencies(session, node, null);
125
126 PreorderNodeListGenerator nlg = new PreorderNodeListGenerator();
127 node.accept(nlg);
128
129 for (Artifact artifact : nlg.getArtifacts(true)) {
130 log.debug(artifact);
131 }
132
133 AetherUtils.logDependencyNode(0, node);
134 // System.out.println(nlg.getClassPath());
135
136 } catch (Exception e) {
137 throw new SlcException("Cannot resolve", e);
138 }
139
140 }
141
142 /** Creates a Maven {@link RepositorySystem}. */
143 public static RepositorySystem createRepositorySystem() {
144 try {
145 // return new
146 // DefaultPlexusContainer().lookup(RepositorySystem.class);
147
148 DefaultServiceLocator locator = new DefaultServiceLocator();
149
150 locator.setServices(WagonProvider.class, new ManualWagonProvider());
151 locator.addService(RepositoryConnectorFactory.class,
152 WagonRepositoryConnectorFactory.class);
153
154 return locator.getService(RepositorySystem.class);
155 } catch (Exception e) {
156 throw new SlcException("Cannot lookup repository system", e);
157 }
158 }
159
160 public static RepositorySystemSession createRepositorySystemSession(
161 RepositorySystem system) {
162 MavenRepositorySystemSession session = new MavenRepositorySystemSession();
163
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());
170 return session;
171 }
172
173 public static void main(String[] args) {
174 new MavenManager().init();
175 }
176
177 }