You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2018/11/07 22:29:34 UTC
[archiva] 05/05: Adding bean for maven repositorysystem management
This is an automated email from the ASF dual-hosted git repository.
martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva.git
commit 76c17e2cea030a2f29cfb99f0e82a13bdab820d9
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Wed Nov 7 22:14:18 2018 +0100
Adding bean for maven repositorysystem management
---
.../tree/maven2/Maven3DependencyTreeBuilder.java | 10 +--
.../storage/maven2/Maven2RepositoryStorage.java | 6 +-
.../storage/maven2/RepositoryModelResolver.java | 29 +++-----
.../{MavenUtil.java => MavenSystemManager.java} | 77 ++++++++++++++--------
.../src/main/resources/META-INF/spring-context.xml | 1 +
5 files changed, 72 insertions(+), 51 deletions(-)
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
index 7c61aec..d200d08 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java
@@ -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 );
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
index b3b420f..3176387 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
@@ -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
diff --git a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
index 00bd622..92ef88b 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
+++ b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/RepositoryModelResolver.java
@@ -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/MavenUtil.java b/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java
similarity index 65%
rename from archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenUtil.java
rename to archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/repository/maven2/MavenSystemManager.java
index 95d4df0..55b3fb6 100644
--- 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/MavenSystemManager.java
@@ -41,13 +41,27 @@ 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.
*/
-public class MavenUtil {
+@Service("mavenSystemManager")
+public class MavenSystemManager {
+
+ static Logger log = LoggerFactory.getLogger(MavenSystemManager.class);
+
+ private DefaultServiceLocator locator;
+ private RepositorySystem system;
- static Logger log = LoggerFactory.getLogger(MavenUtil.class);
+ @PostConstruct
+ private synchronized void init() {
+ locator = newLocator();
+ system = newRepositorySystem(locator);
+
+ }
/**
* Creates a new aether repository system session for the given directory and assigns the
@@ -56,41 +70,50 @@ public class MavenUtil {
* @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 );
+ 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 )
- {
+ } 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 = 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 );
+ 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/resources/META-INF/spring-context.xml b/archiva-modules/plugins/maven2-repository/src/main/resources/META-INF/spring-context.xml
index 9fb23a5..375a863 100644
--- a/archiva-modules/plugins/maven2-repository/src/main/resources/META-INF/spring-context.xml
+++ b/archiva-modules/plugins/maven2-repository/src/main/resources/META-INF/spring-context.xml
@@ -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