This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-dependency-tree.git
The following commit(s) were added to refs/heads/master by this push:
new 4a64259 Fix regression for Maven 3.0.5
4a64259 is described below
commit 4a64259b8e4113c28593ee8c02ec028e8751d194
Author: rfscholte <[email protected]>
AuthorDate: Thu Jul 8 12:06:37 2021 +0200
Fix regression for Maven 3.0.5
---
pom.xml | 3 +-
.../internal/Maven3DependencyCollectorBuilder.java | 27 +++++++--
.../internal/maven30/VerboseJavaScopeSelector.java | 64 ++++++++++++++++++++++
3 files changed, 86 insertions(+), 8 deletions(-)
diff --git a/pom.xml b/pom.xml
index a99ae47..5eec3c6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,7 +55,6 @@
</distributionManagement>
<properties>
- <mavenVersion>3.0</mavenVersion>
<javaVersion>8</javaVersion>
<project.build.outputTimestamp>2020-02-07T09:03:59Z</project.build.outputTimestamp>
</properties>
@@ -71,11 +70,11 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.0.5</version>
- <scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
+ <optional>true</optional>
</dependency>
<dependency>
<groupId>org.sonatype.aether</groupId>
diff --git
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
index 272fa08..8984ba0 100644
---
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
+++
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/Maven3DependencyCollectorBuilder.java
@@ -35,10 +35,10 @@ import
org.apache.maven.shared.dependency.graph.DependencyCollectorBuilderExcept
import org.apache.maven.shared.dependency.graph.DependencyNode;
import
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver;
import
org.apache.maven.shared.dependency.graph.internal.maven30.JavaScopeDeriver;
-import
org.apache.maven.shared.dependency.graph.internal.maven30.JavaScopeSelector;
import
org.apache.maven.shared.dependency.graph.internal.maven30.Maven3DirectScopeDependencySelector;
import
org.apache.maven.shared.dependency.graph.internal.maven30.NearestVersionSelector;
import
org.apache.maven.shared.dependency.graph.internal.maven30.SimpleOptionalitySelector;
+import
org.apache.maven.shared.dependency.graph.internal.maven30.VerboseJavaScopeSelector;
import org.codehaus.plexus.component.annotations.Component;
import org.codehaus.plexus.component.annotations.Requirement;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -107,7 +107,7 @@ public class Maven3DependencyCollectorBuilder
DefaultRepositorySystemSession session = new
DefaultRepositorySystemSession( repositorySystemSession );
DependencyGraphTransformer transformer =
- new ConflictResolver( new NearestVersionSelector(), new
JavaScopeSelector(),
+ new ConflictResolver( new NearestVersionSelector(), new
VerboseJavaScopeSelector(),
new SimpleOptionalitySelector(), new
JavaScopeDeriver() );
session.setDependencyGraphTransformer( transformer );
@@ -281,10 +281,25 @@ public class Maven3DependencyCollectorBuilder
}
}
- DefaultDependencyNode current =
- new DefaultDependencyNode( parent, artifact, premanagedVersion,
premanagedScope,
- getVersionSelectedFromRange(
node.getVersionConstraint() ), optional,
- exclusions );
+ org.sonatype.aether.graph.DependencyNode winner =
+ (org.sonatype.aether.graph.DependencyNode) node.getData().get(
ConflictResolver.NODE_DATA_WINNER );
+ String winnerVersion = null;
+ String ignoredScope = null;
+ if ( winner != null )
+ {
+ winnerVersion = winner.getVersion().toString();
+ }
+ else
+ {
+ ignoredScope = (String) node.getData().get(
VerboseJavaScopeSelector.REDUCED_SCOPE );
+ }
+
+ ConflictData data = new ConflictData( winnerVersion, ignoredScope );
+
+ VerboseDependencyNode current =
+ new VerboseDependencyNode( parent, artifact, premanagedVersion,
premanagedScope,
+ getVersionSelectedFromRange(
node.getVersionConstraint() ), optional, exclusions,
+ data );
List<DependencyNode> nodes = new ArrayList<DependencyNode>(
node.getChildren().size() );
for ( org.sonatype.aether.graph.DependencyNode child :
node.getChildren() )
diff --git
a/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
new file mode 100644
index 0000000..85b660d
--- /dev/null
+++
b/src/main/java/org/apache/maven/shared/dependency/graph/internal/maven30/VerboseJavaScopeSelector.java
@@ -0,0 +1,64 @@
+package org.apache.maven.shared.dependency.graph.internal.maven30;
+
+/*
+ * 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 java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ConflictContext;
+import
org.apache.maven.shared.dependency.graph.internal.maven30.ConflictResolver.ScopeSelector;
+import org.sonatype.aether.RepositoryException;
+
+/**
+ * A JavaScopeSelector that keeps track of reduced scopes
+ *
+ */
+public class VerboseJavaScopeSelector extends ScopeSelector
+{
+ public static final String REDUCED_SCOPE = "REDUCED_SCOPE";
+
+ private final ScopeSelector scopeSelector = new JavaScopeSelector();
+
+ @Override
+ public void selectScope( ConflictContext context )
+ throws RepositoryException
+ {
+ scopeSelector.selectScope( context );
+
+ context.getItems().stream()
+ .flatMap( i -> i.getScopes().stream() )
+ .distinct()
+ .max( new ScopeComparator() )
+ .filter( s -> s != context.getScope() )
+ .ifPresent( s -> context.getWinner().getNode().setData(
REDUCED_SCOPE, s ) );
+ }
+
+ static class ScopeComparator implements Comparator<String>
+ {
+ List<String> orderedScopes = Arrays.asList( "compile", "runtime",
"provided", "test" );
+
+ @Override
+ public int compare( String lhs, String rhs )
+ {
+ return orderedScopes.indexOf( rhs ) - orderedScopes.indexOf( lhs );
+ }
+ }
+}