Преглед на файлове

lot of code cleanup for dependency tree

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1368580 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-1.4-M3
Olivier Lamy преди 12 години
родител
ревизия
c2aa60f68f

+ 5
- 5
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java Целия файл

@@ -57,8 +57,6 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.project.DependencyResolutionResult;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
import org.springframework.stereotype.Service;

import javax.inject.Inject;
@@ -445,15 +443,17 @@ public class DefaultBrowseService
*/
try
{
DependencyResolutionResult result =
maven3DependencyTreeBuilder.buildDependencyTree( selectedRepos, groupId, artifactId, version, treeDependencyNodeVisitor );
log.debug( "result: {}", result );

maven3DependencyTreeBuilder.buildDependencyTree( selectedRepos, groupId, artifactId, version,
treeDependencyNodeVisitor );

}
catch ( Exception e )
{
log.error( e.getMessage(), e );
}

log.debug( "treeEntrie: {}", treeEntries );
return treeEntries;
}


+ 0
- 4
archiva-modules/plugins/maven2-repository/pom.xml Целия файл

@@ -73,10 +73,6 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact-manager</artifactId>

+ 8
- 303
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/Maven3DependencyTreeBuilder.java Целия файл

@@ -31,52 +31,30 @@ import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridgeException;
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
import org.apache.archiva.metadata.repository.storage.maven2.RepositoryModelResolver;
import org.apache.archiva.proxy.common.WagonFactory;
import org.apache.maven.RepositoryUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.model.DependencyManagement;
import org.apache.maven.model.Exclusion;
import org.apache.maven.model.Model;
import org.apache.maven.model.building.DefaultModelBuilderFactory;
import org.apache.maven.model.building.DefaultModelBuildingRequest;
import org.apache.maven.model.building.ModelBuilder;
import org.apache.maven.model.building.ModelBuildingException;
import org.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.resolution.UnresolvableModelException;
import org.apache.maven.project.DefaultDependencyResolutionRequest;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.DependencyResolutionException;
import org.apache.maven.project.DependencyResolutionResult;
import org.apache.maven.project.MavenProject;
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.MavenRepositorySystemSession;
import org.codehaus.plexus.util.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.aether.RepositorySystem;
import org.sonatype.aether.RepositorySystemSession;
import org.sonatype.aether.RequestTrace;
import org.sonatype.aether.artifact.ArtifactType;
import org.sonatype.aether.artifact.ArtifactTypeRegistry;
import org.sonatype.aether.collection.CollectRequest;
import org.sonatype.aether.collection.CollectResult;
import org.sonatype.aether.collection.DependencyCollectionException;
import org.sonatype.aether.connector.file.FileRepositoryConnectorFactory;
import org.sonatype.aether.graph.Dependency;
import org.sonatype.aether.graph.DependencyFilter;
import org.sonatype.aether.graph.DependencyVisitor;
import org.sonatype.aether.impl.ArtifactDescriptorReader;
import org.sonatype.aether.impl.VersionRangeResolver;
import org.sonatype.aether.impl.VersionResolver;
import org.sonatype.aether.impl.internal.DefaultServiceLocator;
import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
import org.sonatype.aether.repository.LocalRepository;
import org.sonatype.aether.resolution.DependencyRequest;
import org.sonatype.aether.spi.connector.ArtifactDownload;
import org.sonatype.aether.spi.connector.ArtifactUpload;
import org.sonatype.aether.spi.connector.MetadataDownload;
@@ -84,12 +62,7 @@ import org.sonatype.aether.spi.connector.MetadataUpload;
import org.sonatype.aether.spi.connector.RepositoryConnector;
import org.sonatype.aether.spi.connector.RepositoryConnectorFactory;
import org.sonatype.aether.transfer.NoRepositoryConnectorException;
import org.sonatype.aether.util.DefaultRepositorySystemSession;
import org.sonatype.aether.util.DefaultRequestTrace;
import org.sonatype.aether.util.artifact.ArtifacIdUtils;
import org.sonatype.aether.util.artifact.DefaultArtifact;
import org.sonatype.aether.util.artifact.JavaScopes;
import org.sonatype.aether.version.VersionConstraint;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
@@ -98,9 +71,7 @@ import javax.inject.Named;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;

