1 package org.apache.archiva.repository.maven2;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.archiva.dependency.tree.maven2.ArchivaRepositoryConnectorFactory;
23 import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
24 import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
25 import org.apache.maven.repository.internal.DefaultVersionResolver;
26 import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
27 import org.eclipse.aether.DefaultRepositorySystemSession;
28 import org.eclipse.aether.RepositorySystem;
29 import org.eclipse.aether.RepositorySystemSession;
30 import org.eclipse.aether.collection.DependencySelector;
31 import org.eclipse.aether.impl.ArtifactDescriptorReader;
32 import org.eclipse.aether.impl.DefaultServiceLocator;
33 import org.eclipse.aether.impl.VersionRangeResolver;
34 import org.eclipse.aether.impl.VersionResolver;
35 import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
36 import org.eclipse.aether.repository.LocalRepository;
37 import org.eclipse.aether.repository.LocalRepositoryManager;
38 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
39 import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
40 import org.eclipse.aether.util.graph.selector.AndDependencySelector;
41 import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44 import org.springframework.stereotype.Service;
45
46 import javax.annotation.PostConstruct;
47
48
49
50
51 @Service("mavenSystemManager")
52 public class MavenSystemManager {
53
54 static Logger log = LoggerFactory.getLogger(MavenSystemManager.class);
55
56 private DefaultServiceLocator locator;
57 private RepositorySystem system;
58
59 @PostConstruct
60 private synchronized void init() {
61 locator = newLocator();
62 system = newRepositorySystem(locator);
63
64 }
65
66
67
68
69
70
71
72
73 public static RepositorySystemSession newRepositorySystemSession(String localRepoDir) {
74 DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
75
76 LocalRepository repo = new LocalRepository(localRepoDir);
77
78 DependencySelector depFilter = new AndDependencySelector(new ExclusionDependencySelector());
79 session.setDependencySelector(depFilter);
80 SimpleLocalRepositoryManagerFactory repFactory = new SimpleLocalRepositoryManagerFactory();
81 try {
82 LocalRepositoryManager manager = repFactory.newInstance(session, repo);
83 session.setLocalRepositoryManager(manager);
84 } catch (NoLocalRepositoryManagerException e) {
85 log.error("Could not assign the repository manager to the session: {}", e.getMessage(), e);
86 }
87
88 return session;
89 }
90
91 public RepositorySystem getRepositorySystem() {
92 return system;
93 }
94
95 public DefaultServiceLocator getLocator() {
96 return locator;
97 }
98
99
100
101
102
103
104 public static RepositorySystem newRepositorySystem(DefaultServiceLocator locator) {
105 return locator.getService(RepositorySystem.class);
106 }
107
108 public static DefaultServiceLocator newLocator() {
109 DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
110
111 locator.addService(RepositoryConnectorFactory.class,
112 ArchivaRepositoryConnectorFactory.class);
113 locator.addService(VersionResolver.class, DefaultVersionResolver.class);
114 locator.addService(VersionRangeResolver.class, DefaultVersionRangeResolver.class);
115 locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class);
116
117 return locator;
118 }
119 }