This project has retired. For details please refer to its Attic page.
MavenSystemManager xref
View Javadoc
1   package org.apache.archiva.repository.maven2;
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.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   * 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 }