]> source.dussan.org Git - archiva.git/commitdiff
Adding bean for maven repositorysystem management
authorMartin Stockhammer <martin_s@apache.org>
Wed, 7 Nov 2018 21:14:18 +0000 (22:14 +0100)
committerMartin Stockhammer <martin_s@apache.org>
Wed, 7 Nov 2018 21:14:18 +0000 (22:14 +0100)
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java [new file with mode: 0644]
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenUtil.java [deleted file]
archiva-modules/plugins/maven2-repository/src/main/resources/META-INF/spring-context.xml

index 7c61aec147f85e08f2f466e4cb6fd72bd1660cac..d200d081ac71599271d8a62c1800ed8417644ea6 100644 (file)
@@ -34,13 +34,12 @@ import org.apache.archiva.model.ArchivaRepositoryMetadata;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.repository.RepositoryRegistry;
-import org.apache.archiva.repository.maven2.MavenUtil;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
 import org.apache.archiva.repository.metadata.MetadataTools;
 import org.apache.archiva.xml.XMLException;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.bridge.MavenRepositorySystem;
-import org.apache.maven.model.building.DefaultModelBuilderFactory;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.DefaultArtifact;
@@ -91,6 +90,9 @@ public class Maven3DependencyTreeBuilder
     @Inject
     RepositoryRegistry repositoryRegistry;
 
+    @Inject
+    MavenSystemManager mavenSystemManager;
+
 
     @PostConstruct
     public void initialize()
@@ -193,8 +195,8 @@ public class Maven3DependencyTreeBuilder
     private void resolve( ResolveRequest resolveRequest )
     {
 
-        RepositorySystem system = MavenUtil.newRepositorySystem();
-        RepositorySystemSession session = MavenUtil.newRepositorySystemSession( resolveRequest.localRepoDir );
+        RepositorySystem system = mavenSystemManager.getRepositorySystem();
+        RepositorySystemSession session = MavenSystemManager.newRepositorySystemSession( resolveRequest.localRepoDir );
 
         org.eclipse.aether.artifact.Artifact artifact = new DefaultArtifact(
             resolveRequest.groupId + ":" + resolveRequest.artifactId + ":" + resolveRequest.version );
index b3b420f29003ef191db779258f09359259f4f77e..3176387305e294301c6ac5c8eeba5758ad92dd24 100644 (file)
@@ -54,6 +54,7 @@ import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.content.PathParser;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
 import org.apache.archiva.xml.XMLException;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
@@ -149,6 +150,9 @@ public class Maven2RepositoryStorage
     @Named( "pathParser#default" )
     private PathParser pathParser;
 
+    @Inject
+    private MavenSystemManager mavenSystemManager;
+
     private static final String METADATA_FILENAME_START = "maven-metadata";
 
     private static final String METADATA_FILENAME = METADATA_FILENAME_START + ".xml";
@@ -292,7 +296,7 @@ public class Maven2RepositoryStorage
             // MRM-1411
             req.setModelResolver(
                 new RepositoryModelResolver( managedRepository, pathTranslator, wagonFactory, remoteRepositories,
-                                             networkProxies, managedRepository ));
+                                             networkProxies, managedRepository , mavenSystemManager));
 
             Model model;
             try
index 00bd622af55cd308abc924aa1a3cf778073dab01..92ef88bf842bd44759940b113969b18441ab541d 100644 (file)
@@ -32,7 +32,7 @@ import org.apache.archiva.proxy.common.WagonFactoryRequest;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.RemoteRepository;
 import org.apache.archiva.repository.RepositoryCredentials;
-import org.apache.archiva.repository.maven2.MavenUtil;
+import org.apache.archiva.repository.maven2.MavenSystemManager;
 import org.apache.archiva.xml.XMLException;
 import org.apache.commons.lang.StringUtils;
 import org.apache.http.auth.UsernamePasswordCredentials;
@@ -56,7 +56,6 @@ import org.apache.maven.wagon.authentication.AuthenticationException;
 import org.apache.maven.wagon.authentication.AuthenticationInfo;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.proxy.ProxyInfo;
-import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.artifact.DefaultArtifact;
@@ -71,6 +70,7 @@ import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.inject.Inject;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -99,7 +99,7 @@ public class RepositoryModelResolver
 
     private static final String METADATA_FILENAME = "maven-metadata.xml";
 
-    private DefaultServiceLocator locator;
+    private MavenSystemManager mavenSystemManager;
 
     // key/value: remote repo ID/network proxy
     Map<String, NetworkProxy> networkProxyMap;
