mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 09:03:31 +07:00
maven: honor dependency winners (IDEA-133331)
This commit is contained in:
+41
-5
@@ -71,6 +71,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationExce
|
||||
import org.eclipse.aether.DefaultRepositorySystemSession;
|
||||
import org.eclipse.aether.RepositorySystemSession;
|
||||
import org.eclipse.aether.graph.Dependency;
|
||||
import org.eclipse.aether.graph.DependencyVisitor;
|
||||
import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
|
||||
import org.eclipse.aether.internal.impl.DefaultRepositorySystem;
|
||||
import org.eclipse.aether.repository.LocalRepositoryManager;
|
||||
@@ -81,6 +82,7 @@ import org.eclipse.aether.spi.log.LoggerFactory;
|
||||
import org.eclipse.aether.util.graph.manager.DependencyManagerUtils;
|
||||
import org.eclipse.aether.util.graph.transformer.ConflictResolver;
|
||||
import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator;
|
||||
import org.eclipse.aether.util.graph.visitor.TreeDependencyVisitor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.model.*;
|
||||
@@ -687,13 +689,47 @@ public class Maven32ServerEmbedderImpl extends Maven3ServerEmbedder {
|
||||
final DependencyResolutionResult dependencyResolutionResult = resolveDependencies(project, repositorySession);
|
||||
final List<Dependency> dependencies = dependencyResolutionResult.getDependencies();
|
||||
|
||||
final Map<Dependency, Artifact> winnerDependencyMap = new HashMap<Dependency, Artifact>();
|
||||
Set<Artifact> artifacts = new LinkedHashSet<Artifact>(dependencies.size());
|
||||
dependencyResolutionResult.getDependencyGraph().accept(new TreeDependencyVisitor(new DependencyVisitor() {
|
||||
@Override
|
||||
public boolean visitEnter(org.eclipse.aether.graph.DependencyNode node) {
|
||||
Artifact winnerArtifact = null;
|
||||
final Map<?, ?> data = node.getData();
|
||||
final Object winner = data.get(ConflictResolver.NODE_DATA_WINNER);
|
||||
if(winner instanceof org.eclipse.aether.graph.DependencyNode) {
|
||||
org.eclipse.aether.graph.DependencyNode winnerNode = (org.eclipse.aether.graph.DependencyNode)winner;
|
||||
if(!StringUtil.equals(node.getVersion().toString(), winnerNode.getVersion().toString())) {
|
||||
Dependency winnerNodeDependency = winnerNode.getDependency();
|
||||
winnerArtifact = RepositoryUtils.toArtifact(winnerNodeDependency.getArtifact());
|
||||
winnerArtifact.setScope(winnerNodeDependency.getScope());
|
||||
winnerArtifact.setOptional(winnerNodeDependency.isOptional());
|
||||
}
|
||||
}
|
||||
|
||||
final Dependency dependency = node.getDependency();
|
||||
if(dependency != null) {
|
||||
if(winnerArtifact == null) {
|
||||
winnerArtifact = RepositoryUtils.toArtifact(node.getArtifact());
|
||||
winnerArtifact.setScope(dependency.getScope());
|
||||
winnerArtifact.setOptional(dependency.isOptional());
|
||||
}
|
||||
winnerDependencyMap.put(dependency, winnerArtifact);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visitLeave(org.eclipse.aether.graph.DependencyNode node) {
|
||||
return true;
|
||||
}
|
||||
}));
|
||||
for (Dependency dependency : dependencies) {
|
||||
final Artifact artifact = RepositoryUtils.toArtifact(dependency.getArtifact());
|
||||
artifact.setScope(dependency.getScope());
|
||||
artifact.setOptional(dependency.isOptional());
|
||||
artifacts.add(artifact);
|
||||
resolveAsModule(artifact);
|
||||
final Artifact artifact = winnerDependencyMap.get(dependency);
|
||||
if(artifact != null) {
|
||||
artifacts.add(artifact);
|
||||
resolveAsModule(artifact);
|
||||
}
|
||||
}
|
||||
|
||||
project.setArtifacts(artifacts);
|
||||
|
||||
Reference in New Issue
Block a user