@@ -152,9 +123,8 @@ public class Maven3DependencyTreeBuilder
builder = defaultModelBuilderFactory.newInstance();
}

public DependencyResolutionResult buildDependencyTree( List<String> repositoryIds, String groupId,
String artifactId, String version,
DependencyVisitor dependencyVisitor )
public void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
DependencyVisitor dependencyVisitor )
throws Exception
{
Artifact projectArtifact = factory.createProjectArtifact( groupId, artifactId, version );
@@ -172,7 +142,7 @@ public class Maven3DependencyTreeBuilder
if ( repository == null )
{
// metadata could not be resolved
return new DefaultDependencyResolutionResult();
return;
}

// MRM-1411
@@ -199,158 +169,14 @@ public class Maven3DependencyTreeBuilder
}
}

Model model = buildProject(
new RepositoryModelResolver( repository, pathTranslator, wagonFactory, remoteRepositories, networkProxies,
repository ), groupId, artifactId, version );

MavenProject project = new MavenProject( model );

DefaultRepositorySystemSession repositorySystemSession = new DefaultRepositorySystemSession();

// FIXME take care of relative path for getLocation
repositorySystemSession.setLocalRepositoryManager(
new SimpleLocalRepositoryManager( new File( repository.getLocation() ) ) );

DefaultProjectBuildingRequest projectBuildingRequest = new DefaultProjectBuildingRequest();

project.setProjectBuildingRequest( projectBuildingRequest );

projectBuildingRequest.setRepositorySession( repositorySystemSession );

DefaultDependencyResolutionRequest request =
new DefaultDependencyResolutionRequest( project, projectBuildingRequest.getRepositorySession() );

//DependencyFilter dependencyFilter
//request.setResolutionFilter( )

//DependencyResolutionResult result = projectDependenciesResolver.resolve( request );

//DependencyNode dependencyNode = buildDependencyNode( null, result.getDependencyGraph(), projectArtifact, null );
/*DependencyNode dependencyNode = dependencyGraphBuilder.buildDependencyGraph( project, new ArtifactFilter()
{
public boolean include( Artifact artifact )
{
return true;
}
} );*/

DependencyResolutionResult resolutionResult = resolve( request );

log.debug( "dependency graph build" );

// FIXME take care of relative path
test( repository.getLocation(), groupId, artifactId, version, dependencyVisitor );
resolve( repository.getLocation(), groupId, artifactId, version, dependencyVisitor );

return resolutionResult;
}