@@ -115,7 +115,8 @@ public class RepositoryModelResolver
 
     public RepositoryModelResolver( ManagedRepository managedRepository, RepositoryPathTranslator pathTranslator,
                                     WagonFactory wagonFactory, List<RemoteRepository> remoteRepositories,
-                                    Map<String, NetworkProxy> networkProxiesMap, ManagedRepository targetRepository)
+                                    Map<String, NetworkProxy> networkProxiesMap, ManagedRepository targetRepository,
+                                    MavenSystemManager mavenSystemManager)
     {
         this( Paths.get( managedRepository.getLocation() ), pathTranslator );
 
@@ -129,23 +130,13 @@ public class RepositoryModelResolver
 
         this.targetRepository = targetRepository;
 
-        this.locator =  MavenRepositorySystemUtils.newServiceLocator( );
+        this.session = MavenSystemManager.newRepositorySystemSession( managedRepository.getLocalPath().toString() );
 
-        locator.addService( RepositoryConnectorFactory.class,
-            ArchivaRepositoryConnectorFactory.class );// FileRepositoryConnectorFactory.class );
-        locator.addService( VersionResolver.class, DefaultVersionResolver.class );
-        locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
-        locator.addService( ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class );
+        this.versionRangeResolver = mavenSystemManager.getLocator().getService(VersionRangeResolver.class);
 
-        this.session = MavenUtil.newRepositorySystemSession( managedRepository.getLocalPath().toString() );
-
-        this.versionRangeResolver = locator.getService(VersionRangeResolver.class);
+        this.mavenSystemManager = mavenSystemManager;
     }
 
-    private RepositorySystem newRepositorySystem()
-    {
-        return locator.getService( RepositorySystem.class );
-    }
 
     @Override
     public ModelSource resolveModel( String groupId, String artifactId, String version )
@@ -301,7 +292,7 @@ public class RepositoryModelResolver
     public ModelResolver newCopy()
     {
         return new RepositoryModelResolver( managedRepository,  pathTranslator, wagonFactory, remoteRepositories, 
-                                            networkProxyMap, targetRepository);
+                                            networkProxyMap, targetRepository, mavenSystemManager);
     }
 
     // FIXME: we need to do some refactoring, we cannot re-use the proxy components of archiva-proxy in maven2-repository
@@ -316,7 +307,7 @@ public class RepositoryModelResolver
         Path tmpSha1 = null;
         Path tmpResource = null;
         String artifactPath = pathTranslator.toPath( groupId, artifactId, version, filename );
