List of usage examples for org.apache.maven.artifact.resolver ResolutionNode ResolutionNode
public ResolutionNode(Artifact artifact, List<ArtifactRepository> remoteRepositories)
From source file:com.adviser.maven.GraphArtifactCollector.java
License:Apache License
public ArtifactResolutionResult collect(Set<Artifact> artifacts, Artifact originatingArtifact, Map managedVersions, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter, List<ResolutionListener> listeners) { Map resolvedArtifacts = new HashMap(); ResolutionNode root = new ResolutionNode(originatingArtifact, remoteRepositories); try {/*from w w w . j av a 2 s . com*/ root.addDependencies(artifacts, remoteRepositories, filter); recurse(root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter, listeners); } catch (CyclicDependencyException e) { e.printStackTrace(); } catch (OverConstrainedVersionException e) { e.printStackTrace(); } catch (ArtifactResolutionException e) { e.printStackTrace(); } Set set = new HashSet(); for (Iterator i = resolvedArtifacts.values().iterator(); i.hasNext();) { List nodes = (List) i.next(); for (Iterator j = nodes.iterator(); j.hasNext();) { ResolutionNode node = (ResolutionNode) j.next(); Artifact artifact = node.getArtifact(); try { if (!node.equals(root) && node.isActive() && node.filterTrail(filter) // If it was optional and not a direct dependency, // we don't add it or its children, just allow the // update of the version and scope && (node.isChildOfRootNode() || !artifact.isOptional())) { artifact.setDependencyTrail(node.getDependencyTrail()); set.add(node); } } catch (OverConstrainedVersionException e) { e.printStackTrace(); } } } ArtifactResolutionResult result = new ArtifactResolutionResult(); result.setArtifactResolutionNodes(set); return result; }
From source file:org.apache.felix.karaf.tooling.features.GraphArtifactCollector.java
License:Apache License
public ArtifactResolutionResult collect(Set artifacts, Artifact originatingArtifact, Map managedVersions, ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter, List listeners) throws ArtifactResolutionException { Map resolvedArtifacts = new HashMap(); ResolutionNode root = new ResolutionNode(originatingArtifact, remoteRepositories); root.addDependencies(artifacts, remoteRepositories, filter); recurse(root, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source, filter, listeners);/*from ww w . jav a2s . c om*/ Set set = new HashSet(); for (Iterator i = resolvedArtifacts.values().iterator(); i.hasNext();) { List nodes = (List) i.next(); for (Iterator j = nodes.iterator(); j.hasNext();) { ResolutionNode node = (ResolutionNode) j.next(); Artifact artifact = node.getArtifact(); if (!node.equals(root) && node.isActive() && node.filterTrail(filter) // If it was optional and not a direct dependency, // we don't add it or its children, just allow the // update of the version and scope && (node.isChildOfRootNode() || !artifact.isOptional())) { artifact.setDependencyTrail(node.getDependencyTrail()); set.add(node); } } } ArtifactResolutionResult result = new ArtifactResolutionResult(); result.setArtifactResolutionNodes(set); return result; }
From source file:org.universAAL.maven.treebuilder.DependencyTreeBuilder.java
License:Apache License
/** * Method builds dependency tree for a list of maven projects. All artifacts * in the tree are crosschecked against duplications and conflicts. In each * case of duplication, conflict, the case is resolved by omitting artifact * which is lower in the tree and keeping artifact which is higher in the * tree. If artifacts are on the same level then the one occuring first in * the tree is kept./*from w w w . ja va2s . c o m*/ * * @param repository * Maven repository. * @param factory * Factory used for creating artifacts. * @param metadataSource * ArtifactMetadataSource provided by maven. * @param projectDescs * list of maven project descriptors. Each descriptor contains * MavenProject, a list of project's remote repositories and a * boolean indicator if the project needs to be resolved * transitively or not. * @return a dependency tree as a list of rootnodes (instances of * DependencyNode class) which contain their own subtrees. Each * rootnode corresponds to one maven project provided as argument. * The order of rootnodes list is the same as order of provided * maven projects list. * @throws DependencyTreeBuilderException * Notifies about a problem during building the dependency tree. * @throws ArtifactMetadataRetrievalException * Signals problem with metadata retieval. * @throws InvalidVersionSpecificationException * Informs about invalid version specifications. * @throws NoSuchFieldException * Exception related to reflection. * @throws SecurityException * Exception thrown by security manager. * @throws IllegalAccessException * Illegal access during usage of java reflection. * @throws IllegalArgumentException * Illegal argument was passed. */ public List<RootNode> buildDependencyTree(final ArtifactRepository repository, final ArtifactFactory factory, final ArtifactMetadataSource metadataSource, final MavenProjectDescriptor... projectDescs) throws DependencyTreeBuilderException, ArtifactMetadataRetrievalException, InvalidVersionSpecificationException, SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { ArtifactFilter filter = new ScopeArtifactFilter(); DependencyTreeResolutionListener listener = new DependencyTreeResolutionListener(filter); Map resolvedArtifacts = new LinkedHashMap(); for (MavenProjectDescriptor projectDesc : projectDescs) { MavenProject project = projectDesc.project; try { List<String> separatedGroupId = extractSeparatedGroupIds(project); // Here you can simply add to create a new list List remoteRepositories = projectDesc.remoteRepositories; // If artifact is marked in pom as a bundle then it is changed // to jar. Retaining bundle can impose problems when the // artifact is duplicated or conflicted with other artifact // specified as a dependency, because in the // dependency there is only jar type specified. Artifact originatingArtifact = project.getArtifact(); this.stringifiedRoot = FilteringVisitorSupport.stringify(originatingArtifact); if ("bundle".equals(originatingArtifact.getType())) { Artifact changeArtifact = artifactFactory.createArtifact(originatingArtifact.getGroupId(), originatingArtifact.getArtifactId(), originatingArtifact.getVersion(), originatingArtifact.getScope(), "jar"); originatingArtifact = changeArtifact; } ResolutionNode root = new ResolutionNode(originatingArtifact, remoteRepositories); // If the project is not supposed to be transitively resolved // then its dependencies are not added to the root. Moreover the // parameter is passed to the recurse method. Thanks to than // when transitive is false, resolving of runtime dependencies // is not performed. if (projectDesc.transitive) { Set<Artifact> dependencyArtifacts = project.getDependencyArtifacts(); if (dependencyArtifacts == null) { dependencyArtifacts = new LinkedHashSet(); List dependencies = project.getDependencies(); for (Object depObj : dependencies) { Dependency dep = (Dependency) depObj; if (dep.isOptional()) { // filtering optional dependencies continue; } Artifact dependencyArtifact; VersionRange versionRange = VersionRange.createFromVersionSpec(dep.getVersion()); dependencyArtifact = factory.createDependencyArtifact(dep.getGroupId(), dep.getArtifactId(), versionRange, dep.getType(), dep.getClassifier(), dep.getScope()); if (dep.getExclusions() != null) { if (!dep.getExclusions().isEmpty()) { List<String> patterns = new ArrayList<String>(); for (Exclusion exclusion : dep.getExclusions()) { patterns.add(exclusion.getGroupId() + ":" + exclusion.getArtifactId()); } dependencyArtifact.setDependencyFilter(new ExcludesArtifactFilter(patterns)); } } dependencyArtifacts.add(dependencyArtifact); } } else { // filtering optional dependencies Set<Artifact> filteredArtifacts = new LinkedHashSet(); for (Artifact a : dependencyArtifacts) { if (!a.isOptional()) { filteredArtifacts.add(a); } } dependencyArtifacts = filteredArtifacts; } for (Artifact depArtifact : dependencyArtifacts) { if (depArtifact.getVersion() != null) { if (!depArtifact.getVersion().equals(depArtifact.getBaseVersion())) { if (depArtifact.isSnapshot()) { depArtifact.setVersion(depArtifact.getBaseVersion()); } } } } root.addDependencies(dependencyArtifacts, remoteRepositories, filter); } // Information about managed versions is extracted from the // artifact's pom (but also from parent poms and settings.xml // file). ManagedVersionMap versionMap = getManagedVersionsMap(originatingArtifact, project.getManagedVersionMap()); recurse(originatingArtifact, root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, metadataSource, filter, listener, projectDesc.transitive, new HashSet<String>(separatedGroupId)); } catch (ArtifactResolutionException exception) { throw new DependencyTreeBuilderException("Cannot build project dependency tree", exception); } } return listener.getRootNodes(); }