]> source.dussan.org Git - archiva.git/blob
76d47cdde49c2d4559e79f500304a062f6aa84af
[archiva.git] /
1 package org.apache.archiva.repository.maven;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *   http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.repository.maven.dependency.tree.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  * Some static utility methods that are used by different classes.
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      * Creates a new aether repository system session for the given directory and assigns the
68      * repository to this session.
69      *
70      * @param localRepoDir The repository directory
71      * @return The newly created session object.
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      * Finds the
101      *
102      * @return
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);// FileRepositoryConnectorFactory.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 }