-        Path resource = Paths.get(targetRepository.getLocation()).resolve( artifactPath );
+        Path resource = targetRepository.getLocalPath().resolve( artifactPath );
 
         Path workingDirectory = createWorkingDirectory( targetRepository.getLocation().toString() );
         try
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java
new file mode 100644 (file)
index 0000000..55b3fb6
--- /dev/null
@@ -0,0 +1,119 @@
+package org.apache.archiva.repository.maven2;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.archiva.dependency.tree.maven2.ArchivaRepositoryConnectorFactory;
+import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
+import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
+import org.apache.maven.repository.internal.DefaultVersionResolver;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.collection.DependencySelector;
+import org.eclipse.aether.impl.ArtifactDescriptorReader;
+import org.eclipse.aether.impl.DefaultServiceLocator;
+import org.eclipse.aether.impl.VersionRangeResolver;
+import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
+import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
+import org.eclipse.aether.util.graph.selector.AndDependencySelector;
+import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * Some static utility methods that are used by different classes.
+ */
+@Service("mavenSystemManager")
+public class MavenSystemManager {
+
+    static Logger log = LoggerFactory.getLogger(MavenSystemManager.class);
+
+    private DefaultServiceLocator locator;
+    private RepositorySystem system;
+
+    @PostConstruct
+    private synchronized void init() {
+        locator = newLocator();
+        system = newRepositorySystem(locator);
+
+    }
+
+    /**
+     * Creates a new aether repository system session for the given directory and assigns the
+     * repository to this session.
+     *
+     * @param localRepoDir The repository directory
+     * @return The newly created session object.
+     */
+    public static RepositorySystemSession newRepositorySystemSession(String localRepoDir) {
+        DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
+
+        LocalRepository repo = new LocalRepository(localRepoDir);
+
+        DependencySelector depFilter = new AndDependencySelector(new ExclusionDependencySelector());
+        session.setDependencySelector(depFilter);
+        SimpleLocalRepositoryManagerFactory repFactory = new SimpleLocalRepositoryManagerFactory();
+        try {
+            LocalRepositoryManager manager = repFactory.newInstance(session, repo);
+            session.setLocalRepositoryManager(manager);
+        } catch (NoLocalRepositoryManagerException e) {
+            log.error("Could not assign the repository manager to the session: {}", e.getMessage(), e);
+        }
+
+        return session;
+    }
+
+    public RepositorySystem getRepositorySystem() {
+        return system;
+    }
+
+    public DefaultServiceLocator getLocator() {
+        return locator;
+    }
+
+    /**
+     * Finds the
+     *
+     * @return
+     */
+    public static RepositorySystem newRepositorySystem(DefaultServiceLocator locator) {
+        return locator.getService(RepositorySystem.class);
+    }
+
+    public static DefaultServiceLocator newLocator() {
+        DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
+
+        locator.addService(RepositoryConnectorFactory.class,
+                ArchivaRepositoryConnectorFactory.class);// FileRepositoryConnectorFactory.class );
+        locator.addService(VersionResolver.class, DefaultVersionResolver.class);
+        locator.addService(VersionRangeResolver.class, DefaultVersionRangeResolver.class);
+        locator.addService(ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class);
+
+        return locator;
+    }
+}
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenUtil.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenUtil.java
deleted file mode 100644 (file)
index 95d4df0..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.archiva.repository.maven2;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.archiva.dependency.tree.maven2.ArchivaRepositoryConnectorFactory;
-import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
-import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
-import org.apache.maven.repository.internal.DefaultVersionResolver;
-import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
-import org.eclipse.aether.DefaultRepositorySystemSession;
-import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.collection.DependencySelector;
-import org.eclipse.aether.impl.ArtifactDescriptorReader;
-import org.eclipse.aether.impl.DefaultServiceLocator;
-import org.eclipse.aether.impl.VersionRangeResolver;
-import org.eclipse.aether.impl.VersionResolver;
-import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
-import org.eclipse.aether.repository.LocalRepository;
-import org.eclipse.aether.repository.LocalRepositoryManager;
-import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
-import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
-import org.eclipse.aether.util.graph.selector.AndDependencySelector;
-import org.eclipse.aether.util.graph.selector.ExclusionDependencySelector;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Some static utility methods that are used by different classes.
- */
-public class MavenUtil {
-
-    static Logger log = LoggerFactory.getLogger(MavenUtil.class);
-
-    /**
-     * Creates a new aether repository system session for the given directory and assigns the
-     * repository to this session.
-     *
-     * @param localRepoDir The repository directory
-     * @return The newly created session object.
-     */
-    public static RepositorySystemSession newRepositorySystemSession(String localRepoDir)
-    {
-        DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession( );
-
-        LocalRepository repo = new LocalRepository( localRepoDir );
-
-        DependencySelector depFilter = new AndDependencySelector( new ExclusionDependencySelector() );
-        session.setDependencySelector( depFilter );
-        SimpleLocalRepositoryManagerFactory repFactory = new SimpleLocalRepositoryManagerFactory( );
-        try
-        {
-            LocalRepositoryManager manager = repFactory.newInstance( session, repo );
-            session.setLocalRepositoryManager(manager);
-        }
-        catch ( NoLocalRepositoryManagerException e )
-        {
-            log.error("Could not assign the repository manager to the session: {}", e.getMessage(), e);
-        }
-
-        return session;
-    }
-
-    /**
-     * Finds the
-     * @return
-     */
-    public static RepositorySystem newRepositorySystem()
-    {
-        DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator( );
-        locator.addService( RepositoryConnectorFactory.class,
-                            ArchivaRepositoryConnectorFactory.class );// FileRepositoryConnectorFactory.class );
-        locator.addService( VersionResolver.class, DefaultVersionResolver.class );
-        locator.addService( VersionRangeResolver.class, DefaultVersionRangeResolver.class );
-        locator.addService( ArtifactDescriptorReader.class, DefaultArtifactDescriptorReader.class );
-
-        return locator.getService( RepositorySystem.class );
-    }
-}
index 9fb23a571f5f6e22dd09e7a5462832ff81fee7ff..375a863fed7b24004222aaeb3a0931d90b6bfab5 100644 (file)
@@ -36,4 +36,5 @@
   <alias name="repositoryStorage#maven2" alias="repositoryStorage#default"/>
   <alias name="repositoryStorage#maven2" alias="repositoryStorage#legacy"/>
 
+
 </beans>
\ No newline at end of file