mirror of https://github.com/apache/archiva.git
remove dependency on maven tree component
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1369472 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f507ef2481
commit
2d64002185
|
@ -21,7 +21,6 @@ package org.apache.archiva.rest.services;
|
|||
import org.apache.archiva.admin.model.beans.ManagedRepository;
|
||||
import org.apache.archiva.common.utils.VersionComparator;
|
||||
import org.apache.archiva.dependency.tree.maven2.DependencyTreeBuilder;
|
||||
import org.apache.archiva.dependency.tree.maven2.Maven3DependencyTreeBuilder;
|
||||
import org.apache.archiva.maven2.model.Artifact;
|
||||
import org.apache.archiva.maven2.model.TreeEntry;
|
||||
import org.apache.archiva.metadata.generic.GenericMetadataFacet;
|
||||
|
@ -90,9 +89,6 @@ public class DefaultBrowseService
|
|||
@Inject
|
||||
private DependencyTreeBuilder dependencyTreeBuilder;
|
||||
|
||||
@Inject
|
||||
private Maven3DependencyTreeBuilder maven3DependencyTreeBuilder;
|
||||
|
||||
@Inject
|
||||
private RepositoryContentFactory repositoryContentFactory;
|
||||
|
||||
|
@ -429,7 +425,7 @@ public class DefaultBrowseService
|
|||
try
|
||||
{
|
||||
|
||||
return maven3DependencyTreeBuilder.buildDependencyTree( selectedRepos, groupId, artifactId, version );
|
||||
return dependencyTreeBuilder.buildDependencyTree( selectedRepos, groupId, artifactId, version );
|
||||
|
||||
}
|
||||
catch ( Exception e )
|
||||
|
|
|
@ -21,12 +21,11 @@ package org.apache.archiva.web.tags;
|
|||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import org.apache.archiva.common.ArchivaException;
|
||||
import org.apache.archiva.dependency.tree.maven2.Maven3DependencyTreeBuilder;
|
||||
import org.apache.archiva.dependency.tree.maven2.DependencyTreeBuilder;
|
||||
import org.apache.archiva.model.Keys;
|
||||
import org.apache.archiva.security.ArchivaXworkUser;
|
||||
import org.apache.archiva.security.UserRepositories;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.sonatype.aether.artifact.Artifact;
|
||||
|
@ -48,7 +47,7 @@ public class DependencyTree
|
|||
|
||||
|
||||
@Inject
|
||||
private Maven3DependencyTreeBuilder dependencyTreeBuilder;
|
||||
private DependencyTreeBuilder dependencyTreeBuilder;
|
||||
|
||||
@Inject
|
||||
private UserRepositories userRepositories;
|
||||
|
|
|
@ -109,16 +109,6 @@
|
|||
<artifactId>aether-connector-file</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-dependency-tree</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.apache.maven</groupId>
|
||||
<artifactId>maven-project</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.archiva</groupId>
|
||||
<artifactId>archiva-configuration</artifactId>
|
||||
|
|
|
@ -1,585 +0,0 @@
|
|||
package org.apache.archiva.dependency.tree.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.admin.model.RepositoryAdminException;
|
||||
import org.apache.archiva.admin.model.beans.ManagedRepository;
|
||||
import org.apache.archiva.admin.model.beans.NetworkProxy;
|
||||
import org.apache.archiva.admin.model.beans.ProxyConnector;
|
||||
import org.apache.archiva.admin.model.beans.RemoteRepository;
|
||||
import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
|
||||
import org.apache.archiva.admin.model.networkproxy.NetworkProxyAdmin;
|
||||
import org.apache.archiva.admin.model.proxyconnector.ProxyConnectorAdmin;
|
||||
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.common.utils.Slf4JPlexusLogger;
|
||||
import org.apache.archiva.metadata.repository.MetadataResolutionException;
|
||||
import org.apache.archiva.metadata.repository.MetadataResolver;
|
||||
import org.apache.archiva.metadata.repository.RepositorySession;
|
||||
import org.apache.archiva.metadata.repository.RepositorySessionFactory;
|
||||
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.commons.lang.StringUtils;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException;
|
||||
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
|
||||
import org.apache.maven.artifact.metadata.ResolutionGroup;
|
||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||
import org.apache.maven.artifact.resolver.ArtifactCollector;
|
||||
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
|
||||
import org.apache.maven.artifact.resolver.filter.AndArtifactFilter;
|
||||
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
|
||||
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
|
||||
import org.apache.maven.artifact.versioning.ArtifactVersion;
|
||||
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
||||
import org.apache.maven.artifact.versioning.ManagedVersionMap;
|
||||
import org.apache.maven.artifact.versioning.VersionRange;
|
||||
import org.apache.maven.model.Dependency;
|
||||
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.shared.dependency.tree.DependencyNode;
|
||||
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
|
||||
import org.apache.maven.shared.dependency.tree.DependencyTreeResolutionListener;
|
||||
import org.apache.maven.shared.dependency.tree.filter.AncestorOrSelfDependencyNodeFilter;
|
||||
import org.apache.maven.shared.dependency.tree.filter.DependencyNodeFilter;
|
||||
import org.apache.maven.shared.dependency.tree.filter.StateDependencyNodeFilter;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.BuildingDependencyNodeVisitor;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.CollectingDependencyNodeVisitor;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.FilteringDependencyNodeVisitor;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.inject.Inject;
|
||||
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.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Default implementation of <code>DependencyTreeBuilder</code>. Customized wrapper for maven-dependency-tree to use
|
||||
* maven-model-builder instead of maven-project. Note that the role must differ to avoid conflicting with the
|
||||
* maven-shared implementation.
|
||||
*/
|
||||
@Service( "dependencyTreeBuilder#maven2" )
|
||||
public class DefaultDependencyTreeBuilder
|
||||
implements DependencyTreeBuilder
|
||||
{
|
||||
|
||||
private Logger log = LoggerFactory.getLogger( getClass() );
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private ArtifactFactory factory;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private ArtifactCollector collector;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private ModelBuilder builder;
|
||||
|
||||
/**
|
||||
* TODO: can have other types, and this might eventually come through from the main request
|
||||
*/
|
||||
@Inject
|
||||
private RepositorySessionFactory repositorySessionFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@Inject
|
||||
@Named( value = "repositoryPathTranslator#maven2" )
|
||||
private RepositoryPathTranslator pathTranslator;
|
||||
|
||||
@Inject
|
||||
private ProxyConnectorAdmin proxyConnectorAdmin;
|
||||
|
||||
@Inject
|
||||
private NetworkProxyAdmin networkProxyAdmin;
|
||||
|
||||
@Inject
|
||||
private RemoteRepositoryAdmin remoteRepositoryAdmin;
|
||||
|
||||
@Inject
|
||||
private ManagedRepositoryAdmin managedRepositoryAdmin;
|
||||
|
||||
@Inject
|
||||
private PlexusSisuBridge plexusSisuBridge;
|
||||
|
||||
@Inject
|
||||
private WagonFactory wagonFactory;
|
||||
|
||||
@PostConstruct
|
||||
public void initialize()
|
||||
throws PlexusSisuBridgeException
|
||||
{
|
||||
factory = plexusSisuBridge.lookup( ArtifactFactory.class, "default" );
|
||||
collector = plexusSisuBridge.lookup( ArtifactCollector.class, "default" );
|
||||
|
||||
DefaultModelBuilderFactory defaultModelBuilderFactory = new DefaultModelBuilderFactory();
|
||||
builder = defaultModelBuilderFactory.newInstance();
|
||||
}
|
||||
|
||||
public void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
|
||||
DependencyNodeVisitor nodeVisitor )
|
||||
throws DependencyTreeBuilderException
|
||||
{
|
||||
DependencyTreeResolutionListener listener =
|
||||
new DependencyTreeResolutionListener( new Slf4JPlexusLogger( getClass() ) );
|
||||
|
||||
Artifact projectArtifact = factory.createProjectArtifact( groupId, artifactId, version );
|
||||
ManagedRepository repository = null;
|
||||
try
|
||||
{
|
||||
repository = findArtifactInRepositories( repositoryIds, projectArtifact );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
if ( repository == null )
|
||||
{
|
||||
// metadata could not be resolved
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// MRM-1411
|
||||
// TODO: this is a workaround for a lack of proxy capability in the resolvers - replace when it can all be
|
||||
// handled there. It doesn't cache anything locally!
|
||||
List<RemoteRepository> remoteRepositories = new ArrayList<RemoteRepository>();
|
||||
Map<String, NetworkProxy> networkProxies = new HashMap<String, NetworkProxy>();
|
||||
|
||||
Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyConnectorAdmin.getProxyConnectorAsMap();
|
||||
List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get( repository.getId() );
|
||||
if ( proxyConnectors != null )
|
||||
{
|
||||
for ( ProxyConnector proxyConnector : proxyConnectors )
|
||||
{
|
||||
remoteRepositories.add(
|
||||
remoteRepositoryAdmin.getRemoteRepository( proxyConnector.getTargetRepoId() ) );
|
||||
|
||||
NetworkProxy networkProxyConfig = networkProxyAdmin.getNetworkProxy( proxyConnector.getProxyId() );
|
||||
|
||||
if ( networkProxyConfig != null )
|
||||
{
|
||||
// key/value: remote repo ID/proxy info
|
||||
networkProxies.put( proxyConnector.getTargetRepoId(), networkProxyConfig );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Model model = buildProject(
|
||||
new RepositoryModelResolver( repository, pathTranslator, wagonFactory, remoteRepositories, networkProxies,
|
||||
repository ), groupId, artifactId, version );
|
||||
|
||||
Map managedVersions = createManagedVersionMap( model );
|
||||
|
||||
Set<Artifact> dependencyArtifacts = createArtifacts( model, null );
|
||||
|
||||
RepositorySession repositorySession = repositorySessionFactory.createSession();
|
||||
try
|
||||
{
|
||||
ArtifactMetadataSource metadataSource =
|
||||
new MetadataArtifactMetadataSource( repositoryIds, repositorySession );
|
||||
|
||||
// Note that we don't permit going to external repositories. We don't need to pass in a local and remote
|
||||
// since our metadata source has control over them
|
||||
collector.collect( dependencyArtifacts, projectArtifact, managedVersions, null, null, metadataSource,
|
||||
null, Collections.singletonList( listener ) );
|
||||
|
||||
//collector.collect( dependencyArtifacts, projectArtifact, null, Collections.<ArtifactRepository>emptyList(),
|
||||
// metadataSource, null, Collections.singletonList( (ResolutionListener) listener ) );
|
||||
|
||||
/*
|
||||
Set<Artifact> artifacts, Artifact originatingArtifact,
|
||||
ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
|
||||
ArtifactMetadataSource source, ArtifactFilter filter,
|
||||
List< ResolutionListener > listeners
|
||||
*/
|
||||
}
|
||||
finally
|
||||
{
|
||||
repositorySession.close();
|
||||
}
|
||||
|
||||
DependencyNode rootNode = listener.getRootNode();
|
||||
|
||||
// TODO: remove the need for this when the serializer can calculate last nodes from visitor calls only
|
||||
DependencyNodeVisitor visitor = new BuildingDependencyNodeVisitor( nodeVisitor );
|
||||
|
||||
CollectingDependencyNodeVisitor collectingVisitor = new CollectingDependencyNodeVisitor();
|
||||
DependencyNodeVisitor firstPassVisitor =
|
||||
new FilteringDependencyNodeVisitor( collectingVisitor, StateDependencyNodeFilter.INCLUDED );
|
||||
rootNode.accept( firstPassVisitor );
|
||||
|
||||
DependencyNodeFilter secondPassFilter =
|
||||
new AncestorOrSelfDependencyNodeFilter( collectingVisitor.getNodes() );
|
||||
visitor = new FilteringDependencyNodeVisitor( visitor, secondPassFilter );
|
||||
|
||||
rootNode.accept( visitor );
|
||||
}
|
||||
catch ( ArtifactResolutionException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
catch ( InvalidVersionSpecificationException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Invalid dependency version for artifact " + projectArtifact );
|
||||
}
|
||||
catch ( ModelBuildingException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
catch ( UnresolvableModelException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
}
|
||||
|
||||
private ManagedRepository findArtifactInRepositories( List<String> repositoryIds, Artifact projectArtifact )
|
||||
throws RepositoryAdminException
|
||||
{
|
||||
for ( String repoId : repositoryIds )
|
||||
{
|
||||
ManagedRepository managedRepository = managedRepositoryAdmin.getManagedRepository( repoId );
|
||||
|
||||
File repoDir = new File( managedRepository.getLocation() );
|
||||
File file = pathTranslator.toFile( repoDir, projectArtifact.getGroupId(), projectArtifact.getArtifactId(),
|
||||
projectArtifact.getBaseVersion(),
|
||||
projectArtifact.getArtifactId() + "-" + projectArtifact.getVersion()
|
||||
+ ".pom" );
|
||||
|
||||
if ( file.exists() )
|
||||
{
|
||||
return managedRepository;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Model buildProject( RepositoryModelResolver modelResolver, String groupId, String artifactId,
|
||||
String version )
|
||||
throws ModelBuildingException, UnresolvableModelException
|
||||
{
|
||||
ModelBuildingRequest 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();
|
||||
}
|
||||
|
||||
// from maven-project to avoid the dependency on it
|
||||
private Set<Artifact> createArtifacts( Model model, ArtifactFilter dependencyFilter )
|
||||
throws InvalidVersionSpecificationException
|
||||
{
|
||||
Collection<Dependency> dependencies = model.getDependencies();
|
||||
Set<Artifact> projectArtifacts = new LinkedHashSet<Artifact>( dependencies.size() );
|
||||
|
||||
for ( Dependency dependency : dependencies )
|
||||
{
|
||||
String scope = dependency.getScope();
|
||||
|
||||
if ( StringUtils.isEmpty( scope ) )
|
||||
{
|
||||
scope = Artifact.SCOPE_COMPILE;
|
||||
|
||||
dependency.setScope( scope );
|
||||
}
|
||||
|
||||
VersionRange versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() );
|
||||
Artifact artifact =
|
||||
factory.createDependencyArtifact( dependency.getGroupId(), dependency.getArtifactId(), versionRange,
|
||||
dependency.getType(), dependency.getClassifier(), scope, null,
|
||||
dependency.isOptional() );
|
||||
|
||||
if ( Artifact.SCOPE_SYSTEM.equals( scope ) )
|
||||
{
|
||||
artifact.setFile( new File( dependency.getSystemPath() ) );
|
||||
}
|
||||
|
||||
ArtifactFilter artifactFilter = dependencyFilter;
|
||||
|
||||
// MNG-3769: It would be nice to be able to process relocations here,
|
||||
// so we could have this filtering step apply to post-relocated dependencies.
|
||||
// HOWEVER, this would require a much more invasive POM resolution process
|
||||
// in order to look for relocations, which would make the early steps in
|
||||
// a Maven build way too heavy.
|
||||
if ( artifact != null && ( artifactFilter == null || artifactFilter.include( artifact ) ) )
|
||||
{
|
||||
if ( dependency.getExclusions() != null && !dependency.getExclusions().isEmpty() )
|
||||
{
|
||||
List<String> exclusions = new ArrayList<String>();
|
||||
for ( Object o : dependency.getExclusions() )
|
||||
{
|
||||
Exclusion e = (Exclusion) o;
|
||||
exclusions.add( e.getGroupId() + ":" + e.getArtifactId() );
|
||||
}
|
||||
|
||||
ArtifactFilter newFilter = new ExcludesArtifactFilter( exclusions );
|
||||
|
||||
if ( artifactFilter != null )
|
||||
{
|
||||
AndArtifactFilter filter = new AndArtifactFilter();
|
||||
filter.add( artifactFilter );
|
||||
filter.add( newFilter );
|
||||
artifactFilter = filter;
|
||||
}
|
||||
else
|
||||
{
|
||||
artifactFilter = newFilter;
|
||||
}
|
||||
}
|
||||
|
||||
artifact.setDependencyFilter( artifactFilter );
|
||||
|
||||
projectArtifacts.add( artifact );
|
||||
}
|
||||
}
|
||||
|
||||
return projectArtifacts;
|
||||
|
||||
}
|
||||
|
||||
// from maven-project to avoid the dependency on it
|
||||
|
||||
private Map createManagedVersionMap( Model model )
|
||||
throws InvalidVersionSpecificationException
|
||||
{
|
||||
DependencyManagement dependencyManagement = model.getDependencyManagement();
|
||||
|
||||
Map<String, Artifact> map = null;
|
||||
List<Dependency> deps;
|
||||
if ( ( dependencyManagement != null ) && ( ( deps = dependencyManagement.getDependencies() ) != null ) && (
|
||||
deps.size() > 0 ) )
|
||||
{
|
||||
map = new ManagedVersionMap( map );
|
||||
|
||||
for ( Dependency dependency : dependencyManagement.getDependencies() )
|
||||
{
|
||||
|
||||
VersionRange versionRange = VersionRange.createFromVersionSpec( dependency.getVersion() );
|
||||
|
||||
Artifact artifact =
|
||||
factory.createDependencyArtifact( dependency.getGroupId(), dependency.getArtifactId(), versionRange,
|
||||
dependency.getType(), dependency.getClassifier(),
|
||||
dependency.getScope(), dependency.isOptional() );
|
||||
|
||||
log.debug( "artifact {}", artifact );
|
||||
|
||||
// If the dependencyManagement section listed exclusions,
|
||||
// add them to the managed artifacts here so that transitive
|
||||
// dependencies will be excluded if necessary.
|
||||
if ( ( null != dependency.getExclusions() ) && !dependency.getExclusions().isEmpty() )
|
||||
{
|
||||
List<String> exclusions = new ArrayList<String>();
|
||||
|
||||
for ( Exclusion exclusion : dependency.getExclusions() )
|
||||
{
|
||||
exclusions.add( exclusion.getGroupId() + ":" + exclusion.getArtifactId() );
|
||||
}
|
||||
ExcludesArtifactFilter eaf = new ExcludesArtifactFilter( exclusions );
|
||||
artifact.setDependencyFilter( eaf );
|
||||
}
|
||||
else
|
||||
{
|
||||
artifact.setDependencyFilter( null );
|
||||
}
|
||||
map.put( dependency.getManagementKey(), artifact );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
map = Collections.emptyMap();
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private class MetadataArtifactMetadataSource
|
||||
implements ArtifactMetadataSource
|
||||
{
|
||||
private final List<String> repositoryIds;
|
||||
|
||||
private final RepositorySession session;
|
||||
|
||||
private final MetadataResolver resolver;
|
||||
|
||||
public MetadataArtifactMetadataSource( List<String> repositoryIds, RepositorySession session )
|
||||
{
|
||||
this.repositoryIds = repositoryIds;
|
||||
this.session = session;
|
||||
resolver = this.session.getResolver();
|
||||
}
|
||||
|
||||
// modified version from MavenMetadataSource to work with the simpler environment
|
||||
public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository,
|
||||
List remoteRepositories )
|
||||
throws ArtifactMetadataRetrievalException
|
||||
{
|
||||
// TODO: we removed relocation support here. This is something that might need to be generically handled
|
||||
// throughout this module
|
||||
|
||||
Artifact pomArtifact =
|
||||
factory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(),
|
||||
artifact.getScope() );
|
||||
|
||||
ManagedRepository repository = null;
|
||||
try
|
||||
{
|
||||
repository = findArtifactInRepositories( repositoryIds, pomArtifact );
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
|
||||
}
|
||||
Model project = null;
|
||||
if ( !Artifact.SCOPE_SYSTEM.equals( artifact.getScope() ) && repository != null )
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
File basedir = new File( repository.getLocation() );
|
||||
project =
|
||||
buildProject( new RepositoryModelResolver( basedir, pathTranslator ), artifact.getGroupId(),
|
||||
artifact.getArtifactId(), artifact.getVersion() );
|
||||
}
|
||||
catch ( ModelBuildingException e )
|
||||
{
|
||||
throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
|
||||
}
|
||||
catch ( UnresolvableModelException e )
|
||||
{
|
||||
throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ResolutionGroup result;
|
||||
|
||||
if ( project == null )
|
||||
{
|
||||
// TODO: we could record this so that it is displayed in the dependency tree as (...) or similar
|
||||
|
||||
// if the project is null, we encountered an invalid model (read: m1 POM)
|
||||
// we'll just return an empty resolution group.
|
||||
// or used the inherited scope (should that be passed to the buildFromRepository method above?)
|
||||
result = new ResolutionGroup( pomArtifact, Collections.<Artifact>emptySet(),
|
||||
Collections.<ArtifactRepository>emptyList() );
|
||||
}
|
||||
else
|
||||
{
|
||||
Set<Artifact> artifacts = Collections.emptySet();
|
||||
if ( !artifact.getArtifactHandler().isIncludesDependencies() )
|
||||
{
|
||||
try
|
||||
{
|
||||
artifacts = createArtifacts( project, artifact.getDependencyFilter() );
|
||||
}
|
||||
catch ( InvalidVersionSpecificationException e )
|
||||
{
|
||||
throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
|
||||
}
|
||||
}
|
||||
|
||||
result = new ResolutionGroup( pomArtifact, artifacts, Collections.<ArtifactRepository>emptyList() );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public List retrieveAvailableVersions( Artifact artifact, ArtifactRepository localRepository,
|
||||
List remoteRepositories )
|
||||
throws ArtifactMetadataRetrievalException
|
||||
{
|
||||
Set<ArtifactVersion> versions = new HashSet<ArtifactVersion>();
|
||||
for ( String repoId : repositoryIds )
|
||||
{
|
||||
Collection<String> projectVersions;
|
||||
try
|
||||
{
|
||||
projectVersions = resolver.resolveProjectVersions( session, repoId, artifact.getGroupId(),
|
||||
artifact.getArtifactId() );
|
||||
}
|
||||
catch ( MetadataResolutionException e )
|
||||
{
|
||||
throw new ArtifactMetadataRetrievalException( e.getMessage(), e, artifact );
|
||||
}
|
||||
for ( String version : projectVersions )
|
||||
{
|
||||
versions.add( new DefaultArtifactVersion( version ) );
|
||||
}
|
||||
}
|
||||
|
||||
return new ArrayList<ArtifactVersion>( versions );
|
||||
}
|
||||
|
||||
|
||||
public List<ArtifactVersion> retrieveAvailableVersionsFromDeploymentRepository( Artifact artifact,
|
||||
ArtifactRepository artifactRepository,
|
||||
ArtifactRepository artifactRepository1 )
|
||||
throws ArtifactMetadataRetrievalException
|
||||
{
|
||||
// TODO
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ArtifactFactory getFactory()
|
||||
{
|
||||
return factory;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,4 @@
|
|||
package org.apache.archiva.dependency.tree.maven2;
|
||||
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
|
@ -9,7 +8,7 @@ package org.apache.archiva.dependency.tree.maven2;
|
|||
* "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
|
||||
* 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
|
||||
|
@ -19,28 +18,21 @@ package org.apache.archiva.dependency.tree.maven2;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
|
||||
import org.apache.archiva.maven2.model.TreeEntry;
|
||||
import org.sonatype.aether.graph.DependencyVisitor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Builds a tree of dependencies for a given Maven project. Customized wrapper for maven-dependency-tree to use
|
||||
* maven-model-builder instead of maven-project.
|
||||
* @author Olivier Lamy
|
||||
*/
|
||||
public interface DependencyTreeBuilder
|
||||
{
|
||||
/**
|
||||
* Builds a tree of dependencies for the specified Maven project.
|
||||
*
|
||||
* @param repositoryIds the list of repositories to search for metadata
|
||||
* @param groupId the project groupId to build the tree for
|
||||
* @param artifactId the project artifactId to build the tree for
|
||||
* @param version the project version to build the tree for
|
||||
* @param nodeVisitor visitor to apply to all nodes discovered
|
||||
* @throws DependencyTreeBuilderException if the dependency tree cannot be resolved
|
||||
*/
|
||||
void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
|
||||
DependencyNodeVisitor nodeVisitor )
|
||||
throws DependencyTreeBuilderException;
|
||||
DependencyVisitor dependencyVisitor )
|
||||
throws Exception;
|
||||
|
||||
List<TreeEntry> buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version )
|
||||
throws Exception;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
package org.apache.archiva.dependency.tree.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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @author Olivier Lamy
|
||||
* @since 1.4-M3
|
||||
*/
|
||||
public class DependencyTreeBuilderException
|
||||
extends Exception
|
||||
{
|
||||
public DependencyTreeBuilderException( String message, Throwable t )
|
||||
{
|
||||
super( message, t );
|
||||
}
|
||||
}
|
|
@ -78,6 +78,7 @@ import java.util.Map;
|
|||
*/
|
||||
@Service( "dependencyTreeBuilder#maven3" )
|
||||
public class Maven3DependencyTreeBuilder
|
||||
implements DependencyTreeBuilder
|
||||
{
|
||||
private Logger log = LoggerFactory.getLogger( getClass() );
|
||||
|
||||
|
@ -123,7 +124,7 @@ public class Maven3DependencyTreeBuilder
|
|||
|
||||
public void buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId, String version,
|
||||
DependencyVisitor dependencyVisitor )
|
||||
throws Exception
|
||||
throws DependencyTreeBuilderException
|
||||
{
|
||||
Artifact projectArtifact = factory.createProjectArtifact( groupId, artifactId, version );
|
||||
ManagedRepository repository = null;
|
||||
|
@ -134,7 +135,7 @@ public class Maven3DependencyTreeBuilder
|
|||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
// FIXME better exception
|
||||
throw new Exception( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
throw new DependencyTreeBuilderException( "Cannot build project dependency tree " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
if ( repository == null )
|
||||
|
@ -143,29 +144,36 @@ public class Maven3DependencyTreeBuilder
|
|||
return;
|
||||
}
|
||||
|
||||
// MRM-1411
|
||||
// TODO: this is a workaround for a lack of proxy capability in the resolvers - replace when it can all be
|
||||
// handled there. It doesn't cache anything locally!
|
||||
List<RemoteRepository> remoteRepositories = new ArrayList<RemoteRepository>();
|
||||
Map<String, NetworkProxy> networkProxies = new HashMap<String, NetworkProxy>();
|
||||
|
||||
Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyConnectorAdmin.getProxyConnectorAsMap();
|
||||
List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get( repository.getId() );
|
||||
if ( proxyConnectors != null )
|
||||
try
|
||||
{
|
||||
for ( ProxyConnector proxyConnector : proxyConnectors )
|
||||
// MRM-1411
|
||||
// TODO: this is a workaround for a lack of proxy capability in the resolvers - replace when it can all be
|
||||
// handled there. It doesn't cache anything locally!
|
||||
List<RemoteRepository> remoteRepositories = new ArrayList<RemoteRepository>();
|
||||
Map<String, NetworkProxy> networkProxies = new HashMap<String, NetworkProxy>();
|
||||
|
||||
Map<String, List<ProxyConnector>> proxyConnectorsMap = proxyConnectorAdmin.getProxyConnectorAsMap();
|
||||
List<ProxyConnector> proxyConnectors = proxyConnectorsMap.get( repository.getId() );
|
||||
if ( proxyConnectors != null )
|
||||
{
|
||||
remoteRepositories.add( remoteRepositoryAdmin.getRemoteRepository( proxyConnector.getTargetRepoId() ) );
|
||||
|
||||
NetworkProxy networkProxyConfig = networkProxyAdmin.getNetworkProxy( proxyConnector.getProxyId() );
|
||||
|
||||
if ( networkProxyConfig != null )
|
||||
for ( ProxyConnector proxyConnector : proxyConnectors )
|
||||
{
|
||||
// key/value: remote repo ID/proxy info
|
||||
networkProxies.put( proxyConnector.getTargetRepoId(), networkProxyConfig );
|
||||
remoteRepositories.add( remoteRepositoryAdmin.getRemoteRepository( proxyConnector.getTargetRepoId() ) );
|
||||
|
||||
NetworkProxy networkProxyConfig = networkProxyAdmin.getNetworkProxy( proxyConnector.getProxyId() );
|
||||
|
||||
if ( networkProxyConfig != null )
|
||||
{
|
||||
// key/value: remote repo ID/proxy info
|
||||
networkProxies.put( proxyConnector.getTargetRepoId(), networkProxyConfig );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ( RepositoryAdminException e )
|
||||
{
|
||||
throw new DependencyTreeBuilderException( e.getMessage(), e );
|
||||
}
|
||||
|
||||
// FIXME take care of relative path
|
||||
resolve( repository.getLocation(), groupId, artifactId, version, dependencyVisitor );
|
||||
|
@ -174,7 +182,7 @@ public class Maven3DependencyTreeBuilder
|
|||
|
||||
public List<TreeEntry> buildDependencyTree( List<String> repositoryIds, String groupId, String artifactId,
|
||||
String version )
|
||||
throws Exception
|
||||
throws DependencyTreeBuilderException
|
||||
{
|
||||
|
||||
List<TreeEntry> treeEntries = new ArrayList<TreeEntry>();
|
||||
|
|
|
@ -1,284 +0,0 @@
|
|||
package org.apache.archiva.dependency.tree.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 junit.framework.TestCase;
|
||||
import org.apache.archiva.configuration.ArchivaConfiguration;
|
||||
import org.apache.archiva.configuration.Configuration;
|
||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
|
||||
import org.apache.archiva.maven2.model.TreeEntry;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.artifact.versioning.VersionRange;
|
||||
import org.apache.maven.shared.dependency.tree.DependencyNode;
|
||||
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
|
||||
import org.apache.maven.shared.dependency.tree.traversal.DependencyNodeVisitor;
|
||||
import org.easymock.MockControl;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
|
||||
|
||||
@RunWith( ArchivaSpringJUnit4ClassRunner.class )
|
||||
@ContextConfiguration( locations = {"classpath*:/META-INF/spring-context.xml","classpath:/spring-context.xml"} )
|
||||
public class DependencyTreeBuilderTest
|
||||
extends TestCase
|
||||
{
|
||||
@Inject
|
||||
@Named (value = "dependencyTreeBuilder#maven2")
|
||||
private DependencyTreeBuilder builder;
|
||||
|
||||
private static final String TEST_REPO_ID = "test";
|
||||
|
||||
private static final String TEST_VERSION = "1.2.1";
|
||||
|
||||
private static final String TEST_ARTIFACT_ID = "archiva-common";
|
||||
|
||||
private static final String TEST_GROUP_ID = "org.apache.archiva";
|
||||
|
||||
private ArtifactFactory artifactFactory;
|
||||
|
||||
@Inject @Named(value = "archivaConfiguration#test")
|
||||
ArchivaConfiguration config;
|
||||
|
||||
@Before
|
||||
public void setUp()
|
||||
throws Exception
|
||||
{
|
||||
super.setUp();
|
||||
|
||||
Configuration configuration = new Configuration();
|
||||
ManagedRepositoryConfiguration repoConfig = new ManagedRepositoryConfiguration();
|
||||
repoConfig.setId( TEST_REPO_ID );
|
||||
repoConfig.setLocation( new File( "target/test-repository" ).getAbsolutePath() );
|
||||
configuration.addManagedRepository( repoConfig );
|
||||
config.save( configuration );
|
||||
|
||||
artifactFactory = ((DefaultDependencyTreeBuilder)this.builder).getFactory();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuilder()
|
||||
throws DependencyTreeBuilderException
|
||||
{
|
||||
MockControl control = MockControl.createStrictControl( DependencyNodeVisitor.class );
|
||||
DependencyNodeVisitor visitor = (DependencyNodeVisitor) control.getMock();
|
||||
|
||||
DependencyNode springContext =
|
||||
new DependencyNode( createArtifact( "org.springframework", "spring-context", "2.5.6" ) );
|
||||
springContext.setPremanagedVersion( "2.5.5" );
|
||||
DependencyNode springTest =
|
||||
new DependencyNode( createArtifact( "org.springframework", "spring-test", "2.5.5", "test" ) );
|
||||
DependencyNode plexusUtils =
|
||||
new DependencyNode( createArtifact( "org.codehaus.plexus", "plexus-utils", "1.4.5" ) );
|
||||
plexusUtils.setPremanagedVersion( "1.5.1" );
|
||||
DependencyNode slf4jLog4j12 =
|
||||
new DependencyNode( createArtifact( "org.slf4j", "slf4j-log4j12", "1.5.0", "runtime" ) );
|
||||
slf4jLog4j12.setPremanagedScope( "test" );
|
||||
DependencyNode plexusLog4j = new DependencyNode(
|
||||
createArtifact( "org.codehaus.plexus", "plexus-log4j-logging", "1.1-alpha-3", "test" ) );
|
||||
DependencyNode log4j = new DependencyNode( createArtifact( "log4j", "log4j", "1.2.14", "test" ) );
|
||||
DependencyNode mavenArtifact =
|
||||
new DependencyNode( createArtifact( "org.apache.maven", "maven-artifact", "2.0.8", "test" ) );
|
||||
DependencyNode mavenProject =
|
||||
new DependencyNode( createArtifact( "org.apache.maven", "maven-project", "2.0.8", "test" ) );
|
||||
DependencyNode mavenCore =
|
||||
new DependencyNode( createArtifact( "org.apache.maven", "maven-core", "2.0.8", "test" ) );
|
||||
DependencyNode mavenSettings =
|
||||
new DependencyNode( createArtifact( "org.apache.maven", "maven-settings", "2.0.8", "test" ) );
|
||||
DependencyNode mavenModel =
|
||||
new DependencyNode( createArtifact( "org.apache.maven", "maven-model", "2.0.8", "test" ) );
|
||||
DependencyNode plexusCommandLine =
|
||||
new DependencyNode( createArtifact( "org.codehaus.plexus", "plexus-command-line", "1.0-alpha-2", "test" ) );
|
||||
DependencyNode plexusRegistryCommons = new DependencyNode(
|
||||
createArtifact( "org.codehaus.plexus.registry", "plexus-registry-commons", "1.0-alpha-2", "test" ) );
|
||||
plexusRegistryCommons.setPremanagedVersion( "1.0-alpha-3" );
|
||||
DependencyNode plexusRegistryApi = new DependencyNode(
|
||||
createArtifact( "org.codehaus.plexus.registry", "plexus-registry-api", "1.0-alpha-2", "test" ) );
|
||||
plexusRegistryApi.setPremanagedVersion( "1.0-alpha-3" );
|
||||
|
||||
DependencyNode plexusSpring =
|
||||
new DependencyNode( createArtifact( "org.codehaus.plexus", "plexus-spring", "1.2", "test" ) );
|
||||
plexusSpring.addChild( springContext );
|
||||
plexusSpring.addChild( springTest );
|
||||
plexusSpring.addChild( plexusUtils );
|
||||
plexusSpring.addChild( slf4jLog4j12 );
|
||||
plexusSpring.addChild( plexusLog4j );
|
||||
plexusSpring.addChild( log4j );
|
||||
plexusSpring.addChild( mavenArtifact );
|
||||
plexusSpring.addChild( mavenProject );
|
||||
plexusSpring.addChild( mavenCore );
|
||||
plexusSpring.addChild( mavenSettings );
|
||||
plexusSpring.addChild( mavenModel );
|
||||
plexusSpring.addChild( plexusCommandLine );
|
||||
plexusSpring.addChild( plexusRegistryCommons );
|
||||
plexusSpring.addChild( plexusRegistryApi );
|
||||
|
||||
DependencyNode commonsLang = new DependencyNode( createArtifact( "commons-lang", "commons-lang", "2.2" ) );
|
||||
DependencyNode commonsIO = new DependencyNode( createArtifact( "commons-io", "commons-io", "1.4" ) );
|
||||
DependencyNode slf4j = new DependencyNode( createArtifact( "org.slf4j", "slf4j-api", "1.5.0" ) );
|
||||
DependencyNode plexusAPI =
|
||||
new DependencyNode( createArtifact( "org.codehaus.plexus", "plexus-component-api", "1.0-alpha-22" ) );
|
||||
DependencyNode xalan = new DependencyNode( createArtifact( "xalan", "xalan", "2.7.0" ) );
|
||||
DependencyNode dom4j = new DependencyNode( createArtifact( "dom4j", "dom4j", "1.6.1", "test" ) );
|
||||
dom4j.setFailedUpdateScope( "compile" );
|
||||
DependencyNode junit = new DependencyNode( createArtifact( "junit", "junit", "3.8.1", "test" ) );
|
||||
DependencyNode easymock = new DependencyNode( createArtifact( "easymock", "easymock", "1.2_Java1.3", "test" ) );
|
||||
DependencyNode easymockExt =
|
||||
new DependencyNode( createArtifact( "easymock", "easymockclassextension", "1.2", "test" ) );
|
||||
|
||||
DependencyNode mainNode =
|
||||
new DependencyNode( createProjectArtifact( TEST_GROUP_ID, TEST_ARTIFACT_ID, TEST_VERSION ) );
|
||||
mainNode.addChild( commonsLang );
|
||||
mainNode.addChild( commonsIO );
|
||||
mainNode.addChild( slf4j );
|
||||
mainNode.addChild( plexusAPI );
|
||||
mainNode.addChild( plexusSpring );
|
||||
mainNode.addChild( xalan );
|
||||
mainNode.addChild( dom4j );
|
||||
mainNode.addChild( junit );
|
||||
mainNode.addChild( easymock );
|
||||
mainNode.addChild( easymockExt );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mainNode ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( commonsLang ), true );
|
||||
control.expectAndReturn( visitor.endVisit( commonsLang ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( commonsIO ), true );
|
||||
control.expectAndReturn( visitor.endVisit( commonsIO ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( slf4j ), true );
|
||||
control.expectAndReturn( visitor.endVisit( slf4j ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusAPI ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusAPI ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusSpring ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( springContext ), true );
|
||||
control.expectAndReturn( visitor.endVisit( springContext ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( springTest ), true );
|
||||
control.expectAndReturn( visitor.endVisit( springTest ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusUtils ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusUtils ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( slf4jLog4j12 ), true );
|
||||
control.expectAndReturn( visitor.endVisit( slf4jLog4j12 ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusLog4j ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusLog4j ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( log4j ), true );
|
||||
control.expectAndReturn( visitor.endVisit( log4j ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mavenArtifact ), true );
|
||||
control.expectAndReturn( visitor.endVisit( mavenArtifact ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mavenProject ), true );
|
||||
control.expectAndReturn( visitor.endVisit( mavenProject ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mavenCore ), true );
|
||||
control.expectAndReturn( visitor.endVisit( mavenCore ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mavenSettings ), true );
|
||||
control.expectAndReturn( visitor.endVisit( mavenSettings ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( mavenModel ), true );
|
||||
control.expectAndReturn( visitor.endVisit( mavenModel ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusCommandLine ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusCommandLine ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusRegistryCommons ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusRegistryCommons ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( plexusRegistryApi ), true );
|
||||
control.expectAndReturn( visitor.endVisit( plexusRegistryApi ), true );
|
||||
|
||||
control.expectAndReturn( visitor.endVisit( plexusSpring ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( xalan ), true );
|
||||
control.expectAndReturn( visitor.endVisit( xalan ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( dom4j ), true );
|
||||
control.expectAndReturn( visitor.endVisit( dom4j ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( junit ), true );
|
||||
control.expectAndReturn( visitor.endVisit( junit ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( easymock ), true );
|
||||
control.expectAndReturn( visitor.endVisit( easymock ), true );
|
||||
|
||||
control.expectAndReturn( visitor.visit( easymockExt ), true );
|
||||
control.expectAndReturn( visitor.endVisit( easymockExt ), true );
|
||||
|
||||
control.expectAndReturn( visitor.endVisit( mainNode ), true );
|
||||
|
||||
control.replay();
|
||||
|
||||
builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
|
||||
TEST_VERSION, visitor );
|
||||
|
||||
control.verify();
|
||||
}
|
||||
|
||||
private Artifact createProjectArtifact( String groupId, String artifactId, String version )
|
||||
{
|
||||
return artifactFactory.createProjectArtifact( groupId, artifactId, version );
|
||||
}
|
||||
|
||||
private Artifact createArtifact( String groupId, String artifactId, String version, String scope )
|
||||
{
|
||||
return artifactFactory.createDependencyArtifact( groupId, artifactId, VersionRange.createFromVersion( version ),
|
||||
"jar", null, scope );
|
||||
}
|
||||
|
||||
private Artifact createArtifact( String groupId, String artifactId, String version )
|
||||
{
|
||||
return createArtifact( groupId, artifactId, version, Artifact.SCOPE_COMPILE );
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBuilderMissingDependency()
|
||||
throws DependencyTreeBuilderException
|
||||
{
|
||||
MockControl control = MockControl.createStrictControl( DependencyNodeVisitor.class );
|
||||
DependencyNodeVisitor visitor = (DependencyNodeVisitor) control.getMock();
|
||||
|
||||
// not visited
|
||||
|
||||
control.replay();
|
||||
|
||||
builder.buildDependencyTree( Collections.singletonList( TEST_REPO_ID ), TEST_GROUP_ID, TEST_ARTIFACT_ID,
|
||||
"not-a-version", visitor );
|
||||
|
||||
control.verify();
|
||||
}
|
||||
|
||||
}
|
12
pom.xml
12
pom.xml
|
@ -64,7 +64,6 @@
|
|||
<maven.version>2.0.8</maven.version>
|
||||
<aether.version>1.13.1</aether.version>
|
||||
|
||||
<maven-dependency-tree.version>2.0-SNAPSHOT</maven-dependency-tree.version>
|
||||
<maven-model-converter.version>2.1</maven-model-converter.version>
|
||||
<maven.indexer.version>4.1.3</maven.indexer.version>
|
||||
<wagon.version>2.2</wagon.version>
|
||||
|
@ -1425,17 +1424,6 @@
|
|||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-dependency-tree</artifactId>
|
||||
<version>${maven-dependency-tree.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.codehaus.plexus</groupId>
|
||||
<artifactId>plexus-container-default</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.sf.ehcache</groupId>
|
||||
|
|
Loading…
Reference in New Issue