private DependencyResolutionResult resolve( DefaultDependencyResolutionRequest request )
throws DependencyResolutionException
{

RequestTrace trace = DefaultRequestTrace.newChild( null, request );

DefaultDependencyResolutionResult result = new DefaultDependencyResolutionResult();

MavenProject project = request.getMavenProject();
RepositorySystemSession session = request.getRepositorySession();
DependencyFilter filter = request.getResolutionFilter();

ArtifactTypeRegistry stereotypes = session.getArtifactTypeRegistry();

CollectRequest collect = new CollectRequest();
collect.setRequestContext( "project" );
collect.setRepositories( project.getRemoteProjectRepositories() );

if ( project.getDependencyArtifacts() == null )
{
for ( org.apache.maven.model.Dependency dependency : project.getDependencies() )
{
if ( StringUtils.isEmpty( dependency.getGroupId() ) || StringUtils.isEmpty( dependency.getArtifactId() )
|| StringUtils.isEmpty( dependency.getVersion() ) )
{
// guard against case where best-effort resolution for invalid models is requested
continue;
}
collect.addDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
}
}
else
{
Map<String, org.apache.maven.model.Dependency> dependencies =
new HashMap<String, org.apache.maven.model.Dependency>();
for ( org.apache.maven.model.Dependency dependency : project.getDependencies() )
{
String classifier = dependency.getClassifier();
if ( classifier == null )
{
ArtifactType type = stereotypes.get( dependency.getType() );
if ( type != null )
{
classifier = type.getClassifier();
}
}
String key = ArtifacIdUtils.toVersionlessId( dependency.getGroupId(), dependency.getArtifactId(),
dependency.getType(), classifier );
dependencies.put( key, dependency );
}
for ( Artifact artifact : project.getDependencyArtifacts() )
{
String key = artifact.getDependencyConflictId();
org.apache.maven.model.Dependency dependency = dependencies.get( key );
Collection<Exclusion> exclusions = dependency != null ? dependency.getExclusions() : null;
org.sonatype.aether.graph.Dependency dep = RepositoryUtils.toDependency( artifact, exclusions );
if ( !JavaScopes.SYSTEM.equals( dep.getScope() ) && dep.getArtifact().getFile() != null )
{
// enable re-resolution
org.sonatype.aether.artifact.Artifact art = dep.getArtifact();
art = art.setFile( null ).setVersion( art.getBaseVersion() );
dep = dep.setArtifact( art );
}
collect.addDependency( dep );
}
}

DependencyManagement depMngt = project.getDependencyManagement();
if ( depMngt != null )
{
for ( org.apache.maven.model.Dependency dependency : depMngt.getDependencies() )
{
collect.addManagedDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
}
}

collect.setRoot( new org.sonatype.aether.graph.Dependency(
new org.sonatype.aether.util.artifact.DefaultArtifact( project.getGroupId(), project.getArtifactId(), null,
project.getVersion() ), "compile" ) );

DependencyRequest depRequest = new DependencyRequest( collect, filter );
depRequest.setTrace( trace );

org.sonatype.aether.graph.DependencyNode node;
try
{
collect.setTrace( DefaultRequestTrace.newChild( trace, depRequest ) );
node = repoSystem.collectDependencies( session, collect ).getRoot();
result.setDependencyGraph( node );
}
catch ( DependencyCollectionException e )
{
result.setDependencyGraph( e.getResult().getRoot() );
result.setCollectionErrors( e.getResult().getExceptions() );

throw new DependencyResolutionException( result,
"Could not resolve dependencies for project " + project.getId()
+ ": " + e.getMessage(), e );
}

depRequest.setRoot( node );

return result;
}

private void test( String localRepoDir, String groupId, String artifactId, String version,
DependencyVisitor dependencyVisitor )
private void resolve( String localRepoDir, String groupId, String artifactId, String version,
DependencyVisitor dependencyVisitor )
{

RepositorySystem system = newRepositorySystem();
@@ -449,56 +275,12 @@ public class Maven3DependencyTreeBuilder
LocalRepository localRepo = new LocalRepository( localRepoDir );
session.setLocalRepositoryManager( system.newLocalRepositoryManager( localRepo ) );

//session.setTransferListener( new ConsoleTransferListener() );
//session.setRepositoryListener( new ConsoleRepositoryListener() );
//session.setTransferListener( );
//session.setRepositoryListener( n );

return session;
}

private String getVersionSelectedFromRange( VersionConstraint constraint )
{
if ( ( constraint == null ) || ( constraint.getVersion() != null ) )
{
return null;
}

StringBuilder sb = new StringBuilder();
for ( org.sonatype.aether.version.VersionRange range : constraint.getRanges() )
{
if ( sb.length() > 0 )
{
sb.append( ',' );
}
sb.append( range );
}

return sb.toString();
}

private Artifact getDependencyArtifact( Dependency dep )
{
org.sonatype.aether.artifact.Artifact artifact = dep.getArtifact();

return factory.createDependencyArtifact( artifact.getGroupId(), artifact.getArtifactId(),
VersionRange.createFromVersion( artifact.getVersion() ),
artifact.getExtension(), artifact.getClassifier(), dep.getScope(),
dep.isOptional() );
}

private Model buildProject( RepositoryModelResolver modelResolver, String groupId, String artifactId,
String version )
throws ModelBuildingException, UnresolvableModelException
{
DefaultModelBuildingRequest req = new DefaultModelBuildingRequest();
req.setProcessPlugins( false );
req.setModelSource( modelResolver.resolveModel( groupId, artifactId, version ) );
req.setModelResolver( modelResolver );
req.setValidationLevel( ModelBuildingRequest.VALIDATION_LEVEL_MINIMAL );
//MRM-1607. olamy this will resolve jdk profiles on the current running archiva jvm
req.setSystemProperties( System.getProperties() );

return builder.build( req ).getEffectiveModel();
}

