diff --git a/api/maven-api-model/src/main/mdo/maven.mdo b/api/maven-api-model/src/main/mdo/maven.mdo
index 1ba9e93a1f1a..c4ff0384a0be 100644
--- a/api/maven-api-model/src/main/mdo/maven.mdo
+++ b/api/maven-api-model/src/main/mdo/maven.mdo
@@ -603,6 +603,16 @@
*
+
+ exclusions
+ 4.0.0+
+ Lists a set of artifacts that should be excluded from this repo's
+ dependency list when it comes to calculating transitive dependencies.
+
+ Exclusion
+ *
+
+
repositories
4.0.0+
@@ -1810,6 +1820,16 @@
String
+
+ exclusions
+ 4.0.0+
+ Lists a set of artifacts that should be excluded from this repo's
+ dependency list when it comes to calculating transitive dependencies.
+
+ Exclusion
+ *
+
+
diff --git a/impl/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java b/impl/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
index a093e4d90933..908b433e8e9c 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
@@ -29,6 +29,8 @@
import java.util.Optional;
import java.util.stream.Collectors;
+import org.apache.maven.api.annotations.Nonnull;
+import org.apache.maven.api.annotations.Nullable;
import org.apache.maven.artifact.handler.ArtifactHandler;
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
@@ -65,11 +67,13 @@
*/
public class RepositoryUtils {
- private static String nullify(String string) {
+ @Nullable
+ private static String nullify(@Nullable String string) {
return (string == null || string.isEmpty()) ? null : string;
}
- public static org.apache.maven.artifact.Artifact toArtifact(Dependency dependency) {
+ @Nullable
+ public static org.apache.maven.artifact.Artifact toArtifact(@Nullable Dependency dependency) {
if (dependency == null) {
return null;
}
@@ -81,7 +85,8 @@ public static org.apache.maven.artifact.Artifact toArtifact(Dependency dependenc
return result;
}
- public static org.apache.maven.artifact.Artifact toArtifact(Artifact artifact) {
+ @Nullable
+ public static org.apache.maven.artifact.Artifact toArtifact(@Nullable Artifact artifact) {
if (artifact == null) {
return null;
}
@@ -112,10 +117,10 @@ public static org.apache.maven.artifact.Artifact toArtifact(Artifact artifact) {
}
public static void toArtifacts(
- Collection artifacts,
- Collection extends DependencyNode> nodes,
- List trail,
- DependencyFilter filter) {
+ @Nonnull Collection artifacts,
+ @Nonnull Collection extends DependencyNode> nodes,
+ @Nonnull List trail,
+ @Nullable DependencyFilter filter) {
for (DependencyNode node : nodes) {
org.apache.maven.artifact.Artifact artifact = toArtifact(node.getDependency());
@@ -132,7 +137,8 @@ public static void toArtifacts(
}
}
- public static Artifact toArtifact(org.apache.maven.artifact.Artifact artifact) {
+ @Nullable
+ public static Artifact toArtifact(@Nullable org.apache.maven.artifact.Artifact artifact) {
if (artifact == null) {
return null;
}
@@ -162,7 +168,8 @@ public static Artifact toArtifact(org.apache.maven.artifact.Artifact artifact) {
}
public static Dependency toDependency(
- org.apache.maven.artifact.Artifact artifact, Collection exclusions) {
+ @Nullable org.apache.maven.artifact.Artifact artifact,
+ @Nullable Collection exclusions) {
if (artifact == null) {
return null;
}
@@ -175,13 +182,15 @@ public static Dependency toDependency(
return new Dependency(result, artifact.getScope(), artifact.isOptional(), excl);
}
- public static List toRepos(List repos) {
+ @Nonnull
+ public static List toRepos(@Nullable List repos) {
return Optional.ofNullable(repos).orElse(Collections.emptyList()).stream()
.map(RepositoryUtils::toRepo)
.collect(Collectors.toList());
}
- public static RemoteRepository toRepo(ArtifactRepository repo) {
+ @Nullable
+ public static RemoteRepository toRepo(@Nullable ArtifactRepository repo) {
RemoteRepository result = null;
if (repo != null) {
RemoteRepository.Builder builder =
@@ -197,7 +206,8 @@ public static RemoteRepository toRepo(ArtifactRepository repo) {
return result;
}
- public static String getLayout(ArtifactRepository repo) {
+ @Nonnull
+ public static String getLayout(@Nonnull ArtifactRepository repo) {
try {
return repo.getLayout().getId();
} catch (LinkageError e) {
@@ -216,7 +226,8 @@ public static String getLayout(ArtifactRepository repo) {
}
}
- private static RepositoryPolicy toPolicy(ArtifactRepositoryPolicy policy) {
+ @Nullable
+ private static RepositoryPolicy toPolicy(@Nullable ArtifactRepositoryPolicy policy) {
RepositoryPolicy result = null;
if (policy != null) {
result = new RepositoryPolicy(policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy());
@@ -224,7 +235,8 @@ private static RepositoryPolicy toPolicy(ArtifactRepositoryPolicy policy) {
return result;
}
- private static Authentication toAuthentication(org.apache.maven.artifact.repository.Authentication auth) {
+ @Nullable
+ private static Authentication toAuthentication(@Nullable org.apache.maven.artifact.repository.Authentication auth) {
Authentication result = null;
if (auth != null) {
AuthenticationBuilder authBuilder = new AuthenticationBuilder();
@@ -235,7 +247,8 @@ private static Authentication toAuthentication(org.apache.maven.artifact.reposit
return result;
}
- private static Proxy toProxy(org.apache.maven.repository.Proxy proxy) {
+ @Nullable
+ private static Proxy toProxy(@Nullable org.apache.maven.repository.Proxy proxy) {
Proxy result = null;
if (proxy != null) {
AuthenticationBuilder authBuilder = new AuthenticationBuilder();
@@ -245,7 +258,8 @@ private static Proxy toProxy(org.apache.maven.repository.Proxy proxy) {
return result;
}
- public static ArtifactHandler newHandler(Artifact artifact) {
+ @Nonnull
+ public static ArtifactHandler newHandler(@Nonnull Artifact artifact) {
String type = artifact.getProperty(ArtifactProperties.TYPE, artifact.getExtension());
return new DefaultArtifactHandler(
type,
@@ -258,7 +272,8 @@ public static ArtifactHandler newHandler(Artifact artifact) {
Boolean.parseBoolean(artifact.getProperty(MavenArtifactProperties.CONSTITUTES_BUILD_PATH, "")));
}
- public static ArtifactType newArtifactType(String id, ArtifactHandler handler) {
+ @Nonnull
+ public static ArtifactType newArtifactType(@Nonnull String id, @Nonnull ArtifactHandler handler) {
return new DefaultArtifactType(
id,
handler.getExtension(),
@@ -268,8 +283,9 @@ public static ArtifactType newArtifactType(String id, ArtifactHandler handler) {
handler.isIncludesDependencies());
}
+ @Nonnull
public static Dependency toDependency(
- org.apache.maven.model.Dependency dependency, ArtifactTypeRegistry stereotypes) {
+ @Nonnull org.apache.maven.model.Dependency dependency, @Nonnull ArtifactTypeRegistry stereotypes) {
ArtifactType stereotype = stereotypes.get(dependency.getType());
if (stereotype == null) {
stereotype = new DefaultArtifactType(dependency.getType());
@@ -303,38 +319,46 @@ public static Dependency toDependency(
exclusions);
}
- private static Exclusion toExclusion(org.apache.maven.model.Exclusion exclusion) {
+ @Nonnull
+ public static Exclusion toExclusion(@Nonnull org.apache.maven.model.Exclusion exclusion) {
return new Exclusion(exclusion.getGroupId(), exclusion.getArtifactId(), "*", "*");
}
- public static ArtifactTypeRegistry newArtifactTypeRegistry(ArtifactHandlerManager handlerManager) {
+ @Nonnull
+ public static ArtifactTypeRegistry newArtifactTypeRegistry(@Nonnull ArtifactHandlerManager handlerManager) {
return new MavenArtifactTypeRegistry(handlerManager);
}
static class MavenArtifactTypeRegistry implements ArtifactTypeRegistry {
+ @Nonnull
private final ArtifactHandlerManager handlerManager;
- MavenArtifactTypeRegistry(ArtifactHandlerManager handlerManager) {
+ MavenArtifactTypeRegistry(@Nonnull ArtifactHandlerManager handlerManager) {
this.handlerManager = handlerManager;
}
- public ArtifactType get(String stereotypeId) {
+ @Nullable
+ @Override
+ public ArtifactType get(@Nonnull String stereotypeId) {
ArtifactHandler handler = handlerManager.getArtifactHandler(stereotypeId);
return newArtifactType(stereotypeId, handler);
}
}
- public static Collection toArtifacts(Collection artifactsToConvert) {
+ @Nonnull
+ public static Collection toArtifacts(
+ @Nonnull Collection artifactsToConvert) {
return artifactsToConvert.stream().map(RepositoryUtils::toArtifact).collect(Collectors.toList());
}
- public static WorkspaceRepository getWorkspace(RepositorySystemSession session) {
+ @Nullable
+ public static WorkspaceRepository getWorkspace(@Nonnull RepositorySystemSession session) {
WorkspaceReader reader = session.getWorkspaceReader();
return (reader != null) ? reader.getRepository() : null;
}
- public static boolean repositoriesEquals(List r1, List r2) {
+ public static boolean repositoriesEquals(@Nonnull List r1, @Nonnull List r2) {
if (r1.size() != r2.size()) {
return false;
}
@@ -348,7 +372,7 @@ public static boolean repositoriesEquals(List r1, List repositories) {
+ public static int repositoriesHashCode(@Nonnull List repositories) {
int result = 17;
for (RemoteRepository repository : repositories) {
result = 31 * result + repositoryHashCode(repository);
@@ -356,8 +380,11 @@ public static int repositoriesHashCode(List repositories) {
return result;
}
+ @Nullable
public static RepositorySystemSession overlay(
- ArtifactRepository repository, RepositorySystemSession session, RepositorySystem system) {
+ @Nullable ArtifactRepository repository,
+ @Nullable RepositorySystemSession session,
+ @Nonnull RepositorySystem system) {
if (repository == null || repository.getBasedir() == null) {
return session;
}
@@ -379,14 +406,14 @@ public static RepositorySystemSession overlay(
return newSession;
}
- private static int repositoryHashCode(RemoteRepository repository) {
+ private static int repositoryHashCode(@Nonnull RemoteRepository repository) {
int result = 17;
Object obj = repository.getUrl();
result = 31 * result + (obj != null ? obj.hashCode() : 0);
return result;
}
- private static boolean policyEquals(RepositoryPolicy p1, RepositoryPolicy p2) {
+ private static boolean policyEquals(@Nonnull RepositoryPolicy p1, @Nonnull RepositoryPolicy p2) {
if (p1 == p2) {
return true;
}
@@ -394,7 +421,7 @@ private static boolean policyEquals(RepositoryPolicy p1, RepositoryPolicy p2) {
return p1.isEnabled() == p2.isEnabled() && Objects.equals(p1.getChecksumPolicy(), p2.getChecksumPolicy());
}
- private static boolean repositoryEquals(RemoteRepository r1, RemoteRepository r2) {
+ private static boolean repositoryEquals(@Nonnull RemoteRepository r1, @Nonnull RemoteRepository r2) {
if (r1 == r2) {
return true;
}
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
index ab8407e6257d..c52063403de5 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
@@ -148,6 +148,13 @@ public DependencyResolutionResult resolve(DependencyResolutionRequest request)
}
}
+ List exclusions = project.getExclusions();
+ if (exclusions != null) {
+ for (Exclusion exclusion : exclusions) {
+ collect.addExclusion(RepositoryUtils.toExclusion(exclusion));
+ }
+ }
+
DependencyRequest depRequest = new DependencyRequest(collect, filter);
depRequest.setTrace(trace);
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index aa682b9858a1..279c8b59c532 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -58,6 +58,7 @@
import org.apache.maven.model.DependencyManagement;
import org.apache.maven.model.Developer;
import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
import org.apache.maven.model.Extension;
import org.apache.maven.model.IssueManagement;
import org.apache.maven.model.License;
@@ -312,6 +313,10 @@ public DependencyManagement getDependencyManagement() {
return getModel().getDependencyManagement();
}
+ public List getExclusions() {
+ return getModel().getExclusions();
+ }
+
// ----------------------------------------------------------------------
// Test and compile source roots.
// ----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 4325013012d5..480bc3f22a2f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,7 +162,7 @@ under the License.
1.27
1.4.0
4.0.4
- 2.0.6
+ 2.0.7.exclusion
4.1.0
0.9.0.M3
2.0.16