private ManagedRepository findArtifactInRepositories( List<String> repositoryIds, Artifact projectArtifact )
throws RepositoryAdminException
@@ -521,82 +303,5 @@ public class Maven3DependencyTreeBuilder
return null;
}

public static class DefaultDependencyResolutionResult
implements DependencyResolutionResult
{

private org.sonatype.aether.graph.DependencyNode root;

private List<Dependency> dependencies = new ArrayList<Dependency>();

private List<Dependency> resolvedDependencies = new ArrayList<Dependency>();

private List<Dependency> unresolvedDependencies = new ArrayList<Dependency>();

private List<Exception> collectionErrors = new ArrayList<Exception>();

private Map<Dependency, List<Exception>> resolutionErrors = new IdentityHashMap<Dependency, List<Exception>>();

public org.sonatype.aether.graph.DependencyNode getDependencyGraph()
{
return root;
}

public void setDependencyGraph( org.sonatype.aether.graph.DependencyNode root )
{
this.root = root;
}

public List<Dependency> getDependencies()
{
return dependencies;
}

public List<Dependency> getResolvedDependencies()
{
return resolvedDependencies;
}

public void addResolvedDependency( Dependency dependency )
{
dependencies.add( dependency );
resolvedDependencies.add( dependency );
}

public List<Dependency> getUnresolvedDependencies()
{
return unresolvedDependencies;
}

public List<Exception> getCollectionErrors()
{
return collectionErrors;
}

public void setCollectionErrors( List<Exception> exceptions )
{
if ( exceptions != null )
{
this.collectionErrors = exceptions;
}
else
{
this.collectionErrors = new ArrayList<Exception>();
}
}

public List<Exception> getResolutionErrors( Dependency dependency )
{
List<Exception> errors = resolutionErrors.get( dependency );
return ( errors != null ) ? errors : Collections.<Exception>emptyList();
}

public void setResolutionErrors( Dependency dependency, List<Exception> errors )
{
dependencies.add( dependency );
unresolvedDependencies.add( dependency );
resolutionErrors.put( dependency, errors );
}

}
}

+ 13
- 17
archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTestMaven3.java Целия файл

@@ -25,7 +25,6 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.Configuration;
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.maven.project.DependencyResolutionResult;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -74,6 +73,8 @@ public class DependencyTreeBuilderTestMaven3
private DefaultRepositorySystem defaultRepositorySystem;


final Map<String, DependencyNode> nodes = new HashMap<String, DependencyNode>();

@Inject
@Named( value = "archivaConfiguration#test" )
ArchivaConfiguration config;
@@ -86,8 +87,6 @@ public class DependencyTreeBuilderTestMaven3

defaultRepositorySystem = (DefaultRepositorySystem) plexusSisuBridge.lookup( RepositorySystem.class );

final Map<String, DependencyNode> nodes = new HashMap<String, DependencyNode>();

DefaultDependencyNode springContext = new DefaultDependencyNode(
new Dependency( createArtifact( "org.springframework", "spring-context", "2.5.6" ), "compile" ) );

@@ -300,23 +299,20 @@ public class DependencyTreeBuilderTestMaven3
throws Exception
{

DependencyResolutionResult resolutionResult =
builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
TEST_VERSION, new DependencyVisitor()
builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
TEST_VERSION, new DependencyVisitor()
{
public boolean visitEnter( DependencyNode dependencyNode )
{
public boolean visitEnter( DependencyNode dependencyNode )
{
return true;
}
return true;
}

public boolean visitLeave( DependencyNode dependencyNode )
{
return true;
}
} );
public boolean visitLeave( DependencyNode dependencyNode )
{
return true;
}
} );

assertNotNull( resolutionResult );
assertEquals( 10, resolutionResult.getDependencies().size() );

}
}

Loading…
Отказ
Запис