You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2024/08/27 07:17:43 UTC

(maven) 01/01: Rename coordinate -> coordinates and ResolvedArtifact -> DownloadedArtifact

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch refactor/getVersionConstraint
in repository https://gitbox.apache.org/repos/asf/maven.git

commit bf1c14e10af5e8d0d95746470e36735f7d8ebdad
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Tue Aug 27 09:17:26 2024 +0200

    Rename coordinate -> coordinates and ResolvedArtifact -> DownloadedArtifact
---
 .../main/java/org/apache/maven/api/Artifact.java   |  34 +++---
 ...actCoordinate.java => ArtifactCoordinates.java} |   6 +-
 .../main/java/org/apache/maven/api/Dependency.java |  14 +--
 ...yCoordinate.java => DependencyCoordinates.java} |   4 +-
 .../java/org/apache/maven/api/DependencyScope.java |   2 +-
 ...solvedArtifact.java => DownloadedArtifact.java} |   7 +-
 ...edDependency.java => DownloadedDependency.java} |  12 +-
 .../main/java/org/apache/maven/api/Exclusion.java  |   2 +-
 .../main/java/org/apache/maven/api/Lifecycle.java  |   8 +-
 .../org/apache/maven/api/ProducedArtifact.java     |   2 +
 .../main/java/org/apache/maven/api/Project.java    |   4 +-
 .../main/java/org/apache/maven/api/Session.java    | 127 ++++++++++++++-------
 .../java/org/apache/maven/api/package-info.java    |  14 +--
 ...actory.java => ArtifactCoordinatesFactory.java} |  36 +++---
 ...java => ArtifactCoordinatesFactoryRequest.java} |  48 ++++----
 .../maven/api/services/ArtifactResolver.java       |   8 +-
 .../api/services/ArtifactResolverRequest.java      |  16 +--
 .../maven/api/services/ArtifactResolverResult.java |   4 +-
 ...tory.java => DependencyCoordinatesFactory.java} |  33 +++---
 ...va => DependencyCoordinatesFactoryRequest.java} |  67 +++++------
 .../maven/api/services/DependencyResolver.java     |  14 +--
 .../api/services/DependencyResolverRequest.java    |  54 ++++-----
 .../maven/api/services/VersionRangeResolver.java   |   9 +-
 .../api/services/VersionRangeResolverRequest.java  |  27 ++---
 .../apache/maven/api/services/VersionResolver.java |   8 +-
 .../maven/api/services/VersionResolverRequest.java |  26 ++---
 .../maven/internal/impl/AbstractSession.java       | 112 +++++++++---------
 .../internal/impl/AetherDependencyWrapper.java     |   4 +-
 .../maven/internal/impl/DefaultArtifact.java       |   6 +-
 ...dinate.java => DefaultArtifactCoordinates.java} |  30 ++---
 ...java => DefaultArtifactCoordinatesFactory.java} |  18 +--
 .../internal/impl/DefaultArtifactResolver.java     |  20 ++--
 .../maven/internal/impl/DefaultDependency.java     |   6 +-
 ...nate.java => DefaultDependencyCoordinates.java} |   6 +-
 ...va => DefaultDependencyCoordinatesFactory.java} |  18 +--
 .../internal/impl/DefaultDependencyResolver.java   |  14 +--
 ...rtifact.java => DefaultDownloadedArtifact.java} |   6 +-
 .../internal/impl/DefaultVersionRangeResolver.java |   2 +-
 .../internal/impl/DefaultVersionResolver.java      |   2 +-
 .../maven/internal/impl/InternalSession.java       |  10 +-
 .../internal/impl/model/DefaultModelValidator.java |  48 ++++----
 .../impl/resolver/DefaultModelResolver.java        |  16 +--
 .../UserPropertiesArtifactRelocationSource.java    |   6 +-
 .../maven/internal/impl/standalone/ApiRunner.java  |   8 +-
 .../impl/standalone/TestApiStandalone.java         |  11 +-
 .../apache/maven/internal/impl/DefaultProject.java |  10 +-
 .../org/apache/maven/internal/impl/Lifecycles.java |   4 +-
 .../META-INF/maven/org.apache.maven.api.di.Inject  |   4 +-
 .../org/apache/maven/internal/impl/TestApi.java    |  24 ++--
 .../internal/BootstrapCoreExtensionManager.java    |   8 +-
 .../java/org/apache/maven/model/ModelTest.java     |   7 +-
 .../UserPropertiesArtifactRelocationSource.java    |   6 +-
 pom.xml                                            |   2 +-
 53 files changed, 534 insertions(+), 460 deletions(-)

diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java
index f88697619b..0967ba92b2 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java
@@ -23,11 +23,15 @@ import org.apache.maven.api.annotations.Immutable;
 import org.apache.maven.api.annotations.Nonnull;
 
 /**
- * Pointer to a resolved resource such as a <abbr>JAR</abbr> file or <abbr>WAE</abbr> application.
- * Each {@code Artifact} instance is basically an exact pointer to a file in a Maven repository.
- * {@code Artifact} instances are created when <dfn>resolving</dfn> {@link ArtifactCoordinate} instances.
+ * A Maven artifact is a file, typically a JAR, that is produced and used by Maven projects.
+ * It is identified by a unique combination of a group ID, artifact ID, version, classifier,
+ * and extension, and it is stored in a repository for dependency management and build purposes.
+ *
+ * <p>Each {@code Artifact} instance is basically an exact pointer to a file in a Maven repository.
+ * {@code Artifact} instances are created when <dfn>resolving</dfn> {@link ArtifactCoordinates} instances.
  * Resolving is the process that selects a {@linkplain #getVersion() particular version}
- * and downloads the artifact in the local repository.  This operation returns a {@link ResolvedArtifact}.
+ * and downloads the artifact in the local repository.  This operation returns a {@link DownloadedArtifact}.
+ * </p>
  *
  * @since 4.0.0
  */
@@ -38,7 +42,7 @@ public interface Artifact {
      * {@return a unique identifier for this artifact}.
      * The identifier is composed of groupId, artifactId, extension, classifier, and version.
      *
-     * @see ArtifactCoordinate#getId()
+     * @see ArtifactCoordinates#getId()
      */
     @Nonnull
     default String key() {
@@ -56,7 +60,7 @@ public interface Artifact {
     /**
      * {@return the group identifier of the artifact}.
      *
-     * @see ArtifactCoordinate#getGroupId()
+     * @see ArtifactCoordinates#getGroupId()
      */
     @Nonnull
     String getGroupId();
@@ -64,18 +68,18 @@ public interface Artifact {
     /**
      * {@return the identifier of the artifact}.
      *
-     * @see ArtifactCoordinate#getArtifactId()
+     * @see ArtifactCoordinates#getArtifactId()
      */
     @Nonnull
     String getArtifactId();
 
     /**
-     * {@return the version of the artifact}. Contrarily to {@link ArtifactCoordinate},
+     * {@return the version of the artifact}. Contrarily to {@link ArtifactCoordinates},
      * each {@code Artifact} is associated to a specific version instead of a range of versions.
      * If the {@linkplain #getBaseVersion() base version} contains a meta-version such as {@code SNAPSHOT},
      * those keywords are replaced by, for example, the actual timestamp.
      *
-     * @see ArtifactCoordinate#getVersionConstraint()
+     * @see ArtifactCoordinates#getVersionConstraint()
      */
     @Nonnull
     Version getVersion();
@@ -93,7 +97,7 @@ public interface Artifact {
      * Returns the classifier of the artifact.
      *
      * @return the classifier or an empty string if none, never {@code null}
-     * @see ArtifactCoordinate#getClassifier()
+     * @see ArtifactCoordinates#getClassifier()
      */
     @Nonnull
     String getClassifier();
@@ -103,7 +107,7 @@ public interface Artifact {
      * The dot separator is <em>not</em> included in the returned string.
      *
      * @return the file extension or an empty string if none, never {@code null}
-     * @see ArtifactCoordinate#getExtension()
+     * @see ArtifactCoordinates#getExtension()
      */
     @Nonnull
     String getExtension();
@@ -117,11 +121,11 @@ public interface Artifact {
     boolean isSnapshot();
 
     /**
-     * {@return coordinate with the same identifiers as this artifact}.
-     * This is a shortcut for {@code session.createArtifactCoordinate(artifact)}.
+     * {@return coordinates with the same identifiers as this artifact}.
+     * This is a shortcut for {@code session.createArtifactCoordinates(artifact)}.
      *
-     * @see org.apache.maven.api.Session#createArtifactCoordinate(Artifact)
+     * @see org.apache.maven.api.Session#createArtifactCoordinates(Artifact)
      */
     @Nonnull
-    ArtifactCoordinate toCoordinate();
+    ArtifactCoordinates toCoordinates();
 }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinates.java
similarity index 92%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinates.java
index fe3d863163..de97967964 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinates.java
@@ -23,15 +23,15 @@ import org.apache.maven.api.annotations.Immutable;
 import org.apache.maven.api.annotations.Nonnull;
 
 /**
- * Partial identification of an {@code Artifact} in a Maven repository.
- * Each {@code ArtifactCoordinate} instance is basically a pointer to a file in the Maven repository,
+ * Partial identification of an {@link Artifact} in a Maven repository.
+ * Each {@code ArtifactCoordinates} instance is basically a pointer to a file in the Maven repository,
  * except that the exact version may not be known yet.
  *
  * @since 4.0.0
  */
 @Experimental
 @Immutable
-public interface ArtifactCoordinate {
+public interface ArtifactCoordinates {
     /**
      * {@return the group identifier of the artifact}.
      */
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java
index 331aa2ded4..5436a3e143 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Dependency.java
@@ -23,7 +23,7 @@ import org.apache.maven.api.annotations.Immutable;
 import org.apache.maven.api.annotations.Nonnull;
 
 /**
- * A result of collecting, flattening and resolving {@code DependencyCoordinate}s.
+ * A result of collecting, flattening and resolving {@link DependencyCoordinates}s.
  * Dependency is the output of the <dfn>collection</dfn> process, which builds the graph of dependencies,
  * followed by <dfn>flattening</dfn> and <dfn>resolution</dfn>.
  * The version selection is done for each dependency during the collection phase.
@@ -40,7 +40,7 @@ public interface Dependency extends Artifact {
      * a modular-<abbr>JAR</abbr> if it is intended to be placed on the module-path,
      * a <abbr>JAR</abbr> containing test classes, <i>etc.</i>
      *
-     * @see DependencyCoordinate#getType()
+     * @see DependencyCoordinates#getType()
      */
     @Nonnull
     Type getType();
@@ -49,25 +49,25 @@ public interface Dependency extends Artifact {
      * {@return the time at which the dependency will be used}.
      * If may be, for example, at compile time only, at run time or at test time.
      *
-     * @see DependencyCoordinate#getScope()
+     * @see DependencyCoordinates#getScope()
      */
     @Nonnull
     DependencyScope getScope();
 
     /**
      * Returns whether the dependency is optional or mandatory.
-     * Contrarily to {@link DependencyCoordinate}, the obligation of a {@code Dependency} is always present.
+     * Contrarily to {@link DependencyCoordinates}, the obligation of a {@code Dependency} is always present.
      * The value is computed during the dependencies collection phase.
      *
      * @return {@code true} if the dependency is optional, or {@code false} if mandatory
-     * @see DependencyCoordinate#getOptional()
+     * @see DependencyCoordinates#getOptional()
      */
     boolean isOptional();
 
     /**
-     * {@return coordinate with the same identifiers as this dependency}
+     * {@return coordinates with the same identifiers as this dependency}
      */
     @Nonnull
     @Override
-    DependencyCoordinate toCoordinate();
+    DependencyCoordinates toCoordinates();
 }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinates.java
similarity index 93%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinates.java
index 69ba5d7988..13999eaedf 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinate.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyCoordinates.java
@@ -26,7 +26,7 @@ import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.annotations.Nullable;
 
 /**
- * {@code ArtifactCoordinate} completed with information about how the artifact will be used.
+ * {@code ArtifactCoordinates} completed with information about how the artifact will be used.
  * This information include the dependency type (main classes, test classes, <i>etc.</i>),
  * a scope (compile-time, run-time <i>etc.</i>), an obligation (whether the dependency
  * is optional or mandatory), and possible exclusions for transitive dependencies.
@@ -37,7 +37,7 @@ import org.apache.maven.api.annotations.Nullable;
  */
 @Experimental
 @Immutable
-public interface DependencyCoordinate extends ArtifactCoordinate {
+public interface DependencyCoordinates extends ArtifactCoordinates {
     /**
      * {@return the type of the dependency}. A dependency can be a <abbr>JAR</abbr> file,
      * a modular-<abbr>JAR</abbr> if it is intended to be placed on the module-path,
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
index 6002baccf9..f96d61f922 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DependencyScope.java
@@ -50,7 +50,7 @@ public enum DependencyScope {
 
     /**
      * Undefined. When no scope is explicitly given, UNDEFINED will be used, but its meaning will depend on
-     * whether the DependencyCoordinate is used in dependency management, in which case it means the scope is not
+     * whether the DependencyCoordinates is used in dependency management, in which case it means the scope is not
      * explicitly managed by this managed dependency, or as a real dependency, in which case, the scope
      * will default to {@link #COMPILE}.
      */
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedArtifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedArtifact.java
similarity index 85%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedArtifact.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedArtifact.java
index 7e2f506e75..10e9deb898 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedArtifact.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedArtifact.java
@@ -20,12 +20,17 @@ package org.apache.maven.api;
 
 import java.nio.file.Path;
 
+import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Immutable;
+
 /**
  * An {@link Artifact} that has been resolved, i.e. downloaded to the local repository.
  *
  * @since 4.0.0
  */
-public interface ResolvedArtifact extends Artifact {
+@Experimental
+@Immutable
+public interface DownloadedArtifact extends Artifact {
 
     /**
      * {@return the actual file that has been downloaded in the file system}
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedDependency.java b/api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedDependency.java
similarity index 71%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedDependency.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedDependency.java
index c177e9e8d7..7a1e4174ed 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/ResolvedDependency.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/DownloadedDependency.java
@@ -18,4 +18,14 @@
  */
 package org.apache.maven.api;
 
-public interface ResolvedDependency extends Dependency, ResolvedArtifact {}
+import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Immutable;
+
+/**
+ * A {@link Dependency} that has been resolved, i.e. downloaded to the local repository.
+ *
+ * @since 4.0.0
+ */
+@Experimental
+@Immutable
+public interface DownloadedDependency extends Dependency, DownloadedArtifact {}
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java
index 3c578c0962..99f9263c32 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java
@@ -25,7 +25,7 @@ import org.apache.maven.api.annotations.Nullable;
  * A dependency exclusion.
  *
  * @since 4.0.0
- * @see DependencyCoordinate#getExclusions()
+ * @see DependencyCoordinates#getExclusions()
  */
 @Experimental
 public interface Exclusion {
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Lifecycle.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Lifecycle.java
index 13d9b6d12b..fcee471eac 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Lifecycle.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Lifecycle.java
@@ -27,7 +27,13 @@ import org.apache.maven.api.annotations.Immutable;
 import org.apache.maven.api.model.Plugin;
 
 /**
- * Lifecycle definition
+ * A Maven lifecycle is a sequence of predefined phases that govern the build process
+ * of a Maven project. Each phase represents a specific step, such as compiling the
+ * code, running tests, packaging the project, and deploying it. Executing a phase
+ * triggers all preceding phases, ensuring that each step of the build process is
+ * completed in the correct order. The three main lifecycles in Maven are
+ * {@link #DEFAULT default}, {@link #CLEAN clean}, and {@link #SITE site}, with the
+ * {@code default} lifecycle being the most commonly used for project builds.
  *
  * @since 4.0.0
  */
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ProducedArtifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ProducedArtifact.java
index b110337581..6c9e1be33c 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/ProducedArtifact.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ProducedArtifact.java
@@ -21,6 +21,7 @@ package org.apache.maven.api;
 import java.nio.file.Path;
 
 import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Immutable;
 
 /**
  * An {@link Artifact} that is being produced by a {@link Project} during the build.
@@ -42,4 +43,5 @@ import org.apache.maven.api.annotations.Experimental;
  * @see org.apache.maven.api.services.ArtifactManager#setPath(ProducedArtifact, Path)
  */
 @Experimental
+@Immutable
 public interface ProducedArtifact extends Artifact {}
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java
index 3bda29fcd4..47342ce8a7 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Project.java
@@ -173,13 +173,13 @@ public interface Project {
      * Returns the project direct dependencies (directly specified or inherited).
      */
     @Nonnull
-    List<DependencyCoordinate> getDependencies();
+    List<DependencyCoordinates> getDependencies();
 
     /**
      * Returns the project managed dependencies (directly specified or inherited).
      */
     @Nonnull
-    List<DependencyCoordinate> getManagedDependencies();
+    List<DependencyCoordinates> getManagedDependencies();
 
     /**
      * Returns the project ID, usable as key.
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
index 25497b98b1..bc20c35b7d 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Session.java
@@ -31,7 +31,8 @@ import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.annotations.Nullable;
 import org.apache.maven.api.annotations.ThreadSafe;
 import org.apache.maven.api.model.Repository;
-import org.apache.maven.api.services.DependencyCoordinateFactory;
+import org.apache.maven.api.services.ArtifactCoordinatesFactory;
+import org.apache.maven.api.services.DependencyCoordinatesFactory;
 import org.apache.maven.api.settings.Settings;
 
 /**
@@ -47,15 +48,35 @@ import org.apache.maven.api.settings.Settings;
 @ThreadSafe
 public interface Session {
 
+    /**
+     * Retrieves the settings for the current session.
+     *
+     * @return the settings instance
+     */
     @Nonnull
     Settings getSettings();
 
+    /**
+     * Retrieves the local repository associated with this session.
+     *
+     * @return the local repository instance
+     */
     @Nonnull
     LocalRepository getLocalRepository();
 
+    /**
+     * Retrieves a list of remote repositories associated with this session.
+     *
+     * @return a list of remote repositories
+     */
     @Nonnull
     List<RemoteRepository> getRemoteRepositories();
 
+    /**
+     * Retrieves the session data associated with this session.
+     *
+     * @return the session data, never {@code null}
+     */
     @Nonnull
     SessionData getData();
 
@@ -101,20 +122,35 @@ public interface Session {
     Map<String, String> getEffectiveProperties(@Nullable Project project);
 
     /**
-     * Returns the current maven version
+     * Returns the current maven version.
+     *
      * @return the maven version, never {@code null}
      */
     @Nonnull
     Version getMavenVersion();
 
+    /**
+     * Returns the degree of concurrency for the build.
+     *
+     * @return  the degree of concurrency
+     */
     int getDegreeOfConcurrency();
 
+    /**
+     * Returns the start time of the session.
+     *
+     * @return the start time as an Instant object, never {@code null}
+     */
     @Nonnull
     Instant getStartTime();
 
     /**
      * Gets the directory of the topmost project being built, usually the current directory or the
      * directory pointed at by the {@code -f/--file} command line argument.
+     *
+     * @return the directory of the topmost project, never {@code null}
+     * @see Project#isTopProject()
+     * @see #getRootDirectory()
      */
     @Nonnull
     Path getTopDirectory();
@@ -122,13 +158,20 @@ public interface Session {
     /**
      * Gets the root directory of the session, which is the root directory for the top directory project.
      *
+     * @return the root directory, never {@code null}
      * @throws IllegalStateException if the root directory could not be found
      * @see #getTopDirectory()
      * @see Project#getRootDirectory()
+     * @see Project#isRootProject()
      */
     @Nonnull
     Path getRootDirectory();
 
+    /**
+     * Retrieves a list of projects associated with the session.
+     *
+     * @return a list of projects, never {@code null}
+     */
     @Nonnull
     List<Project> getProjects();
 
@@ -231,18 +274,18 @@ public interface Session {
     RemoteRepository createRemoteRepository(@Nonnull Repository repository);
 
     /**
-     * Creates a coordinate out of string that is formatted like:
+     * Creates a coordinates out of string that is formatted like:
      * {@code <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>}.
      * <p>
      * Shortcut for {@code getService(ArtifactFactory.class).create(...)}.
      *
-     * @param coordString the string having "standard" coordinate.
-     * @return coordinate used to point to the artifact
+     * @param coordsString the string having "standard" coordinates.
+     * @return coordinates used to point to the artifact
      *
-     * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String)
      */
     @Nonnull
-    ArtifactCoordinate createArtifactCoordinate(@Nonnull String coordString);
+    ArtifactCoordinates createArtifactCoordinates(@Nonnull String coordsString);
 
     /**
      * Shortcut for {@code getService(ArtifactFactory.class).create(...)}.
@@ -251,12 +294,12 @@ public interface Session {
      * @param artifactId the artifact identifier, or {@code null} is unspecified
      * @param version the artifact version, or {@code null} is unspecified
      * @param extension the artifact extension, or {@code null} is unspecified
-     * @return coordinate used to point to the artifact
+     * @return coordinates used to point to the artifact
      *
-     * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String)
      */
     @Nonnull
-    ArtifactCoordinate createArtifactCoordinate(String groupId, String artifactId, String version, String extension);
+    ArtifactCoordinates createArtifactCoordinates(String groupId, String artifactId, String version, String extension);
 
     /**
      * Shortcut for {@code getService(ArtifactFactory.class).create(...)}.
@@ -267,46 +310,46 @@ public interface Session {
      * @param classifier the artifact classifier, or {@code null} is unspecified
      * @param extension the artifact extension, or {@code null} is unspecified
      * @param type the artifact type, or {@code null} is unspecified
-     * @return coordinate used to point to the artifact
+     * @return coordinates used to point to the artifact
      *
-     * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String)
      */
     @Nonnull
-    ArtifactCoordinate createArtifactCoordinate(
+    ArtifactCoordinates createArtifactCoordinates(
             String groupId, String artifactId, String version, String classifier, String extension, String type);
 
     /**
      * Shortcut for {@code getService(ArtifactFactory.class).create(...)}.
      *
      * @param artifact artifact from which to get coordinates
-     * @return coordinate used to point to the artifact
+     * @return coordinates used to point to the artifact
      *
-     * @see org.apache.maven.api.services.ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String)
      */
     @Nonnull
-    ArtifactCoordinate createArtifactCoordinate(@Nonnull Artifact artifact);
+    ArtifactCoordinates createArtifactCoordinates(@Nonnull Artifact artifact);
 
     /**
      * Shortcut for {@code getService(DependencyFactory.class).create(...)}.
      *
-     * @param coordinate artifact coordinate to get as a dependency coordinate
-     * @return dependency coordinate for the given artifact
+     * @param coordinates artifact coordinates to get as a dependency coordinates
+     * @return dependency coordinates for the given artifact
      *
-     * @see DependencyCoordinateFactory#create(Session, ArtifactCoordinate)
+     * @see DependencyCoordinatesFactory#create(Session, ArtifactCoordinates)
      */
     @Nonnull
-    DependencyCoordinate createDependencyCoordinate(@Nonnull ArtifactCoordinate coordinate);
+    DependencyCoordinates createDependencyCoordinates(@Nonnull ArtifactCoordinates coordinates);
 
     /**
      * Shortcut for {@code getService(DependencyFactory.class).create(...)}.
      *
-     * @param dependency dependency for which to get the coordinate
-     * @return coordinate for the given dependency
+     * @param dependency dependency for which to get the coordinates
+     * @return coordinates for the given dependency
      *
-     * @see DependencyCoordinateFactory#create(Session, Dependency)
+     * @see DependencyCoordinatesFactory#create(Session, Dependency)
      */
     @Nonnull
-    DependencyCoordinate createDependencyCoordinate(@Nonnull Dependency dependency);
+    DependencyCoordinates createDependencyCoordinates(@Nonnull Dependency dependency);
 
     /**
      * Shortcut for {@code getService(ArtifactFactory.class).create(...)}.
@@ -373,14 +416,14 @@ public interface Session {
     /**
      * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
      *
-     * @param coordinate coordinates of the artifact to resolve
+     * @param coordinates coordinates of the artifact to resolve
      * @return requested artifact together with the path to its file
      * @throws org.apache.maven.api.services.ArtifactResolverException if the artifact resolution failed
      *
      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
      */
     @Nonnull
-    ResolvedArtifact resolveArtifact(@Nonnull ArtifactCoordinate coordinate);
+    DownloadedArtifact resolveArtifact(@Nonnull ArtifactCoordinates coordinates);
 
     /**
      * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
@@ -392,7 +435,7 @@ public interface Session {
      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
      */
     @Nonnull
-    Collection<ResolvedArtifact> resolveArtifacts(@Nonnull ArtifactCoordinate... coordinates);
+    Collection<DownloadedArtifact> resolveArtifacts(@Nonnull ArtifactCoordinates... coordinates);
 
     /**
      * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
@@ -404,7 +447,7 @@ public interface Session {
      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
      */
     @Nonnull
-    Collection<ResolvedArtifact> resolveArtifacts(@Nonnull Collection<? extends ArtifactCoordinate> coordinates);
+    Collection<DownloadedArtifact> resolveArtifacts(@Nonnull Collection<? extends ArtifactCoordinates> coordinates);
 
     /**
      * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
@@ -416,7 +459,7 @@ public interface Session {
      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
      */
     @Nonnull
-    ResolvedArtifact resolveArtifact(@Nonnull Artifact artifact);
+    DownloadedArtifact resolveArtifact(@Nonnull Artifact artifact);
 
     /**
      * Shortcut for {@code getService(ArtifactResolver.class).resolve(...)}.
@@ -428,7 +471,7 @@ public interface Session {
      * @see org.apache.maven.api.services.ArtifactResolver#resolve(Session, Collection)
      */
     @Nonnull
-    Collection<ResolvedArtifact> resolveArtifacts(@Nonnull Artifact... artifacts);
+    Collection<DownloadedArtifact> resolveArtifacts(@Nonnull Artifact... artifacts);
 
     /**
      * Shortcut for {@code getService(ArtifactInstaller.class).install(...)}.
@@ -560,11 +603,11 @@ public interface Session {
      * @param dependency dependency for which to get transitive dependencies
      * @return root node of the dependency graph for the given artifact
      *
-     * @see org.apache.maven.api.services.DependencyResolver#collect(Session, DependencyCoordinate)
+     * @see org.apache.maven.api.services.DependencyResolver#collect(Session, DependencyCoordinates)
      * @throws org.apache.maven.api.services.DependencyResolverException if the dependency collection failed
      */
     @Nonnull
-    Node collectDependencies(@Nonnull DependencyCoordinate dependency);
+    Node collectDependencies(@Nonnull DependencyCoordinates dependency);
 
     /**
      * Shortcut for {@code getService(DependencyResolver.class).flatten(...)}.
@@ -582,13 +625,13 @@ public interface Session {
     /**
      * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}.
      *
-     * @param dependencyCoordinate coordinate of the dependency for which to get the paths
+     * @param dependencyCoordinates coordinates of the dependency for which to get the paths
      * @return paths to the transitive dependencies of the given dependency
      *
-     * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, DependencyCoordinate)
+     * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, DependencyCoordinates)
      */
     @Nonnull
-    List<Path> resolveDependencies(@Nonnull DependencyCoordinate dependencyCoordinate);
+    List<Path> resolveDependencies(@Nonnull DependencyCoordinates dependencyCoordinates);
 
     /**
      * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}.
@@ -599,7 +642,7 @@ public interface Session {
      * @see org.apache.maven.api.services.DependencyResolver#resolve(Session, List)
      */
     @Nonnull
-    List<Path> resolveDependencies(@Nonnull List<DependencyCoordinate> dependencyCoordinates);
+    List<Path> resolveDependencies(@Nonnull List<DependencyCoordinates> dependencyCoordinates);
 
     /**
      * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getPaths()}.
@@ -616,7 +659,7 @@ public interface Session {
     /**
      * Shortcut for {@code getService(DependencyResolver.class).resolve(...).getDispatchedPaths()}.
      *
-     * @param dependencyCoordinate coordinate of the dependency for which to get the paths
+     * @param dependencyCoordinates coordinates of the dependency for which to get the paths
      * @param scope build path scope (main compile, test compile, etc.) of desired paths
      * @param desiredTypes the type of paths to include in the result
      * @return paths to the transitive dependencies of the given project
@@ -625,7 +668,7 @@ public interface Session {
      */
     @Nonnull
     Map<PathType, List<Path>> resolveDependencies(
-            @Nonnull DependencyCoordinate dependencyCoordinate,
+            @Nonnull DependencyCoordinates dependencyCoordinates,
             @Nonnull PathScope scope,
             @Nonnull Collection<PathType> desiredTypes);
 
@@ -653,10 +696,10 @@ public interface Session {
      * @return resolved version of the given artifact
      * @throws org.apache.maven.api.services.VersionResolverException if the resolution failed
      *
-     * @see org.apache.maven.api.services.VersionResolver#resolve(Session, ArtifactCoordinate) (String)
+     * @see org.apache.maven.api.services.VersionResolver#resolve(Session, ArtifactCoordinates) (String)
      */
     @Nonnull
-    Version resolveVersion(@Nonnull ArtifactCoordinate artifact);
+    Version resolveVersion(@Nonnull ArtifactCoordinates artifact);
 
     /**
      * Expands a version range to a list of matching versions, in ascending order.
@@ -669,10 +712,10 @@ public interface Session {
      * @param artifact the artifact for which to resolve the versions
      * @return a list of resolved {@code Version}s.
      * @throws org.apache.maven.api.services.VersionRangeResolverException if the resolution failed
-     * @see org.apache.maven.api.services.VersionRangeResolver#resolve(Session, ArtifactCoordinate) (String)
+     * @see org.apache.maven.api.services.VersionRangeResolver#resolve(Session, ArtifactCoordinates) (String)
      */
     @Nonnull
-    List<Version> resolveVersionRange(@Nonnull ArtifactCoordinate artifact);
+    List<Version> resolveVersionRange(@Nonnull ArtifactCoordinates artifact);
 
     /**
      * Parses the specified version string, for example "1.0".
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/package-info.java b/api/maven-api-core/src/main/java/org/apache/maven/api/package-info.java
index ed06755905..8addcd57ca 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/package-info.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/package-info.java
@@ -22,29 +22,29 @@
  *
  * <h3>Dependency management</h3>
  *
- * <p>{@link org.apache.maven.api.ArtifactCoordinate} instances are used to locate artifacts in a repository.
+ * <p>{@link org.apache.maven.api.ArtifactCoordinates} instances are used to locate artifacts in a repository.
  * Each instance is basically a pointer to a file in the Maven repository, except that the version may not be
  * defined precisely.</p>
  *
  * <p>{@link org.apache.maven.api.Artifact} instances are the pointed artifacts in the repository.
- * They are created when <dfn>resolving</dfn> an {@code ArtifactCoordinate}. Resolving is the process
+ * They are created when <dfn>resolving</dfn> an {@code ArtifactCoordinates}. Resolving is the process
  * that selects a particular version and downloads the artifact in the local repository.
- * There are two sub-interfaces, {@link org.apache.maven.api.ResolvedArtifact} which is used when
+ * There are two sub-interfaces, {@link org.apache.maven.api.DownloadedArtifact} which is used when
  * an artifact has been resolved</p>
  *
- * <p>{@link org.apache.maven.api.DependencyCoordinate} instances are used to express a dependency.
- * They are an {@code ArtifactCoordinate} completed with information about how the artifact will be used:
+ * <p>{@link org.apache.maven.api.DependencyCoordinates} instances are used to express a dependency.
+ * They are a {@code ArtifactCoordinates} completed with information about how the artifact will be used:
  * type, scope and obligation (whether the dependency is optional or mandatory).
  * The version and the obligation may not be defined precisely.</p>
  *
  * <p>{@link org.apache.maven.api.Dependency} instances are the pointed dependencies in the repository.
- * They are created when <dfn>resolving</dfn> a {@code DependencyCoordinate}.
+ * They are created when <dfn>resolving</dfn> a {@code DependencyCoordinates}.
  * Resolving is the process that clarifies the obligation (optional or mandatory status),
  * selects a particular version and downloads the artifact in the local repository.</p>
  *
  * <p>{@link org.apache.maven.api.Node} is the main output of the <dfn>dependency collection</dfn> process.
  * it's the graph of dependencies. The above-cited {@code Dependency} instances are the outputs of the
- * collection process, part of the graph computed from one or more {@code DependencyCoordinate}s.</p>
+ * collection process, part of the graph computed from one or more {@code DependencyCoordinates}.</p>
  *
  * <p>{@link org.apache.maven.api.DependencyScope} defines when/how a given dependency will be used by the
  * project.  This includes compile-time only, runtime, test time and various other combinations.</p>
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactory.java
similarity index 64%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactory.java
index de694024af..1e4b1af2bf 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactory.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactory.java
@@ -19,52 +19,52 @@
 package org.apache.maven.api.services;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
 
 /**
- * Service used to create {@link ArtifactCoordinate} objects.
+ * Service used to create {@link ArtifactCoordinates} objects.
  *
  * @since 4.0.0
  */
 @Experimental
-public interface ArtifactCoordinateFactory extends Service {
+public interface ArtifactCoordinatesFactory extends Service {
 
     /**
-     * Creates a coordinate.
+     * Creates artifact coordinates.
      *
-     * @param request the request holding coordinate creation parameters
-     * @return an {@code ArtifactCoordinate}, never {@code null}
+     * @param request the request holding coordinates creation parameters
+     * @return an {@code ArtifactCoordinates}, never {@code null}
      * @throws IllegalArgumentException if {@code request} is null or {@code request.session} is null or invalid
      */
     @Nonnull
-    ArtifactCoordinate create(@Nonnull ArtifactCoordinateFactoryRequest request);
+    ArtifactCoordinates create(@Nonnull ArtifactCoordinatesFactoryRequest request);
 
     /**
-     * Creates a coordinate out of string that is formatted like:
+     * Creates coordinates out of string that is formatted like:
      * {@code <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>}
      *
      * @param session the session.
-     * @param coordinateString the string having "standard" coordinate.
-     * @return an {@code ArtifactCoordinate}, never {@code null}
+     * @param coordinatesString the string having "standard" coordinates.
+     * @return an {@code ArtifactCoordinates}, never {@code null}
      * @throws IllegalArgumentException if {@code session} is null or invalid
      */
     @Nonnull
-    default ArtifactCoordinate create(@Nonnull Session session, @Nonnull String coordinateString) {
-        return create(ArtifactCoordinateFactoryRequest.build(session, coordinateString));
+    default ArtifactCoordinates create(@Nonnull Session session, @Nonnull String coordinatesString) {
+        return create(ArtifactCoordinatesFactoryRequest.build(session, coordinatesString));
     }
 
     @Nonnull
-    default ArtifactCoordinate create(
+    default ArtifactCoordinates create(
             @Nonnull Session session, String groupId, String artifactId, String version, String extension) {
-        return create(ArtifactCoordinateFactoryRequest.build(session, groupId, artifactId, version, extension));
+        return create(ArtifactCoordinatesFactoryRequest.build(session, groupId, artifactId, version, extension));
     }
 
     @Nonnull
-    default ArtifactCoordinate create(
+    default ArtifactCoordinates create(
             @Nonnull Session session,
             String groupId,
             String artifactId,
@@ -72,13 +72,13 @@ public interface ArtifactCoordinateFactory extends Service {
             String classifier,
             String extension,
             String type) {
-        return create(ArtifactCoordinateFactoryRequest.build(
+        return create(ArtifactCoordinatesFactoryRequest.build(
                 session, groupId, artifactId, version, classifier, extension, type));
     }
 
     @Nonnull
-    default ArtifactCoordinate create(@Nonnull Session session, Artifact artifact) {
-        return create(ArtifactCoordinateFactoryRequest.build(
+    default ArtifactCoordinates create(@Nonnull Session session, Artifact artifact) {
+        return create(ArtifactCoordinatesFactoryRequest.build(
                 session,
                 artifact.getGroupId(),
                 artifact.getArtifactId(),
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
similarity index 80%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
index c2fd1424cc..495ddc7367 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinateFactoryRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Immutable;
@@ -28,13 +28,13 @@ import org.apache.maven.api.annotations.NotThreadSafe;
 import static org.apache.maven.api.services.BaseRequest.nonNull;
 
 /**
- * A request for creating a {@link ArtifactCoordinate} object.
+ * A request for creating a {@link ArtifactCoordinates} object.
  *
  * @since 4.0.0
  */
 @Experimental
 @Immutable
-public interface ArtifactCoordinateFactoryRequest {
+public interface ArtifactCoordinatesFactoryRequest {
 
     @Nonnull
     Session getSession();
@@ -51,12 +51,12 @@ public interface ArtifactCoordinateFactoryRequest {
 
     String getType();
 
-    String getCoordinateString();
+    String getCoordinatesString();
 
     @Nonnull
-    static ArtifactCoordinateFactoryRequest build(
+    static ArtifactCoordinatesFactoryRequest build(
             @Nonnull Session session, String groupId, String artifactId, String version, String extension) {
-        return ArtifactCoordinateFactoryRequest.builder()
+        return ArtifactCoordinatesFactoryRequest.builder()
                 .session(nonNull(session, "session"))
                 .groupId(groupId)
                 .artifactId(artifactId)
@@ -66,7 +66,7 @@ public interface ArtifactCoordinateFactoryRequest {
     }
 
     @Nonnull
-    static ArtifactCoordinateFactoryRequest build(
+    static ArtifactCoordinatesFactoryRequest build(
             @Nonnull Session session,
             String groupId,
             String artifactId,
@@ -74,7 +74,7 @@ public interface ArtifactCoordinateFactoryRequest {
             String classifier,
             String extension,
             String type) {
-        return ArtifactCoordinateFactoryRequest.builder()
+        return ArtifactCoordinatesFactoryRequest.builder()
                 .session(nonNull(session, "session"))
                 .groupId(groupId)
                 .artifactId(artifactId)
@@ -86,22 +86,22 @@ public interface ArtifactCoordinateFactoryRequest {
     }
 
     @Nonnull
-    static ArtifactCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull String coordinateString) {
-        return ArtifactCoordinateFactoryRequest.builder()
+    static ArtifactCoordinatesFactoryRequest build(@Nonnull Session session, @Nonnull String coordinateString) {
+        return ArtifactCoordinatesFactoryRequest.builder()
                 .session(nonNull(session, "session"))
                 .coordinateString(nonNull(coordinateString, "coordinateString"))
                 .build();
     }
 
     @Nonnull
-    static ArtifactCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
-        return ArtifactCoordinateFactoryRequest.builder()
+    static ArtifactCoordinatesFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinates coordinates) {
+        return ArtifactCoordinatesFactoryRequest.builder()
                 .session(nonNull(session, "session"))
-                .groupId(nonNull(coordinate, "coordinate").getGroupId())
-                .artifactId(coordinate.getArtifactId())
-                .classifier(coordinate.getClassifier())
-                .version(coordinate.getVersionConstraint().asString())
-                .extension(coordinate.getExtension())
+                .groupId(nonNull(coordinates, "coordinates").getGroupId())
+                .artifactId(coordinates.getArtifactId())
+                .classifier(coordinates.getClassifier())
+                .version(coordinates.getVersionConstraint().asString())
+                .extension(coordinates.getExtension())
                 .build();
     }
 
@@ -162,20 +162,20 @@ public interface ArtifactCoordinateFactoryRequest {
             return this;
         }
 
-        public ArtifactCoordinateFactoryRequest build() {
+        public ArtifactCoordinatesFactoryRequest build() {
             return new DefaultArtifactFactoryRequestArtifact(
                     session, groupId, artifactId, version, classifier, extension, type, coordinateString);
         }
 
         private static class DefaultArtifactFactoryRequestArtifact extends BaseRequest
-                implements ArtifactCoordinateFactoryRequest {
+                implements ArtifactCoordinatesFactoryRequest {
             private final String groupId;
             private final String artifactId;
             private final String version;
             private final String classifier;
             private final String extension;
             private final String type;
-            private final String coordinateString;
+            private final String coordinatesString;
 
             @SuppressWarnings("checkstyle:ParameterNumber")
             DefaultArtifactFactoryRequestArtifact(
@@ -186,7 +186,7 @@ public interface ArtifactCoordinateFactoryRequest {
                     String classifier,
                     String extension,
                     String type,
-                    String coordinateString) {
+                    String coordinatesString) {
                 super(session);
                 this.groupId = groupId;
                 this.artifactId = artifactId;
@@ -194,7 +194,7 @@ public interface ArtifactCoordinateFactoryRequest {
                 this.classifier = classifier;
                 this.extension = extension;
                 this.type = type;
-                this.coordinateString = coordinateString;
+                this.coordinatesString = coordinatesString;
             }
 
             @Override
@@ -227,8 +227,8 @@ public interface ArtifactCoordinateFactoryRequest {
                 return type;
             }
 
-            public String getCoordinateString() {
-                return coordinateString;
+            public String getCoordinatesString() {
+                return coordinatesString;
             }
         }
     }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolver.java
index 8c07d99709..31e2d8d276 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolver.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolver.java
@@ -20,7 +20,7 @@ package org.apache.maven.api.services;
 
 import java.util.Collection;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
@@ -46,13 +46,13 @@ public interface ArtifactResolver extends Service {
      * Resolves several artifacts from their coordinates.
      *
      * @param session {@link Session}
-     * @param coordinates array of {@link ArtifactCoordinate}
+     * @param coordinates array of {@link ArtifactCoordinates}
      * @return {@link ArtifactResolverResult}
      * @throws ArtifactResolverException in case of an error.
      * @throws IllegalArgumentException in case of parameter {@code buildingRequest} is {@code null} or
-     *             parameter {@code coordinate} is {@code null} or invalid
+     *             parameter {@code coordinates} is {@code null} or invalid
      */
-    default ArtifactResolverResult resolve(Session session, Collection<? extends ArtifactCoordinate> coordinates) {
+    default ArtifactResolverResult resolve(Session session, Collection<? extends ArtifactCoordinates> coordinates) {
         return resolve(ArtifactResolverRequest.build(session, coordinates));
     }
 }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
index caa5942f24..7cfbcbc7c4 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
@@ -20,7 +20,7 @@ package org.apache.maven.api.services;
 
 import java.util.Collection;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Immutable;
@@ -41,7 +41,7 @@ public interface ArtifactResolverRequest {
     Session getSession();
 
     @Nonnull
-    Collection<? extends ArtifactCoordinate> getCoordinates();
+    Collection<? extends ArtifactCoordinates> getCoordinates();
 
     @Nonnull
     static ArtifactResolverRequestBuilder builder() {
@@ -50,7 +50,7 @@ public interface ArtifactResolverRequest {
 
     @Nonnull
     static ArtifactResolverRequest build(
-            @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinate> coordinates) {
+            @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinates> coordinates) {
         return builder()
                 .session(nonNull(session, "session cannot be null"))
                 .coordinates(nonNull(coordinates, "coordinates cannot be null"))
@@ -60,7 +60,7 @@ public interface ArtifactResolverRequest {
     @NotThreadSafe
     class ArtifactResolverRequestBuilder {
         Session session;
-        Collection<? extends ArtifactCoordinate> coordinates;
+        Collection<? extends ArtifactCoordinates> coordinates;
 
         ArtifactResolverRequestBuilder() {}
 
@@ -71,7 +71,7 @@ public interface ArtifactResolverRequest {
         }
 
         @Nonnull
-        public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactCoordinate> coordinates) {
+        public ArtifactResolverRequestBuilder coordinates(Collection<? extends ArtifactCoordinates> coordinates) {
             this.coordinates = coordinates;
             return this;
         }
@@ -83,17 +83,17 @@ public interface ArtifactResolverRequest {
 
         private static class DefaultArtifactResolverRequest extends BaseRequest implements ArtifactResolverRequest {
             @Nonnull
-            private final Collection<? extends ArtifactCoordinate> coordinates;
+            private final Collection<? extends ArtifactCoordinates> coordinates;
 
             DefaultArtifactResolverRequest(
-                    @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinate> coordinates) {
+                    @Nonnull Session session, @Nonnull Collection<? extends ArtifactCoordinates> coordinates) {
                 super(session);
                 this.coordinates = unmodifiable(nonNull(coordinates, "coordinates cannot be null"));
             }
 
             @Nonnull
             @Override
-            public Collection<? extends ArtifactCoordinate> getCoordinates() {
+            public Collection<? extends ArtifactCoordinates> getCoordinates() {
                 return coordinates;
             }
         }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverResult.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverResult.java
index fbfafe3e08..74d6cacb5f 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverResult.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverResult.java
@@ -22,7 +22,7 @@ import java.nio.file.Path;
 import java.util.Collection;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ResolvedArtifact;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.annotations.Nullable;
@@ -38,7 +38,7 @@ public interface ArtifactResolverResult {
      * @return {@link Artifact}
      */
     @Nonnull
-    Collection<ResolvedArtifact> getArtifacts();
+    Collection<DownloadedArtifact> getArtifacts();
 
     @Nullable
     Path getPath(Artifact artifact);
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactory.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactory.java
similarity index 63%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactory.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactory.java
index f5fc736113..29b06c45d3 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactory.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactory.java
@@ -18,8 +18,8 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
@@ -33,33 +33,34 @@ import org.apache.maven.api.model.ReportPlugin;
  * @since 4.0.0
  */
 @Experimental
-public interface DependencyCoordinateFactory extends Service {
+public interface DependencyCoordinatesFactory extends Service {
 
     /**
-     * Creates a new {@link DependencyCoordinate} object from the request.
+     * Creates a new {@link DependencyCoordinates} object from the request.
      *
      * @param request the request containing the various data
-     * @return a new {@link DependencyCoordinate} object
+     * @return a new {@link DependencyCoordinates} object
      *
      * @throws IllegalArgumentException if {@code request} is null or
      *         if {@code request.getSession()} is null or invalid
      */
     @Nonnull
-    DependencyCoordinate create(@Nonnull DependencyCoordinateFactoryRequest request);
+    DependencyCoordinates create(@Nonnull DependencyCoordinatesFactoryRequest request);
 
     @Nonnull
-    default DependencyCoordinate create(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
-        return create(DependencyCoordinateFactoryRequest.build(session, coordinate));
+    default DependencyCoordinates create(@Nonnull Session session, @Nonnull ArtifactCoordinates coordinates) {
+        return create(DependencyCoordinatesFactoryRequest.build(session, coordinates));
     }
 
     @Nonnull
-    default DependencyCoordinate create(@Nonnull Session session, @Nonnull org.apache.maven.api.Dependency dependency) {
-        return create(DependencyCoordinateFactoryRequest.build(session, dependency));
+    default DependencyCoordinates create(
+            @Nonnull Session session, @Nonnull org.apache.maven.api.Dependency dependency) {
+        return create(DependencyCoordinatesFactoryRequest.build(session, dependency));
     }
 
     @Nonnull
-    default DependencyCoordinate create(@Nonnull Session session, Dependency dependency) {
-        return create(DependencyCoordinateFactoryRequest.build(
+    default DependencyCoordinates create(@Nonnull Session session, Dependency dependency) {
+        return create(DependencyCoordinatesFactoryRequest.build(
                 session,
                 dependency.getGroupId(),
                 dependency.getArtifactId(),
@@ -70,16 +71,16 @@ public interface DependencyCoordinateFactory extends Service {
     }
 
     @Nonnull
-    default DependencyCoordinate create(@Nonnull Session session, Plugin plugin) {
+    default DependencyCoordinates create(@Nonnull Session session, Plugin plugin) {
         // TODO: hard coded string
-        return create(DependencyCoordinateFactoryRequest.build(
+        return create(DependencyCoordinatesFactoryRequest.build(
                 session, plugin.getGroupId(), plugin.getArtifactId(), plugin.getVersion(), null, null, "maven-plugin"));
     }
 
     @Nonnull
-    default DependencyCoordinate create(@Nonnull Session session, ReportPlugin reportPlugin) {
+    default DependencyCoordinates create(@Nonnull Session session, ReportPlugin reportPlugin) {
         // TODO: hard coded string
-        return create(DependencyCoordinateFactoryRequest.build(
+        return create(DependencyCoordinatesFactoryRequest.build(
                 session,
                 reportPlugin.getGroupId(),
                 reportPlugin.getArtifactId(),
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
similarity index 74%
rename from api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java
rename to api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
index 5a9249b09f..730838271a 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinateFactoryRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
@@ -22,7 +22,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Dependency;
 import org.apache.maven.api.Exclusion;
 import org.apache.maven.api.Session;
@@ -39,7 +39,7 @@ import static org.apache.maven.api.services.BaseRequest.nonNull;
  */
 @Experimental
 @Immutable
-public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFactoryRequest {
+public interface DependencyCoordinatesFactoryRequest extends ArtifactCoordinatesFactoryRequest {
 
     String getScope();
 
@@ -49,7 +49,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
     Collection<Exclusion> getExclusions();
 
     @Nonnull
-    static DependencyCoordinateFactoryRequest build(
+    static DependencyCoordinatesFactoryRequest build(
             @Nonnull Session session,
             String groupId,
             String artifactId,
@@ -57,7 +57,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
             String classifier,
             String extension,
             String type) {
-        return DependencyCoordinateFactoryRequest.builder()
+        return DependencyCoordinatesFactoryRequest.builder()
                 .session(nonNull(session, "session cannot be null"))
                 .groupId(groupId)
                 .artifactId(artifactId)
@@ -69,19 +69,20 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
     }
 
     @Nonnull
-    static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate coordinate) {
+    static DependencyCoordinatesFactoryRequest build(
+            @Nonnull Session session, @Nonnull ArtifactCoordinates coordinates) {
         return builder()
                 .session(nonNull(session, "session cannot be null"))
-                .groupId(nonNull(coordinate, "coordinate cannot be null").getGroupId())
-                .artifactId(coordinate.getArtifactId())
-                .version(coordinate.getVersionConstraint().asString())
-                .classifier(coordinate.getClassifier())
-                .extension(coordinate.getExtension())
+                .groupId(nonNull(coordinates, "coordinates cannot be null").getGroupId())
+                .artifactId(coordinates.getArtifactId())
+                .version(coordinates.getVersionConstraint().asString())
+                .classifier(coordinates.getClassifier())
+                .extension(coordinates.getExtension())
                 .build();
     }
 
     @Nonnull
-    static DependencyCoordinateFactoryRequest build(@Nonnull Session session, @Nonnull Dependency dependency) {
+    static DependencyCoordinatesFactoryRequest build(@Nonnull Session session, @Nonnull Dependency dependency) {
         return builder()
                 .session(nonNull(session, "session cannot be null"))
                 .groupId(nonNull(dependency, "dependency").getGroupId())
@@ -96,12 +97,12 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
     }
 
     @Nonnull
-    static DependencyCoordinateFactoryRequestBuilder builder() {
-        return new DependencyCoordinateFactoryRequestBuilder();
+    static DependencyCoordinatesFactoryRequestBuilder builder() {
+        return new DependencyCoordinatesFactoryRequestBuilder();
     }
 
     @NotThreadSafe
-    class DependencyCoordinateFactoryRequestBuilder {
+    class DependencyCoordinatesFactoryRequestBuilder {
         private Session session;
         private String groupId;
         private String artifactId;
@@ -114,59 +115,59 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
         private boolean optional;
         private Collection<Exclusion> exclusions = Collections.emptyList();
 
-        DependencyCoordinateFactoryRequestBuilder() {}
+        DependencyCoordinatesFactoryRequestBuilder() {}
 
-        public DependencyCoordinateFactoryRequestBuilder session(Session session) {
+        public DependencyCoordinatesFactoryRequestBuilder session(Session session) {
             this.session = session;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder groupId(String groupId) {
+        public DependencyCoordinatesFactoryRequestBuilder groupId(String groupId) {
             this.groupId = groupId;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder artifactId(String artifactId) {
+        public DependencyCoordinatesFactoryRequestBuilder artifactId(String artifactId) {
             this.artifactId = artifactId;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder version(String version) {
+        public DependencyCoordinatesFactoryRequestBuilder version(String version) {
             this.version = version;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder classifier(String classifier) {
+        public DependencyCoordinatesFactoryRequestBuilder classifier(String classifier) {
             this.classifier = classifier;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder extension(String extension) {
+        public DependencyCoordinatesFactoryRequestBuilder extension(String extension) {
             this.extension = extension;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder type(String type) {
+        public DependencyCoordinatesFactoryRequestBuilder type(String type) {
             this.type = type;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder coordinateString(String coordinateString) {
+        public DependencyCoordinatesFactoryRequestBuilder coordinateString(String coordinateString) {
             this.coordinateString = coordinateString;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder scope(String scope) {
+        public DependencyCoordinatesFactoryRequestBuilder scope(String scope) {
             this.scope = scope;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder optional(boolean optional) {
+        public DependencyCoordinatesFactoryRequestBuilder optional(boolean optional) {
             this.optional = optional;
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder exclusions(Collection<Exclusion> exclusions) {
+        public DependencyCoordinatesFactoryRequestBuilder exclusions(Collection<Exclusion> exclusions) {
             if (exclusions != null) {
                 if (this.exclusions.isEmpty()) {
                     this.exclusions = new ArrayList<>();
@@ -176,7 +177,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
             return this;
         }
 
-        public DependencyCoordinateFactoryRequestBuilder exclusion(Exclusion exclusion) {
+        public DependencyCoordinatesFactoryRequestBuilder exclusion(Exclusion exclusion) {
             if (exclusion != null) {
                 if (this.exclusions.isEmpty()) {
                     this.exclusions = new ArrayList<>();
@@ -186,8 +187,8 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
             return this;
         }
 
-        public DependencyCoordinateFactoryRequest build() {
-            return new DefaultDependencyCoordinateFactoryRequest(
+        public DependencyCoordinatesFactoryRequest build() {
+            return new DefaultDependencyCoordinatesFactoryRequest(
                     session,
                     groupId,
                     artifactId,
@@ -201,8 +202,8 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
                     exclusions);
         }
 
-        private static class DefaultDependencyCoordinateFactoryRequest extends BaseRequest
-                implements DependencyCoordinateFactoryRequest {
+        private static class DefaultDependencyCoordinatesFactoryRequest extends BaseRequest
+                implements DependencyCoordinatesFactoryRequest {
             private final String groupId;
             private final String artifactId;
             private final String version;
@@ -215,7 +216,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
             private final Collection<Exclusion> exclusions;
 
             @SuppressWarnings("checkstyle:ParameterNumber")
-            private DefaultDependencyCoordinateFactoryRequest(
+            private DefaultDependencyCoordinatesFactoryRequest(
                     @Nonnull Session session,
                     String groupId,
                     String artifactId,
@@ -270,7 +271,7 @@ public interface DependencyCoordinateFactoryRequest extends ArtifactCoordinateFa
                 return type;
             }
 
-            public String getCoordinateString() {
+            public String getCoordinatesString() {
                 return coordinateString;
             }
 
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java
index 95feaa1925..1a217a5192 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolver.java
@@ -21,7 +21,7 @@ package org.apache.maven.api.services;
 import java.util.List;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.PathScope;
 import org.apache.maven.api.Project;
@@ -49,7 +49,7 @@ public interface DependencyResolver extends Service {
      * @see #collect(DependencyResolverRequest)
      */
     @Nonnull
-    default DependencyResolverResult collect(@Nonnull Session session, @Nonnull DependencyCoordinate root) {
+    default DependencyResolverResult collect(@Nonnull Session session, @Nonnull DependencyCoordinates root) {
         return collect(DependencyResolverRequest.build(session, DependencyResolverRequest.RequestType.COLLECT, root));
     }
 
@@ -100,7 +100,7 @@ public interface DependencyResolver extends Service {
      * @throws IllegalArgumentException if an argument is null or invalid
      *
      * @see DependencyResolver#collect(Session, Project)
-     * @see DependencyResolver#collect(Session, DependencyCoordinate)
+     * @see DependencyResolver#collect(Session, DependencyCoordinates)
      * @see DependencyResolver#collect(Session, Artifact)
      */
     @Nonnull
@@ -157,28 +157,28 @@ public interface DependencyResolver extends Service {
     }
 
     @Nonnull
-    default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull DependencyCoordinate dependency) {
+    default DependencyResolverResult resolve(@Nonnull Session session, @Nonnull DependencyCoordinates dependency) {
         return resolve(
                 DependencyResolverRequest.build(session, DependencyResolverRequest.RequestType.RESOLVE, dependency));
     }
 
     @Nonnull
     default DependencyResolverResult resolve(
-            @Nonnull Session session, @Nonnull DependencyCoordinate dependency, @Nonnull PathScope scope) {
+            @Nonnull Session session, @Nonnull DependencyCoordinates dependency, @Nonnull PathScope scope) {
         return resolve(DependencyResolverRequest.build(
                 session, DependencyResolverRequest.RequestType.RESOLVE, dependency, scope));
     }
 
     @Nonnull
     default DependencyResolverResult resolve(
-            @Nonnull Session session, @Nonnull List<DependencyCoordinate> dependencies) {
+            @Nonnull Session session, @Nonnull List<DependencyCoordinates> dependencies) {
         return resolve(
                 DependencyResolverRequest.build(session, DependencyResolverRequest.RequestType.RESOLVE, dependencies));
     }
 
     @Nonnull
     default DependencyResolverResult resolve(
-            @Nonnull Session session, @Nonnull List<DependencyCoordinate> dependencies, @Nonnull PathScope scope) {
+            @Nonnull Session session, @Nonnull List<DependencyCoordinates> dependencies, @Nonnull PathScope scope) {
         return resolve(DependencyResolverRequest.build(
                 session, DependencyResolverRequest.RequestType.RESOLVE, dependencies, scope));
     }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
index 44c573c804..6b18394f96 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
@@ -26,7 +26,7 @@ import java.util.Optional;
 import java.util.function.Predicate;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.JavaPathType;
 import org.apache.maven.api.PathScope;
 import org.apache.maven.api.PathType;
@@ -70,13 +70,13 @@ public interface DependencyResolverRequest {
     Optional<Artifact> getRootArtifact();
 
     @Nonnull
-    Optional<DependencyCoordinate> getRoot();
+    Optional<DependencyCoordinates> getRoot();
 
     @Nonnull
-    Collection<DependencyCoordinate> getDependencies();
+    Collection<DependencyCoordinates> getDependencies();
 
     @Nonnull
-    Collection<DependencyCoordinate> getManagedDependencies();
+    Collection<DependencyCoordinates> getManagedDependencies();
 
     boolean getVerbose();
 
@@ -125,13 +125,13 @@ public interface DependencyResolverRequest {
     }
 
     @Nonnull
-    static DependencyResolverRequest build(Session session, RequestType requestType, DependencyCoordinate dependency) {
+    static DependencyResolverRequest build(Session session, RequestType requestType, DependencyCoordinates dependency) {
         return build(session, requestType, dependency, PathScope.MAIN_RUNTIME);
     }
 
     @Nonnull
     static DependencyResolverRequest build(
-            Session session, RequestType requestType, DependencyCoordinate dependency, PathScope scope) {
+            Session session, RequestType requestType, DependencyCoordinates dependency, PathScope scope) {
         return new DependencyResolverRequestBuilder()
                 .session(session)
                 .requestType(requestType)
@@ -142,13 +142,13 @@ public interface DependencyResolverRequest {
 
     @Nonnull
     static DependencyResolverRequest build(
-            Session session, RequestType requestType, List<DependencyCoordinate> dependencies) {
+            Session session, RequestType requestType, List<DependencyCoordinates> dependencies) {
         return build(session, requestType, dependencies, PathScope.MAIN_RUNTIME);
     }
 
     @Nonnull
     static DependencyResolverRequest build(
-            Session session, RequestType requestType, List<DependencyCoordinate> dependencies, PathScope scope) {
+            Session session, RequestType requestType, List<DependencyCoordinates> dependencies, PathScope scope) {
         return new DependencyResolverRequestBuilder()
                 .session(session)
                 .requestType(requestType)
@@ -164,9 +164,9 @@ public interface DependencyResolverRequest {
         RequestType requestType;
         Project project;
         Artifact rootArtifact;
-        DependencyCoordinate root;
-        List<DependencyCoordinate> dependencies = Collections.emptyList();
-        List<DependencyCoordinate> managedDependencies = Collections.emptyList();
+        DependencyCoordinates root;
+        List<DependencyCoordinates> dependencies = Collections.emptyList();
+        List<DependencyCoordinates> managedDependencies = Collections.emptyList();
         boolean verbose;
         PathScope pathScope;
         Predicate<PathType> pathTypeFilter;
@@ -193,11 +193,11 @@ public interface DependencyResolverRequest {
 
         /**
          * Sets the root artifact for the dependency graph.
-         * This must not be confused with {@link #root(DependencyCoordinate)}: The root <em>dependency</em>, like any
+         * This must not be confused with {@link #root(DependencyCoordinates)}: The root <em>dependency</em>, like any
          * other specified dependency, will be subject to dependency collection/resolution, i.e. should have an artifact
          * descriptor and a corresponding artifact file. The root <em>artifact</em> on the other hand is only used
          * as a label for the root node of the graph in case no root dependency was specified. As such, the configured
-         * root artifact is ignored if {@link #root(DependencyCoordinate)} has been set.
+         * root artifact is ignored if {@link #root(DependencyCoordinates)} has been set.
          *
          * @param rootArtifact the root artifact for the dependency graph, may be {@code null}
          * @return this request for chaining, never {@code null}
@@ -213,7 +213,7 @@ public interface DependencyResolverRequest {
          * @return this request for chaining, never {@code null}
          */
         @Nonnull
-        public DependencyResolverRequestBuilder root(@Nonnull DependencyCoordinate root) {
+        public DependencyResolverRequestBuilder root(@Nonnull DependencyCoordinates root) {
             this.root = root;
             return this;
         }
@@ -227,7 +227,7 @@ public interface DependencyResolverRequest {
          * @return this request for chaining, never {@code null}
          */
         @Nonnull
-        public DependencyResolverRequestBuilder dependencies(@Nullable List<DependencyCoordinate> dependencies) {
+        public DependencyResolverRequestBuilder dependencies(@Nullable List<DependencyCoordinates> dependencies) {
             this.dependencies = (dependencies != null) ? dependencies : Collections.emptyList();
             return this;
         }
@@ -239,7 +239,7 @@ public interface DependencyResolverRequest {
          * @return this request for chaining, never {@code null}
          */
         @Nonnull
-        public DependencyResolverRequestBuilder dependency(@Nullable DependencyCoordinate dependency) {
+        public DependencyResolverRequestBuilder dependency(@Nullable DependencyCoordinates dependency) {
             if (dependency != null) {
                 if (this.dependencies.isEmpty()) {
                     this.dependencies = new ArrayList<>();
@@ -259,7 +259,7 @@ public interface DependencyResolverRequest {
          */
         @Nonnull
         public DependencyResolverRequestBuilder managedDependencies(
-                @Nullable List<DependencyCoordinate> managedDependencies) {
+                @Nullable List<DependencyCoordinates> managedDependencies) {
             this.managedDependencies = (managedDependencies != null) ? managedDependencies : Collections.emptyList();
             return this;
         }
@@ -272,7 +272,7 @@ public interface DependencyResolverRequest {
          * @return this request for chaining, never {@code null}
          */
         @Nonnull
-        public DependencyResolverRequestBuilder managedDependency(@Nullable DependencyCoordinate managedDependency) {
+        public DependencyResolverRequestBuilder managedDependency(@Nullable DependencyCoordinates managedDependency) {
             if (managedDependency != null) {
                 if (this.managedDependencies.isEmpty()) {
                     this.managedDependencies = new ArrayList<>();
@@ -346,9 +346,9 @@ public interface DependencyResolverRequest {
             private final RequestType requestType;
             private final Project project;
             private final Artifact rootArtifact;
-            private final DependencyCoordinate root;
-            private final Collection<DependencyCoordinate> dependencies;
-            private final Collection<DependencyCoordinate> managedDependencies;
+            private final DependencyCoordinates root;
+            private final Collection<DependencyCoordinates> dependencies;
+            private final Collection<DependencyCoordinates> managedDependencies;
             private final boolean verbose;
             private final PathScope pathScope;
             private final Predicate<PathType> pathTypeFilter;
@@ -366,9 +366,9 @@ public interface DependencyResolverRequest {
                     @Nonnull RequestType requestType,
                     @Nullable Project project,
                     @Nullable Artifact rootArtifact,
-                    @Nullable DependencyCoordinate root,
-                    @Nonnull Collection<DependencyCoordinate> dependencies,
-                    @Nonnull Collection<DependencyCoordinate> managedDependencies,
+                    @Nullable DependencyCoordinates root,
+                    @Nonnull Collection<DependencyCoordinates> dependencies,
+                    @Nonnull Collection<DependencyCoordinates> managedDependencies,
                     boolean verbose,
                     @Nullable PathScope pathScope,
                     @Nullable Predicate<PathType> pathTypeFilter) {
@@ -408,19 +408,19 @@ public interface DependencyResolverRequest {
 
             @Nonnull
             @Override
-            public Optional<DependencyCoordinate> getRoot() {
+            public Optional<DependencyCoordinates> getRoot() {
                 return Optional.ofNullable(root);
             }
 
             @Nonnull
             @Override
-            public Collection<DependencyCoordinate> getDependencies() {
+            public Collection<DependencyCoordinates> getDependencies() {
                 return dependencies;
             }
 
             @Nonnull
             @Override
-            public Collection<DependencyCoordinate> getManagedDependencies() {
+            public Collection<DependencyCoordinates> getManagedDependencies() {
                 return managedDependencies;
             }
 
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolver.java
index 8f6fb70311..8e288d6433 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolver.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolver.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Consumer;
@@ -43,14 +43,15 @@ public interface VersionRangeResolver extends Service {
      * repositories and their contents.
      *
      * @param session the session to use
-     * @param artifactCoordinate t
+     * @param artifactCoordinates t
      * @return the version range resolution result
      * @throws VersionResolverException if an errors occurs
      */
     @Nonnull
-    default VersionRangeResolverResult resolve(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate)
+    default VersionRangeResolverResult resolve(
+            @Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates)
             throws VersionResolverException {
-        return resolve(VersionRangeResolverRequest.build(session, artifactCoordinate));
+        return resolve(VersionRangeResolverRequest.build(session, artifactCoordinates));
     }
 
     @Nonnull
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
index 3f3ac62355..1ba7f8ec58 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
@@ -37,13 +37,14 @@ public interface VersionRangeResolverRequest {
     Session getSession();
 
     @Nonnull
-    ArtifactCoordinate getArtifactCoordinate();
+    ArtifactCoordinates getArtifactCoordinates();
 
     @Nonnull
-    static VersionRangeResolverRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate) {
+    static VersionRangeResolverRequest build(
+            @Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates) {
         return builder()
                 .session(nonNull(session, "session cannot be null"))
-                .artifactCoordinate(nonNull(artifactCoordinate, "artifactCoordinate cannot be null"))
+                .artifactCoordinates(nonNull(artifactCoordinates, "artifactCoordinates cannot be null"))
                 .build();
     }
 
@@ -55,35 +56,35 @@ public interface VersionRangeResolverRequest {
     @NotThreadSafe
     class VersionResolverRequestBuilder {
         Session session;
-        ArtifactCoordinate artifactCoordinate;
+        ArtifactCoordinates artifactCoordinates;
 
         public VersionResolverRequestBuilder session(Session session) {
             this.session = session;
             return this;
         }
 
-        public VersionResolverRequestBuilder artifactCoordinate(ArtifactCoordinate artifactCoordinate) {
-            this.artifactCoordinate = artifactCoordinate;
+        public VersionResolverRequestBuilder artifactCoordinates(ArtifactCoordinates artifactCoordinates) {
+            this.artifactCoordinates = artifactCoordinates;
             return this;
         }
 
         public VersionRangeResolverRequest build() {
-            return new DefaultVersionResolverRequest(session, artifactCoordinate);
+            return new DefaultVersionResolverRequest(session, artifactCoordinates);
         }
 
         private static class DefaultVersionResolverRequest extends BaseRequest implements VersionRangeResolverRequest {
-            private final ArtifactCoordinate artifactCoordinate;
+            private final ArtifactCoordinates artifactCoordinates;
 
             @SuppressWarnings("checkstyle:ParameterNumber")
-            DefaultVersionResolverRequest(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate) {
+            DefaultVersionResolverRequest(@Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates) {
                 super(session);
-                this.artifactCoordinate = artifactCoordinate;
+                this.artifactCoordinates = artifactCoordinates;
             }
 
             @Nonnull
             @Override
-            public ArtifactCoordinate getArtifactCoordinate() {
-                return artifactCoordinate;
+            public ArtifactCoordinates getArtifactCoordinates() {
+                return artifactCoordinates;
             }
         }
     }
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolver.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolver.java
index a470452f7e..9f1e23d1c1 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolver.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolver.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Consumer;
@@ -39,14 +39,14 @@ public interface VersionResolver extends Service {
      * For example, resolves "1.0-SNAPSHOT" to "1.0-20090208.132618-23".
      *
      * @param session The repository session, must not be {@code null}.
-     * @param artifactCoordinate The artifact coordinate for which the version needs to be resolved, must not be {@code null}
+     * @param artifactCoordinates The artifact coordinates for which the version needs to be resolved, must not be {@code null}
      * @return The version result, never {@code null}.
      * @throws VersionResolverException If the metaversion could not be resolved.
      */
     @Nonnull
-    default VersionResolverResult resolve(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate)
+    default VersionResolverResult resolve(@Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates)
             throws VersionResolverException {
-        return resolve(VersionResolverRequest.build(session, artifactCoordinate));
+        return resolve(VersionResolverRequest.build(session, artifactCoordinates));
     }
 
     /**
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
index 9c50f3e0f3..dd16d9d5f6 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
@@ -18,7 +18,7 @@
  */
 package org.apache.maven.api.services;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.annotations.Experimental;
 import org.apache.maven.api.annotations.Nonnull;
@@ -37,13 +37,13 @@ public interface VersionResolverRequest {
     Session getSession();
 
     @Nonnull
-    ArtifactCoordinate getArtifactCoordinate();
+    ArtifactCoordinates getArtifactCoordinates();
 
     @Nonnull
-    static VersionResolverRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate) {
+    static VersionResolverRequest build(@Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates) {
         return builder()
                 .session(nonNull(session, "session cannot be null"))
-                .artifactCoordinate(nonNull(artifactCoordinate, "artifactCoordinate cannot be null"))
+                .artifactCoordinates(nonNull(artifactCoordinates, "artifactCoordinates cannot be null"))
                 .build();
     }
 
@@ -55,35 +55,35 @@ public interface VersionResolverRequest {
     @NotThreadSafe
     class VersionResolverRequestBuilder {
         Session session;
-        ArtifactCoordinate artifactCoordinate;
+        ArtifactCoordinates artifactCoordinates;
 
         public VersionResolverRequestBuilder session(Session session) {
             this.session = session;
             return this;
         }
 
-        public VersionResolverRequestBuilder artifactCoordinate(ArtifactCoordinate artifactCoordinate) {
-            this.artifactCoordinate = artifactCoordinate;
+        public VersionResolverRequestBuilder artifactCoordinates(ArtifactCoordinates artifactCoordinates) {
+            this.artifactCoordinates = artifactCoordinates;
             return this;
         }
 
         public VersionResolverRequest build() {
-            return new DefaultVersionResolverRequest(session, artifactCoordinate);
+            return new DefaultVersionResolverRequest(session, artifactCoordinates);
         }
 
         private static class DefaultVersionResolverRequest extends BaseRequest implements VersionResolverRequest {
-            private final ArtifactCoordinate artifactCoordinate;
+            private final ArtifactCoordinates artifactCoordinates;
 
             @SuppressWarnings("checkstyle:ParameterNumber")
-            DefaultVersionResolverRequest(@Nonnull Session session, @Nonnull ArtifactCoordinate artifactCoordinate) {
+            DefaultVersionResolverRequest(@Nonnull Session session, @Nonnull ArtifactCoordinates artifactCoordinates) {
                 super(session);
-                this.artifactCoordinate = artifactCoordinate;
+                this.artifactCoordinates = artifactCoordinates;
             }
 
             @Nonnull
             @Override
-            public ArtifactCoordinate getArtifactCoordinate() {
-                return artifactCoordinate;
+            public ArtifactCoordinates getArtifactCoordinates() {
+                return artifactCoordinates;
             }
         }
     }
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AbstractSession.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
index 83ed225b22..77a9da652c 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AbstractSession.java
@@ -35,10 +35,11 @@ import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Dependency;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.DependencyScope;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.Exclusion;
 import org.apache.maven.api.Language;
 import org.apache.maven.api.Listener;
@@ -51,7 +52,6 @@ import org.apache.maven.api.ProducedArtifact;
 import org.apache.maven.api.Project;
 import org.apache.maven.api.ProjectScope;
 import org.apache.maven.api.RemoteRepository;
-import org.apache.maven.api.ResolvedArtifact;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.SessionData;
@@ -62,7 +62,7 @@ import org.apache.maven.api.VersionRange;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.annotations.Nullable;
 import org.apache.maven.api.model.Repository;
-import org.apache.maven.api.services.ArtifactCoordinateFactory;
+import org.apache.maven.api.services.ArtifactCoordinatesFactory;
 import org.apache.maven.api.services.ArtifactDeployer;
 import org.apache.maven.api.services.ArtifactDeployerException;
 import org.apache.maven.api.services.ArtifactFactory;
@@ -71,7 +71,7 @@ import org.apache.maven.api.services.ArtifactInstallerException;
 import org.apache.maven.api.services.ArtifactManager;
 import org.apache.maven.api.services.ArtifactResolver;
 import org.apache.maven.api.services.ArtifactResolverException;
-import org.apache.maven.api.services.DependencyCoordinateFactory;
+import org.apache.maven.api.services.DependencyCoordinatesFactory;
 import org.apache.maven.api.services.DependencyResolver;
 import org.apache.maven.api.services.DependencyResolverException;
 import org.apache.maven.api.services.DependencyResolverRequest;
@@ -152,11 +152,11 @@ public abstract class AbstractSession implements InternalSession {
                 allArtifacts.computeIfAbsent(clazz, c -> Collections.synchronizedMap(new WeakHashMap<>()));
         if (clazz == Artifact.class) {
             return (T) map.computeIfAbsent(artifact, a -> new DefaultArtifact(this, a));
-        } else if (clazz == ResolvedArtifact.class) {
+        } else if (clazz == DownloadedArtifact.class) {
             if (artifact.getPath() == null) {
                 throw new IllegalArgumentException("The given artifact is not resolved");
             } else {
-                return (T) map.computeIfAbsent(artifact, a -> new DefaultResolvedArtifact(this, a));
+                return (T) map.computeIfAbsent(artifact, a -> new DefaultDownloadedArtifact(this, a));
             }
         } else if (clazz == ProducedArtifact.class) {
             return (T) map.computeIfAbsent(artifact, a -> new DefaultProducedArtifact(this, a));
@@ -198,7 +198,7 @@ public abstract class AbstractSession implements InternalSession {
 
     @Override
     public List<org.eclipse.aether.graph.Dependency> toDependencies(
-            Collection<DependencyCoordinate> dependencies, boolean managed) {
+            Collection<DependencyCoordinates> dependencies, boolean managed) {
         return dependencies == null ? null : map(dependencies, d -> toDependency(d, managed));
     }
 
@@ -316,7 +316,7 @@ public abstract class AbstractSession implements InternalSession {
     }
 
     @Override
-    public org.eclipse.aether.graph.Dependency toDependency(DependencyCoordinate dependency, boolean managed) {
+    public org.eclipse.aether.graph.Dependency toDependency(DependencyCoordinates dependency, boolean managed) {
         org.eclipse.aether.graph.Dependency dep;
         if (dependency instanceof AetherDependencyWrapper wrapper) {
             dep = wrapper.dependency;
@@ -370,16 +370,16 @@ public abstract class AbstractSession implements InternalSession {
     }
 
     @Override
-    public org.eclipse.aether.artifact.Artifact toArtifact(ArtifactCoordinate coord) {
-        if (coord instanceof DefaultArtifactCoordinate) {
-            return ((DefaultArtifactCoordinate) coord).getCoordinate();
+    public org.eclipse.aether.artifact.Artifact toArtifact(ArtifactCoordinates coords) {
+        if (coords instanceof DefaultArtifactCoordinates) {
+            return ((DefaultArtifactCoordinates) coords).getCoordinates();
         }
         return new org.eclipse.aether.artifact.DefaultArtifact(
-                coord.getGroupId(),
-                coord.getArtifactId(),
-                coord.getClassifier(),
-                coord.getExtension(),
-                coord.getVersionConstraint().toString(),
+                coords.getGroupId(),
+                coords.getArtifactId(),
+                coords.getClassifier(),
+                coords.getExtension(),
+                coords.getVersionConstraint().toString(),
                 null,
                 (File) null);
     }
@@ -437,46 +437,46 @@ public abstract class AbstractSession implements InternalSession {
     }
 
     /**
-     * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code>
+     * Shortcut for <code>getService(ArtifactCoordinatesFactory.class).create(...)</code>
      *
      * @see ArtifactFactory#create(Session, String, String, String, String)
      */
     @Override
-    public ArtifactCoordinate createArtifactCoordinate(
+    public ArtifactCoordinates createArtifactCoordinates(
             String groupId, String artifactId, String version, String extension) {
-        return getService(ArtifactCoordinateFactory.class).create(this, groupId, artifactId, version, extension);
+        return getService(ArtifactCoordinatesFactory.class).create(this, groupId, artifactId, version, extension);
     }
 
     /**
-     * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code>
+     * Shortcut for <code>getService(ArtifactCoordinatesFactory.class).create(...)</code>
      *
-     * @see ArtifactCoordinateFactory#create(Session, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String)
      */
     @Override
-    public ArtifactCoordinate createArtifactCoordinate(String coordString) {
-        return getService(ArtifactCoordinateFactory.class).create(this, coordString);
+    public ArtifactCoordinates createArtifactCoordinates(String coordString) {
+        return getService(ArtifactCoordinatesFactory.class).create(this, coordString);
     }
 
     /**
-     * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code>
+     * Shortcut for <code>getService(ArtifactCoordinatesFactory.class).create(...)</code>
      *
-     * @see ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String)
      */
     @Override
-    public ArtifactCoordinate createArtifactCoordinate(
+    public ArtifactCoordinates createArtifactCoordinates(
             String groupId, String artifactId, String version, String classifier, String extension, String type) {
-        return getService(ArtifactCoordinateFactory.class)
+        return getService(ArtifactCoordinatesFactory.class)
                 .create(this, groupId, artifactId, version, classifier, extension, type);
     }
 
     /**
-     * Shortcut for <code>getService(CoordinateFactory.class).create(...)</code>
+     * Shortcut for <code>getService(ArtifactCoordinatesFactory.class).create(...)</code>
      *
-     * @see ArtifactCoordinateFactory#create(Session, String, String, String, String, String, String)
+     * @see ArtifactCoordinatesFactory#create(Session, String, String, String, String, String, String)
      */
     @Override
-    public ArtifactCoordinate createArtifactCoordinate(Artifact artifact) {
-        return getService(ArtifactCoordinateFactory.class)
+    public ArtifactCoordinates createArtifactCoordinates(Artifact artifact) {
+        return getService(ArtifactCoordinatesFactory.class)
                 .create(
                         this,
                         artifact.getGroupId(),
@@ -539,9 +539,9 @@ public abstract class AbstractSession implements InternalSession {
      * @see ArtifactResolver#resolve(Session, Collection)
      */
     @Override
-    public ResolvedArtifact resolveArtifact(ArtifactCoordinate coordinate) {
+    public DownloadedArtifact resolveArtifact(ArtifactCoordinates coordinates) {
         return getService(ArtifactResolver.class)
-                .resolve(this, Collections.singletonList(coordinate))
+                .resolve(this, Collections.singletonList(coordinates))
                 .getArtifacts()
                 .iterator()
                 .next();
@@ -554,7 +554,7 @@ public abstract class AbstractSession implements InternalSession {
      * @see ArtifactResolver#resolve(Session, Collection)
      */
     @Override
-    public Collection<ResolvedArtifact> resolveArtifacts(ArtifactCoordinate... coordinates) {
+    public Collection<DownloadedArtifact> resolveArtifacts(ArtifactCoordinates... coordinates) {
         return resolveArtifacts(Arrays.asList(coordinates));
     }
 
@@ -565,7 +565,7 @@ public abstract class AbstractSession implements InternalSession {
      * @see ArtifactResolver#resolve(Session, Collection)
      */
     @Override
-    public Collection<ResolvedArtifact> resolveArtifacts(Collection<? extends ArtifactCoordinate> coordinates) {
+    public Collection<DownloadedArtifact> resolveArtifacts(Collection<? extends ArtifactCoordinates> coordinates) {
         return getService(ArtifactResolver.class).resolve(this, coordinates).getArtifacts();
     }
 
@@ -576,16 +576,16 @@ public abstract class AbstractSession implements InternalSession {
      * @see ArtifactResolver#resolve(Session, Collection)
      */
     @Override
-    public ResolvedArtifact resolveArtifact(Artifact artifact) {
-        ArtifactCoordinate coordinate =
-                getService(ArtifactCoordinateFactory.class).create(this, artifact);
-        return resolveArtifact(coordinate);
+    public DownloadedArtifact resolveArtifact(Artifact artifact) {
+        ArtifactCoordinates coordinates =
+                getService(ArtifactCoordinatesFactory.class).create(this, artifact);
+        return resolveArtifact(coordinates);
     }
 
     @Override
-    public Collection<ResolvedArtifact> resolveArtifacts(Artifact... artifacts) {
-        ArtifactCoordinateFactory acf = getService(ArtifactCoordinateFactory.class);
-        List<ArtifactCoordinate> coords =
+    public Collection<DownloadedArtifact> resolveArtifacts(Artifact... artifacts) {
+        ArtifactCoordinatesFactory acf = getService(ArtifactCoordinatesFactory.class);
+        List<ArtifactCoordinates> coords =
                 Arrays.stream(artifacts).map(a -> acf.create(this, a)).collect(Collectors.toList());
         return resolveArtifacts(coords);
     }
@@ -657,23 +657,23 @@ public abstract class AbstractSession implements InternalSession {
     /**
      * Shortcut for <code>getService(DependencyFactory.class).create(...)</code>
      *
-     * @see DependencyCoordinateFactory#create(Session, ArtifactCoordinate)
+     * @see DependencyCoordinatesFactory#create(Session, ArtifactCoordinates)
      */
     @Nonnull
     @Override
-    public DependencyCoordinate createDependencyCoordinate(@Nonnull ArtifactCoordinate coordinate) {
-        return getService(DependencyCoordinateFactory.class).create(this, coordinate);
+    public DependencyCoordinates createDependencyCoordinates(@Nonnull ArtifactCoordinates coordinates) {
+        return getService(DependencyCoordinatesFactory.class).create(this, coordinates);
     }
 
     /**
      * Shortcut for <code>getService(DependencyFactory.class).create(...)</code>
      *
-     * @see DependencyCoordinateFactory#create(Session, ArtifactCoordinate)
+     * @see DependencyCoordinatesFactory#create(Session, ArtifactCoordinates)
      */
     @Nonnull
     @Override
-    public DependencyCoordinate createDependencyCoordinate(@Nonnull Dependency dependency) {
-        return getService(DependencyCoordinateFactory.class).create(this, dependency);
+    public DependencyCoordinates createDependencyCoordinates(@Nonnull Dependency dependency) {
+        return getService(DependencyCoordinatesFactory.class).create(this, dependency);
     }
 
     /**
@@ -704,11 +704,11 @@ public abstract class AbstractSession implements InternalSession {
      * Shortcut for <code>getService(DependencyResolver.class).collect(...)</code>
      *
      * @throws DependencyResolverException if the dependency collection failed
-     * @see DependencyResolver#collect(Session, DependencyCoordinate)
+     * @see DependencyResolver#collect(Session, DependencyCoordinates)
      */
     @Nonnull
     @Override
-    public Node collectDependencies(@Nonnull DependencyCoordinate dependency) {
+    public Node collectDependencies(@Nonnull DependencyCoordinates dependency) {
         Node root =
                 getService(DependencyResolver.class).collect(this, dependency).getRoot();
         return root.getChildren().iterator().next();
@@ -721,12 +721,12 @@ public abstract class AbstractSession implements InternalSession {
     }
 
     @Override
-    public List<Path> resolveDependencies(DependencyCoordinate dependency) {
+    public List<Path> resolveDependencies(DependencyCoordinates dependency) {
         return getService(DependencyResolver.class).resolve(this, dependency).getPaths();
     }
 
     @Override
-    public List<Path> resolveDependencies(List<DependencyCoordinate> dependencies) {
+    public List<Path> resolveDependencies(List<DependencyCoordinates> dependencies) {
         return getService(DependencyResolver.class).resolve(this, dependencies).getPaths();
     }
 
@@ -739,7 +739,7 @@ public abstract class AbstractSession implements InternalSession {
 
     @Override
     public Map<PathType, List<Path>> resolveDependencies(
-            @Nonnull DependencyCoordinate dependency,
+            @Nonnull DependencyCoordinates dependency,
             @Nonnull PathScope scope,
             @Nonnull Collection<PathType> desiredTypes) {
         return getService(DependencyResolver.class)
@@ -794,12 +794,12 @@ public abstract class AbstractSession implements InternalSession {
     }
 
     @Override
-    public Version resolveVersion(ArtifactCoordinate artifact) {
+    public Version resolveVersion(ArtifactCoordinates artifact) {
         return getService(VersionResolver.class).resolve(this, artifact).getVersion();
     }
 
     @Override
-    public List<Version> resolveVersionRange(ArtifactCoordinate artifact) {
+    public List<Version> resolveVersionRange(ArtifactCoordinates artifact) {
         return getService(VersionRangeResolver.class).resolve(this, artifact).getVersions();
     }
 
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AetherDependencyWrapper.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AetherDependencyWrapper.java
index 5168946501..e6d130de42 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AetherDependencyWrapper.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/AetherDependencyWrapper.java
@@ -27,9 +27,9 @@ import org.eclipse.aether.artifact.ArtifactProperties;
 import org.eclipse.aether.graph.Dependency;
 
 /**
- * Base class of {@code Dependency} or {@code DependencyCoordinate} implementations as a wrapper around
+ * Base class of {@code Dependency} or {@code DependencyCoordinates} implementations as a wrapper around
  * an Eclipse Aether object. This class implements the methods that are common to {@code Dependency} and
- * {@code DependencyCoordinate}, even if this class does not implement directly any of those interfaces.
+ * {@code DependencyCoordinates}, even if this class does not implement directly any of those interfaces.
  * Having matching method signatures is sufficient, even if there is no {@code @Override} annotations.
  *
  * <p>The fact that this class is wrapping an Eclipse Aether object is an implementation details that may
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
index 9a19b11eb4..93d1681111 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifact.java
@@ -21,7 +21,7 @@ package org.apache.maven.internal.impl;
 import java.util.Objects;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Version;
 import org.apache.maven.api.annotations.Nonnull;
 
@@ -99,8 +99,8 @@ public class DefaultArtifact implements Artifact {
 
     @Nonnull
     @Override
-    public ArtifactCoordinate toCoordinate() {
-        return session.createArtifactCoordinate(this);
+    public ArtifactCoordinates toCoordinates() {
+        return session.createArtifactCoordinates(this);
     }
 
     @Override
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinate.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinates.java
similarity index 76%
rename from maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinate.java
rename to maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinates.java
index 98dd3c04ca..3ffd62c289 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinate.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinates.java
@@ -20,7 +20,7 @@ package org.apache.maven.internal.impl;
 
 import java.util.Objects;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.VersionConstraint;
 import org.apache.maven.api.annotations.Nonnull;
 
@@ -29,47 +29,47 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 /**
  * A wrapper class around a maven resolver artifact.
  */
-public class DefaultArtifactCoordinate implements ArtifactCoordinate {
+public class DefaultArtifactCoordinates implements ArtifactCoordinates {
     private final @Nonnull InternalSession session;
-    private final @Nonnull org.eclipse.aether.artifact.Artifact coordinate;
+    private final @Nonnull org.eclipse.aether.artifact.Artifact coordinates;
 
-    public DefaultArtifactCoordinate(
-            @Nonnull InternalSession session, @Nonnull org.eclipse.aether.artifact.Artifact coordinate) {
+    public DefaultArtifactCoordinates(
+            @Nonnull InternalSession session, @Nonnull org.eclipse.aether.artifact.Artifact coordinates) {
         this.session = nonNull(session, "session");
-        this.coordinate = nonNull(coordinate, "coordinate");
+        this.coordinates = nonNull(coordinates, "coordinates");
     }
 
-    public org.eclipse.aether.artifact.Artifact getCoordinate() {
-        return coordinate;
+    public org.eclipse.aether.artifact.Artifact getCoordinates() {
+        return coordinates;
     }
 
     @Nonnull
     @Override
     public String getGroupId() {
-        return coordinate.getGroupId();
+        return coordinates.getGroupId();
     }
 
     @Nonnull
     @Override
     public String getArtifactId() {
-        return coordinate.getArtifactId();
+        return coordinates.getArtifactId();
     }
 
     @Nonnull
     @Override
     public VersionConstraint getVersionConstraint() {
-        return session.parseVersionConstraint(coordinate.getVersion());
+        return session.parseVersionConstraint(coordinates.getVersion());
     }
 
     @Override
     public String getExtension() {
-        return coordinate.getExtension();
+        return coordinates.getExtension();
     }
 
     @Nonnull
     @Override
     public String getClassifier() {
-        return coordinate.getClassifier();
+        return coordinates.getClassifier();
     }
 
     @Override
@@ -80,7 +80,7 @@ public class DefaultArtifactCoordinate implements ArtifactCoordinate {
         if (o == null || getClass() != o.getClass()) {
             return false;
         }
-        DefaultArtifactCoordinate that = (DefaultArtifactCoordinate) o;
+        DefaultArtifactCoordinates that = (DefaultArtifactCoordinates) o;
         return Objects.equals(this.getGroupId(), that.getGroupId())
                 && Objects.equals(this.getArtifactId(), that.getArtifactId())
                 && Objects.equals(this.getVersionConstraint(), that.getVersionConstraint())
@@ -94,6 +94,6 @@ public class DefaultArtifactCoordinate implements ArtifactCoordinate {
 
     @Override
     public String toString() {
-        return coordinate.toString();
+        return coordinates.toString();
     }
 }
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinatesFactory.java
similarity index 80%
rename from maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java
rename to maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinatesFactory.java
index ebc056d9bd..03f7aba227 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinateFactory.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactCoordinatesFactory.java
@@ -18,26 +18,26 @@
  */
 package org.apache.maven.internal.impl;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.di.Named;
 import org.apache.maven.api.di.Singleton;
-import org.apache.maven.api.services.ArtifactCoordinateFactory;
-import org.apache.maven.api.services.ArtifactCoordinateFactoryRequest;
+import org.apache.maven.api.services.ArtifactCoordinatesFactory;
+import org.apache.maven.api.services.ArtifactCoordinatesFactoryRequest;
 import org.eclipse.aether.artifact.ArtifactType;
 
 import static org.apache.maven.internal.impl.Utils.nonNull;
 
 @Named
 @Singleton
-public class DefaultArtifactCoordinateFactory implements ArtifactCoordinateFactory {
+public class DefaultArtifactCoordinatesFactory implements ArtifactCoordinatesFactory {
     @Override
-    public ArtifactCoordinate create(@Nonnull ArtifactCoordinateFactoryRequest request) {
+    public ArtifactCoordinates create(@Nonnull ArtifactCoordinatesFactoryRequest request) {
         nonNull(request, "request");
         InternalSession session = InternalSession.from(request.getSession());
-        if (request.getCoordinateString() != null) {
-            return new DefaultArtifactCoordinate(
-                    session, new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinateString()));
+        if (request.getCoordinatesString() != null) {
+            return new DefaultArtifactCoordinates(
+                    session, new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinatesString()));
         } else {
             ArtifactType type = null;
             if (request.getType() != null) {
@@ -50,7 +50,7 @@ public class DefaultArtifactCoordinateFactory implements ArtifactCoordinateFacto
             String str = request.getExtension();
             String extension =
                     str != null && !str.isEmpty() ? request.getExtension() : type != null ? type.getExtension() : "";
-            return new DefaultArtifactCoordinate(
+            return new DefaultArtifactCoordinates(
                     session,
                     new org.eclipse.aether.artifact.DefaultArtifact(
                             request.getGroupId(),
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
index 4b22a6bbeb..c7821b4163 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultArtifactResolver.java
@@ -26,8 +26,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
-import org.apache.maven.api.ResolvedArtifact;
+import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.di.Named;
 import org.apache.maven.api.di.Singleton;
 import org.apache.maven.api.services.ArtifactManager;
@@ -52,19 +52,19 @@ public class DefaultArtifactResolver implements ArtifactResolver {
         nonNull(request, "request");
         InternalSession session = InternalSession.from(request.getSession());
         try {
-            Map<ResolvedArtifact, Path> paths = new HashMap<>();
+            Map<DownloadedArtifact, Path> paths = new HashMap<>();
             ArtifactManager artifactManager = session.getService(ArtifactManager.class);
             List<RemoteRepository> repositories = session.toRepositories(session.getRemoteRepositories());
             List<ArtifactRequest> requests = new ArrayList<>();
-            for (ArtifactCoordinate coord : request.getCoordinates()) {
-                org.eclipse.aether.artifact.Artifact aetherArtifact = session.toArtifact(coord);
+            for (ArtifactCoordinates coords : request.getCoordinates()) {
+                org.eclipse.aether.artifact.Artifact aetherArtifact = session.toArtifact(coords);
                 Artifact artifact = session.getArtifact(aetherArtifact);
                 Path path = artifactManager.getPath(artifact).orElse(null);
                 if (path != null) {
                     if (aetherArtifact.getPath() == null) {
                         aetherArtifact = aetherArtifact.setPath(path);
                     }
-                    ResolvedArtifact resolved = session.getArtifact(ResolvedArtifact.class, aetherArtifact);
+                    DownloadedArtifact resolved = session.getArtifact(DownloadedArtifact.class, aetherArtifact);
                     paths.put(resolved, path);
                 } else {
                     requests.add(new ArtifactRequest(aetherArtifact, repositories, null));
@@ -74,7 +74,7 @@ public class DefaultArtifactResolver implements ArtifactResolver {
                 List<ArtifactResult> results =
                         session.getRepositorySystem().resolveArtifacts(session.getSession(), requests);
                 for (ArtifactResult result : results) {
-                    ResolvedArtifact artifact = session.getArtifact(ResolvedArtifact.class, result.getArtifact());
+                    DownloadedArtifact artifact = session.getArtifact(DownloadedArtifact.class, result.getArtifact());
                     Path path = result.getArtifact().getPath();
                     paths.put(artifact, path);
                 }
@@ -86,14 +86,14 @@ public class DefaultArtifactResolver implements ArtifactResolver {
     }
 
     static class DefaultArtifactResolverResult implements ArtifactResolverResult {
-        final Map<ResolvedArtifact, Path> paths;
+        final Map<DownloadedArtifact, Path> paths;
 
-        DefaultArtifactResolverResult(Map<ResolvedArtifact, Path> paths) {
+        DefaultArtifactResolverResult(Map<DownloadedArtifact, Path> paths) {
             this.paths = paths;
         }
 
         @Override
-        public Collection<ResolvedArtifact> getArtifacts() {
+        public Collection<DownloadedArtifact> getArtifacts() {
             return paths.keySet();
         }
 
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java
index e910342db1..02551c3ea8 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependency.java
@@ -22,7 +22,7 @@ import java.util.Objects;
 
 import org.apache.maven.api.Artifact;
 import org.apache.maven.api.Dependency;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.Version;
 import org.apache.maven.api.annotations.Nonnull;
 
@@ -70,8 +70,8 @@ public class DefaultDependency extends AetherDependencyWrapper implements Depend
 
     @Nonnull
     @Override
-    public DependencyCoordinate toCoordinate() {
-        return session.createDependencyCoordinate(this);
+    public DependencyCoordinates toCoordinates() {
+        return session.createDependencyCoordinates(this);
     }
 
     @Override
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinates.java
similarity index 91%
rename from maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java
rename to maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinates.java
index fed15cc41c..4310f646e9 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinate.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinates.java
@@ -20,14 +20,14 @@ package org.apache.maven.internal.impl;
 
 import java.util.Collection;
 
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.Exclusion;
 import org.apache.maven.api.VersionConstraint;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.annotations.Nullable;
 
-public class DefaultDependencyCoordinate extends AetherDependencyWrapper implements DependencyCoordinate {
-    public DefaultDependencyCoordinate(
+public class DefaultDependencyCoordinates extends AetherDependencyWrapper implements DependencyCoordinates {
+    public DefaultDependencyCoordinates(
             @Nonnull InternalSession session, @Nonnull org.eclipse.aether.graph.Dependency dependency) {
         super(session, dependency);
     }
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinatesFactory.java
similarity index 82%
rename from maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java
rename to maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinatesFactory.java
index 33c13ea72c..00a4002146 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinateFactory.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyCoordinatesFactory.java
@@ -18,13 +18,13 @@
  */
 package org.apache.maven.internal.impl;
 
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.Exclusion;
 import org.apache.maven.api.annotations.Nonnull;
 import org.apache.maven.api.di.Named;
 import org.apache.maven.api.di.Singleton;
-import org.apache.maven.api.services.DependencyCoordinateFactory;
-import org.apache.maven.api.services.DependencyCoordinateFactoryRequest;
+import org.apache.maven.api.services.DependencyCoordinatesFactory;
+import org.apache.maven.api.services.DependencyCoordinatesFactoryRequest;
 import org.eclipse.aether.artifact.ArtifactType;
 
 import static org.apache.maven.internal.impl.Utils.map;
@@ -32,11 +32,11 @@ import static org.apache.maven.internal.impl.Utils.nonNull;
 
 @Named
 @Singleton
-public class DefaultDependencyCoordinateFactory implements DependencyCoordinateFactory {
+public class DefaultDependencyCoordinatesFactory implements DependencyCoordinatesFactory {
 
     @Nonnull
     @Override
-    public DependencyCoordinate create(@Nonnull DependencyCoordinateFactoryRequest request) {
+    public DependencyCoordinates create(@Nonnull DependencyCoordinatesFactoryRequest request) {
         nonNull(request, "request");
         InternalSession session = InternalSession.from(request.getSession());
 
@@ -44,16 +44,16 @@ public class DefaultDependencyCoordinateFactory implements DependencyCoordinateF
         if (request.getType() != null) {
             type = session.getSession().getArtifactTypeRegistry().get(request.getType());
         }
-        if (request.getCoordinateString() != null) {
-            return new DefaultDependencyCoordinate(
+        if (request.getCoordinatesString() != null) {
+            return new DefaultDependencyCoordinates(
                     session,
                     new org.eclipse.aether.graph.Dependency(
-                            new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinateString()),
+                            new org.eclipse.aether.artifact.DefaultArtifact(request.getCoordinatesString()),
                             request.getScope(),
                             request.isOptional(),
                             map(request.getExclusions(), this::toExclusion)));
         } else {
-            return new DefaultDependencyCoordinate(
+            return new DefaultDependencyCoordinates(
                     session,
                     new org.eclipse.aether.graph.Dependency(
                             new org.eclipse.aether.artifact.DefaultArtifact(
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
index 9bde5e535a..d5a1746cfe 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDependencyResolver.java
@@ -28,9 +28,9 @@ import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Dependency;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.DependencyScope;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.PathScope;
@@ -75,9 +75,9 @@ public class DefaultDependencyResolver implements DependencyResolver {
         InternalSession session = InternalSession.from(request.getSession());
 
         Artifact rootArtifact;
-        DependencyCoordinate root;
-        Collection<DependencyCoordinate> dependencies;
-        Collection<DependencyCoordinate> managedDependencies;
+        DependencyCoordinates root;
+        Collection<DependencyCoordinates> dependencies;
+        Collection<DependencyCoordinates> managedDependencies;
         List<RemoteRepository> remoteRepositories;
         if (request.getProject().isPresent()) {
             Project project = request.getProject().get();
@@ -153,10 +153,10 @@ public class DefaultDependencyResolver implements DependencyResolver {
             result = collectorResult;
         } else {
             List<Node> nodes = flatten(session, collectorResult.getRoot(), request.getPathScope());
-            List<ArtifactCoordinate> coordinates = nodes.stream()
+            List<ArtifactCoordinates> coordinates = nodes.stream()
                     .map(Node::getDependency)
                     .filter(Objects::nonNull)
-                    .map(Artifact::toCoordinate)
+                    .map(Artifact::toCoordinates)
                     .collect(Collectors.toList());
             Predicate<PathType> filter = request.getPathTypeFilter();
             if (request.getRequestType() == DependencyResolverRequest.RequestType.FLATTEN) {
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultResolvedArtifact.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDownloadedArtifact.java
similarity index 87%
rename from maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultResolvedArtifact.java
rename to maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDownloadedArtifact.java
index 6b914a193d..613f8a666d 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultResolvedArtifact.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultDownloadedArtifact.java
@@ -20,15 +20,15 @@ package org.apache.maven.internal.impl;
 
 import java.nio.file.Path;
 
-import org.apache.maven.api.ResolvedArtifact;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.annotations.Nonnull;
 
 /**
  * A wrapper class around a maven resolver artifact.
  */
-public class DefaultResolvedArtifact extends DefaultArtifact implements ResolvedArtifact {
+public class DefaultDownloadedArtifact extends DefaultArtifact implements DownloadedArtifact {
 
-    public DefaultResolvedArtifact(
+    public DefaultDownloadedArtifact(
             @Nonnull InternalSession session, @Nonnull org.eclipse.aether.artifact.Artifact artifact) {
         super(session, artifact);
     }
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionRangeResolver.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionRangeResolver.java
index 585fb6faf1..bed8ec9b93 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionRangeResolver.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionRangeResolver.java
@@ -62,7 +62,7 @@ public class DefaultVersionRangeResolver implements VersionRangeResolver {
             VersionRangeResult res = repositorySystem.resolveVersionRange(
                     session.getSession(),
                     new VersionRangeRequest(
-                            session.toArtifact(request.getArtifactCoordinate()),
+                            session.toArtifact(request.getArtifactCoordinates()),
                             session.toRepositories(session.getRemoteRepositories()),
                             null));
 
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionResolver.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionResolver.java
index b43e9bce9d..e8a9643705 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionResolver.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/DefaultVersionResolver.java
@@ -57,7 +57,7 @@ public class DefaultVersionResolver implements VersionResolver {
             VersionResult res = repositorySystem.resolveVersion(
                     session.getSession(),
                     new VersionRequest(
-                            session.toArtifact(request.getArtifactCoordinate()),
+                            session.toArtifact(request.getArtifactCoordinates()),
                             session.toRepositories(session.getRemoteRepositories()),
                             null));
 
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/InternalSession.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/InternalSession.java
index 12d3c7fa89..7d51b36e75 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/InternalSession.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/InternalSession.java
@@ -22,9 +22,9 @@ import java.util.Collection;
 import java.util.List;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Dependency;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.LocalRepository;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.RemoteRepository;
@@ -73,15 +73,15 @@ public interface InternalSession extends Session {
     org.eclipse.aether.repository.LocalRepository toRepository(LocalRepository repository);
 
     List<org.eclipse.aether.graph.Dependency> toDependencies(
-            Collection<DependencyCoordinate> dependencies, boolean managed);
+            Collection<DependencyCoordinates> dependencies, boolean managed);
 
-    org.eclipse.aether.graph.Dependency toDependency(DependencyCoordinate dependency, boolean managed);
+    org.eclipse.aether.graph.Dependency toDependency(DependencyCoordinates dependency, boolean managed);
 
     List<org.eclipse.aether.artifact.Artifact> toArtifacts(Collection<Artifact> artifacts);
 
     org.eclipse.aether.artifact.Artifact toArtifact(Artifact artifact);
 
-    org.eclipse.aether.artifact.Artifact toArtifact(ArtifactCoordinate coord);
+    org.eclipse.aether.artifact.Artifact toArtifact(ArtifactCoordinates coords);
 
     RepositorySystemSession getSession();
 
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelValidator.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelValidator.java
index 30dab0bd7c..46586e1030 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelValidator.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/model/DefaultModelValidator.java
@@ -283,7 +283,7 @@ public class DefaultModelValidator implements ModelValidator {
         }
     }
 
-    private final Set<String> validCoordinateIds = new HashSet<>();
+    private final Set<String> validCoordinatesIds = new HashSet<>();
 
     private final Set<String> validProfileIds = new HashSet<>();
 
@@ -638,9 +638,9 @@ public class DefaultModelValidator implements ModelValidator {
     public void validateEffectiveModel(Model m, ModelBuilderRequest request, ModelProblemCollector problems) {
         validateStringNotEmpty("modelVersion", problems, Severity.ERROR, Version.BASE, m.getModelVersion(), m);
 
-        validateCoordinateId("groupId", problems, m.getGroupId(), m);
+        validateCoordinatesId("groupId", problems, m.getGroupId(), m);
 
-        validateCoordinateId("artifactId", problems, m.getArtifactId(), m);
+        validateCoordinatesId("artifactId", problems, m.getArtifactId(), m);
 
         validateStringNotEmpty("packaging", problems, Severity.ERROR, Version.BASE, m.getPackaging(), m);
 
@@ -1056,7 +1056,7 @@ public class DefaultModelValidator implements ModelValidator {
             boolean management,
             String prefix,
             ModelBuilderRequest request) {
-        validateCoordinateId(
+        validateCoordinatesId(
                 prefix,
                 "artifactId",
                 problems,
@@ -1066,7 +1066,7 @@ public class DefaultModelValidator implements ModelValidator {
                 d.getManagementKey(),
                 d);
 
-        validateCoordinateId(
+        validateCoordinatesId(
                 prefix, "groupId", problems, Severity.ERROR, Version.BASE, d.getGroupId(), d.getManagementKey(), d);
 
         if (!management) {
@@ -1130,7 +1130,7 @@ public class DefaultModelValidator implements ModelValidator {
         if (request.getValidationLevel() >= ModelBuilderRequest.VALIDATION_LEVEL_MAVEN_2_0) {
             for (Exclusion exclusion : d.getExclusions()) {
                 if (request.getValidationLevel() < ModelBuilderRequest.VALIDATION_LEVEL_MAVEN_3_0) {
-                    validateCoordinateId(
+                    validateCoordinatesId(
                             prefix,
                             "exclusions.exclusion.groupId",
                             problems,
@@ -1140,7 +1140,7 @@ public class DefaultModelValidator implements ModelValidator {
                             d.getManagementKey(),
                             exclusion);
 
-                    validateCoordinateId(
+                    validateCoordinatesId(
                             prefix,
                             "exclusions.exclusion.artifactId",
                             problems,
@@ -1150,7 +1150,7 @@ public class DefaultModelValidator implements ModelValidator {
                             d.getManagementKey(),
                             exclusion);
                 } else {
-                    validateCoordinateIdWithWildcards(
+                    validateCoordinatesIdWithWildcards(
                             prefix,
                             "exclusions.exclusion.groupId",
                             problems,
@@ -1160,7 +1160,7 @@ public class DefaultModelValidator implements ModelValidator {
                             d.getManagementKey(),
                             exclusion);
 
-                    validateCoordinateIdWithWildcards(
+                    validateCoordinatesIdWithWildcards(
                             prefix,
                             "exclusions.exclusion.artifactId",
                             problems,
@@ -1314,13 +1314,13 @@ public class DefaultModelValidator implements ModelValidator {
     // Field validation
     // ----------------------------------------------------------------------
 
-    private boolean validateCoordinateId(
+    private boolean validateCoordinatesId(
             String fieldName, ModelProblemCollector problems, String id, InputLocationTracker tracker) {
-        return validateCoordinateId(EMPTY, fieldName, problems, Severity.ERROR, Version.BASE, id, null, tracker);
+        return validateCoordinatesId(EMPTY, fieldName, problems, Severity.ERROR, Version.BASE, id, null, tracker);
     }
 
     @SuppressWarnings("checkstyle:parameternumber")
-    private boolean validateCoordinateId(
+    private boolean validateCoordinatesId(
             String prefix,
             String fieldName,
             ModelProblemCollector problems,
@@ -1329,13 +1329,13 @@ public class DefaultModelValidator implements ModelValidator {
             String id,
             String sourceHint,
             InputLocationTracker tracker) {
-        if (validCoordinateIds.contains(id)) {
+        if (validCoordinatesIds.contains(id)) {
             return true;
         }
         if (!validateStringNotEmpty(prefix, fieldName, problems, severity, version, id, sourceHint, tracker)) {
             return false;
         } else {
-            if (!isValidCoordinateId(id)) {
+            if (!isValidCoordinatesId(id)) {
                 addViolation(
                         problems,
                         severity,
@@ -1346,22 +1346,22 @@ public class DefaultModelValidator implements ModelValidator {
                         tracker);
                 return false;
             }
-            validCoordinateIds.add(id);
+            validCoordinatesIds.add(id);
             return true;
         }
     }
 
-    private boolean isValidCoordinateId(String id) {
+    private boolean isValidCoordinatesId(String id) {
         for (int i = 0; i < id.length(); i++) {
             char c = id.charAt(i);
-            if (!isValidCoordinateIdCharacter(c)) {
+            if (!isValidCoordinatesIdCharacter(c)) {
                 return false;
             }
         }
         return true;
     }
 
-    private boolean isValidCoordinateIdCharacter(char c) {
+    private boolean isValidCoordinatesIdCharacter(char c) {
         return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c == '-' || c == '_' || c == '.';
     }
 
@@ -1410,7 +1410,7 @@ public class DefaultModelValidator implements ModelValidator {
     }
 
     @SuppressWarnings("checkstyle:parameternumber")
-    private boolean validateCoordinateIdWithWildcards(
+    private boolean validateCoordinatesIdWithWildcards(
             String prefix,
             String fieldName,
             ModelProblemCollector problems,
@@ -1422,7 +1422,7 @@ public class DefaultModelValidator implements ModelValidator {
         if (!validateStringNotEmpty(prefix, fieldName, problems, severity, version, id, sourceHint, tracker)) {
             return false;
         } else {
-            if (!isValidCoordinateIdWithWildCards(id)) {
+            if (!isValidCoordinatesIdWithWildCards(id)) {
                 addViolation(
                         problems,
                         severity,
@@ -1437,18 +1437,18 @@ public class DefaultModelValidator implements ModelValidator {
         }
     }
 
-    private boolean isValidCoordinateIdWithWildCards(String id) {
+    private boolean isValidCoordinatesIdWithWildCards(String id) {
         for (int i = 0; i < id.length(); i++) {
             char c = id.charAt(i);
-            if (!isValidCoordinateIdWithWildCardCharacter(c)) {
+            if (!isValidCoordinatesIdWithWildCardCharacter(c)) {
                 return false;
             }
         }
         return true;
     }
 
-    private boolean isValidCoordinateIdWithWildCardCharacter(char c) {
-        return isValidCoordinateIdCharacter(c) || c == '?' || c == '*';
+    private boolean isValidCoordinatesIdWithWildCardCharacter(char c) {
+        return isValidCoordinatesIdCharacter(c) || c == '?' || c == '*';
     }
 
     private boolean validateStringNoExpression(
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/DefaultModelResolver.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/DefaultModelResolver.java
index 18fd0f8552..d9bc16f807 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/DefaultModelResolver.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/DefaultModelResolver.java
@@ -22,8 +22,8 @@ import java.util.List;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
-import org.apache.maven.api.ArtifactCoordinate;
-import org.apache.maven.api.ResolvedArtifact;
+import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.Version;
 import org.apache.maven.api.di.Named;
@@ -48,9 +48,9 @@ public class DefaultModelResolver implements ModelResolver {
             Session session, String groupId, String artifactId, String version, Consumer<String> resolvedVersion)
             throws ModelResolverException {
         try {
-            ArtifactCoordinate coord = session.createArtifactCoordinate(groupId, artifactId, version, "pom");
-            if (coord.getVersionConstraint().getVersionRange() != null
-                    && coord.getVersionConstraint().getVersionRange().getUpperBoundary() == null) {
+            ArtifactCoordinates coords = session.createArtifactCoordinates(groupId, artifactId, version, "pom");
+            if (coords.getVersionConstraint().getVersionRange() != null
+                    && coords.getVersionConstraint().getVersionRange().getUpperBoundary() == null) {
                 // Message below is checked for in the MNG-2199 core IT.
                 throw new ModelResolverException(
                         String.format("The requested version range '%s' does not specify an upper bound", version),
@@ -58,7 +58,7 @@ public class DefaultModelResolver implements ModelResolver {
                         artifactId,
                         version);
             }
-            List<Version> versions = session.resolveVersionRange(coord);
+            List<Version> versions = session.resolveVersionRange(coords);
             if (versions.isEmpty()) {
                 throw new ModelResolverException(
                         String.format("No versions matched the requested version range '%s'", version),
@@ -71,8 +71,8 @@ public class DefaultModelResolver implements ModelResolver {
                 resolvedVersion.accept(newVersion);
             }
 
-            ResolvedArtifact resolved =
-                    session.resolveArtifact(session.createArtifactCoordinate(groupId, artifactId, newVersion, "pom"));
+            DownloadedArtifact resolved =
+                    session.resolveArtifact(session.createArtifactCoordinates(groupId, artifactId, newVersion, "pom"));
             return ModelSource.fromPath(resolved.getPath(), groupId + ":" + artifactId + ":" + newVersion);
         } catch (VersionRangeResolverException | ArtifactResolverException e) {
             throw new ModelResolverException(
diff --git a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/relocation/UserPropertiesArtifactRelocationSource.java b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/relocation/UserPropertiesArtifactRelocationSource.java
index 4493ecc5d6..65810ac24c 100644
--- a/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/relocation/UserPropertiesArtifactRelocationSource.java
+++ b/maven-api-impl/src/main/java/org/apache/maven/internal/impl/resolver/relocation/UserPropertiesArtifactRelocationSource.java
@@ -192,9 +192,9 @@ public final class UserPropertiesArtifactRelocationSource implements MavenArtifa
         }
     }
 
-    private static Artifact parseArtifact(String coord) {
+    private static Artifact parseArtifact(String coords) {
         Artifact s;
-        String[] parts = coord.split(":");
+        String[] parts = coords.split(":");
         switch (parts.length) {
             case 3:
                 s = new DefaultArtifact(parts[0], parts[1], "*", "*", parts[2]);
@@ -206,7 +206,7 @@ public final class UserPropertiesArtifactRelocationSource implements MavenArtifa
                 s = new DefaultArtifact(parts[0], parts[1], parts[2], parts[3], parts[4]);
                 break;
             default:
-                throw new IllegalArgumentException("Bad artifact coordinates " + coord
+                throw new IllegalArgumentException("Bad artifact coordinates " + coords
                         + ", expected format is <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>");
         }
         return s;
diff --git a/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/ApiRunner.java b/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/ApiRunner.java
index b66f730052..3c6c9433de 100644
--- a/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/ApiRunner.java
+++ b/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/ApiRunner.java
@@ -59,13 +59,13 @@ import org.apache.maven.di.Injector;
 import org.apache.maven.di.Key;
 import org.apache.maven.di.impl.DIException;
 import org.apache.maven.internal.impl.AbstractSession;
-import org.apache.maven.internal.impl.DefaultArtifactCoordinateFactory;
+import org.apache.maven.internal.impl.DefaultArtifactCoordinatesFactory;
 import org.apache.maven.internal.impl.DefaultArtifactDeployer;
 import org.apache.maven.internal.impl.DefaultArtifactFactory;
 import org.apache.maven.internal.impl.DefaultArtifactInstaller;
 import org.apache.maven.internal.impl.DefaultArtifactResolver;
 import org.apache.maven.internal.impl.DefaultChecksumAlgorithmService;
-import org.apache.maven.internal.impl.DefaultDependencyCoordinateFactory;
+import org.apache.maven.internal.impl.DefaultDependencyCoordinatesFactory;
 import org.apache.maven.internal.impl.DefaultDependencyResolver;
 import org.apache.maven.internal.impl.DefaultLocalRepositoryManager;
 import org.apache.maven.internal.impl.DefaultMessageBuilderFactory;
@@ -122,14 +122,14 @@ public class ApiRunner {
         Injector injector = Injector.create();
         injector.bindInstance(Injector.class, injector);
         injector.bindImplicit(ApiRunner.class);
-        injector.bindImplicit(DefaultArtifactCoordinateFactory.class);
+        injector.bindImplicit(DefaultArtifactCoordinatesFactory.class);
         injector.bindImplicit(DefaultArtifactDeployer.class);
         injector.bindImplicit(DefaultArtifactFactory.class);
         injector.bindImplicit(DefaultArtifactInstaller.class);
         injector.bindImplicit(DefaultArtifactResolver.class);
         injector.bindImplicit(DefaultChecksumAlgorithmService.class);
         injector.bindImplicit(DefaultDependencyResolver.class);
-        injector.bindImplicit(DefaultDependencyCoordinateFactory.class);
+        injector.bindImplicit(DefaultDependencyCoordinatesFactory.class);
         injector.bindImplicit(DefaultLocalRepositoryManager.class);
         injector.bindImplicit(DefaultMessageBuilderFactory.class);
         injector.bindImplicit(DefaultModelXmlFactory.class);
diff --git a/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/TestApiStandalone.java b/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/TestApiStandalone.java
index 4f93f5dca5..5eec24147c 100644
--- a/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/TestApiStandalone.java
+++ b/maven-api-impl/src/test/java/org/apache/maven/internal/impl/standalone/TestApiStandalone.java
@@ -21,9 +21,9 @@ package org.apache.maven.internal.impl.standalone;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.Node;
-import org.apache.maven.api.ResolvedArtifact;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.services.ModelBuilder;
 import org.apache.maven.api.services.ModelBuilderRequest;
@@ -49,13 +49,14 @@ class TestApiStandalone {
                 .build());
         assertNotNull(result.getEffectiveModel());
 
-        ArtifactCoordinate coord = session.createArtifactCoordinate("org.apache.maven:maven-api-core:4.0.0-alpha-13");
-        ResolvedArtifact res = session.resolveArtifact(coord);
+        ArtifactCoordinates coords =
+                session.createArtifactCoordinates("org.apache.maven:maven-api-core:4.0.0-alpha-13");
+        DownloadedArtifact res = session.resolveArtifact(coords);
         assertNotNull(res);
         assertNotNull(res.getPath());
         assertTrue(Files.exists(res.getPath()));
 
-        Node node = session.collectDependencies(session.createDependencyCoordinate(coord));
+        Node node = session.collectDependencies(session.createDependencyCoordinates(coords));
         assertNotNull(node);
         assertEquals(8, node.getChildren().size());
     }
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
index 65f9fd3999..ba1c6d708f 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/DefaultProject.java
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.maven.RepositoryUtils;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
 import org.apache.maven.api.DependencyScope;
 import org.apache.maven.api.Exclusion;
 import org.apache.maven.api.Packaging;
@@ -127,13 +127,13 @@ public class DefaultProject implements Project {
 
     @Nonnull
     @Override
-    public List<DependencyCoordinate> getDependencies() {
+    public List<DependencyCoordinates> getDependencies() {
         return new MappedList<>(getModel().getDependencies(), this::toDependency);
     }
 
     @Nonnull
     @Override
-    public List<DependencyCoordinate> getManagedDependencies() {
+    public List<DependencyCoordinates> getManagedDependencies() {
         DependencyManagement dependencyManagement = getModel().getDependencyManagement();
         if (dependencyManagement != null) {
             return new MappedList<>(dependencyManagement.getDependencies(), this::toDependency);
@@ -163,8 +163,8 @@ public class DefaultProject implements Project {
     }
 
     @Nonnull
-    private DependencyCoordinate toDependency(org.apache.maven.api.model.Dependency dependency) {
-        return new DependencyCoordinate() {
+    private DependencyCoordinates toDependency(org.apache.maven.api.model.Dependency dependency) {
+        return new DependencyCoordinates() {
             @Override
             public String getGroupId() {
                 return dependency.getGroupId();
diff --git a/maven-core/src/main/java/org/apache/maven/internal/impl/Lifecycles.java b/maven-core/src/main/java/org/apache/maven/internal/impl/Lifecycles.java
index 42da23b290..b2e356f6ad 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/impl/Lifecycles.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/Lifecycles.java
@@ -35,8 +35,8 @@ public class Lifecycles {
         return new DefaultPhase(name, Collections.singletonList(plugin), Collections.emptyList());
     }
 
-    static Plugin plugin(String coord, String phase) {
-        String[] c = coord.split(":");
+    static Plugin plugin(String coords, String phase) {
+        String[] c = coords.split(":");
         return Plugin.newBuilder()
                 .groupId(c[0])
                 .artifactId(c[1])
diff --git a/maven-core/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject b/maven-core/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject
index dbbc28f99d..18acc039de 100644
--- a/maven-core/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject
+++ b/maven-core/src/main/resources/META-INF/maven/org.apache.maven.api.di.Inject
@@ -5,13 +5,13 @@ org.apache.maven.api.spi.ModelParser
 org.apache.maven.api.spi.PackagingProvider
 org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory
 org.apache.maven.internal.aether.LegacyRepositorySystemSessionExtender
-org.apache.maven.internal.impl.DefaultArtifactCoordinateFactory
+org.apache.maven.internal.impl.DefaultArtifactCoordinatesFactory
 org.apache.maven.internal.impl.DefaultArtifactDeployer
 org.apache.maven.internal.impl.DefaultArtifactFactory
 org.apache.maven.internal.impl.DefaultArtifactInstaller
 org.apache.maven.internal.impl.DefaultArtifactResolver
 org.apache.maven.internal.impl.DefaultChecksumAlgorithmService
-org.apache.maven.internal.impl.DefaultDependencyCoordinateFactory
+org.apache.maven.internal.impl.DefaultDependencyCoordinatesFactory
 org.apache.maven.internal.impl.DefaultDependencyResolver
 org.apache.maven.internal.impl.DefaultLocalRepositoryManager
 org.apache.maven.internal.impl.DefaultMessageBuilderFactory
diff --git a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java
index bc8c96f7b2..b91e9847c8 100644
--- a/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java
+++ b/maven-core/src/test/java/org/apache/maven/internal/impl/TestApi.java
@@ -32,15 +32,15 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 
 import org.apache.maven.api.Artifact;
-import org.apache.maven.api.ArtifactCoordinate;
+import org.apache.maven.api.ArtifactCoordinates;
 import org.apache.maven.api.Dependency;
-import org.apache.maven.api.DependencyCoordinate;
+import org.apache.maven.api.DependencyCoordinates;
+import org.apache.maven.api.DownloadedArtifact;
 import org.apache.maven.api.JavaPathType;
 import org.apache.maven.api.Node;
 import org.apache.maven.api.PathScope;
 import org.apache.maven.api.PathType;
 import org.apache.maven.api.Project;
-import org.apache.maven.api.ResolvedArtifact;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.services.DependencyResolver;
 import org.apache.maven.api.services.DependencyResolverResult;
@@ -153,10 +153,10 @@ class TestApi {
 
     @Test
     void testCreateAndResolveArtifact() {
-        ArtifactCoordinate coord =
-                session.createArtifactCoordinate("org.codehaus.plexus", "plexus-utils", "1.4.5", "pom");
+        ArtifactCoordinates coords =
+                session.createArtifactCoordinates("org.codehaus.plexus", "plexus-utils", "1.4.5", "pom");
 
-        ResolvedArtifact resolved = session.resolveArtifact(coord);
+        DownloadedArtifact resolved = session.resolveArtifact(coords);
         assertNotNull(resolved);
         assertNotNull(resolved.getPath());
         Optional<Path> op = session.getArtifactPath(resolved);
@@ -181,11 +181,11 @@ class TestApi {
     }
 
     @Test
-    void testResolveArtifactCoordinateDependencies() {
-        DependencyCoordinate coord = session.createDependencyCoordinate(
-                session.createArtifactCoordinate("org.apache.maven.core.test", "test-extension", "1", "jar"));
+    void testResolveArtifactCoordinatesDependencies() {
+        DependencyCoordinates coords = session.createDependencyCoordinates(
+                session.createArtifactCoordinates("org.apache.maven.core.test", "test-extension", "1", "jar"));
 
-        List<Path> paths = session.resolveDependencies(coord);
+        List<Path> paths = session.resolveDependencies(coords);
 
         assertNotNull(paths);
         assertEquals(10, paths.size());
@@ -193,7 +193,7 @@ class TestApi {
 
         // JUnit has an "Automatic-Module-Name", so it appears on the module path.
         Map<PathType, List<Path>> dispatched = session.resolveDependencies(
-                coord, PathScope.TEST_COMPILE, Arrays.asList(JavaPathType.CLASSES, JavaPathType.MODULES));
+                coords, PathScope.TEST_COMPILE, Arrays.asList(JavaPathType.CLASSES, JavaPathType.MODULES));
         List<Path> classes = dispatched.get(JavaPathType.CLASSES);
         List<Path> modules = dispatched.get(JavaPathType.MODULES);
         List<Path> unresolved = dispatched.get(PathType.UNRESOLVED);
@@ -208,7 +208,7 @@ class TestApi {
         assertTrue(paths.containsAll(modules));
 
         // If caller wants only a classpath, JUnit shall move there.
-        dispatched = session.resolveDependencies(coord, PathScope.TEST_COMPILE, Arrays.asList(JavaPathType.CLASSES));
+        dispatched = session.resolveDependencies(coords, PathScope.TEST_COMPILE, Arrays.asList(JavaPathType.CLASSES));
         classes = dispatched.get(JavaPathType.CLASSES);
         modules = dispatched.get(JavaPathType.MODULES);
         unresolved = dispatched.get(PathType.UNRESOLVED);
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
index c8fce473c3..705ac4f03f 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/internal/BootstrapCoreExtensionManager.java
@@ -33,7 +33,7 @@ import org.apache.maven.RepositoryUtils;
 import org.apache.maven.api.Service;
 import org.apache.maven.api.Session;
 import org.apache.maven.api.model.Plugin;
-import org.apache.maven.api.services.ArtifactCoordinateFactory;
+import org.apache.maven.api.services.ArtifactCoordinatesFactory;
 import org.apache.maven.api.services.ArtifactManager;
 import org.apache.maven.api.services.ArtifactResolver;
 import org.apache.maven.api.services.RepositoryFactory;
@@ -45,7 +45,7 @@ import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.extension.internal.CoreExports;
 import org.apache.maven.extension.internal.CoreExtensionEntry;
-import org.apache.maven.internal.impl.DefaultArtifactCoordinateFactory;
+import org.apache.maven.internal.impl.DefaultArtifactCoordinatesFactory;
 import org.apache.maven.internal.impl.DefaultArtifactManager;
 import org.apache.maven.internal.impl.DefaultArtifactResolver;
 import org.apache.maven.internal.impl.DefaultModelVersionParser;
@@ -254,8 +254,8 @@ public class BootstrapCoreExtensionManager {
 
         @Override
         public <T extends Service> T getService(Class<T> clazz) throws NoSuchElementException {
-            if (clazz == ArtifactCoordinateFactory.class) {
-                return (T) new DefaultArtifactCoordinateFactory();
+            if (clazz == ArtifactCoordinatesFactory.class) {
+                return (T) new DefaultArtifactCoordinatesFactory();
             } else if (clazz == VersionParser.class) {
                 return (T) new DefaultVersionParser(new DefaultModelVersionParser(new GenericVersionScheme()));
             } else if (clazz == VersionRangeResolver.class) {
diff --git a/maven-model/src/test/java/org/apache/maven/model/ModelTest.java b/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
index 76a1e82822..2f872a7bf5 100644
--- a/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
+++ b/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
@@ -21,10 +21,9 @@ package org.apache.maven.model;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Tests {@code Model}.
@@ -52,7 +51,7 @@ class ModelTest {
 
     @Test
     void testEqualsNullSafe() {
-        assertFalse(new Model().equals(null));
+        assertNotEquals(null, new Model());
 
         new Model().equals(new Model());
     }
@@ -60,7 +59,7 @@ class ModelTest {
     @Test
     void testEqualsIdentity() {
         Model thing = new Model();
-        assertTrue(thing.equals(thing));
+        assertEquals(thing, thing);
     }
 
     @Test
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/relocation/UserPropertiesArtifactRelocationSource.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/relocation/UserPropertiesArtifactRelocationSource.java
index 53afe3703b..233494145d 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/relocation/UserPropertiesArtifactRelocationSource.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/relocation/UserPropertiesArtifactRelocationSource.java
@@ -193,9 +193,9 @@ public final class UserPropertiesArtifactRelocationSource implements MavenArtifa
         }
     }
 
-    private static Artifact parseArtifact(String coord) {
+    private static Artifact parseArtifact(String coords) {
         Artifact s;
-        String[] parts = coord.split(":");
+        String[] parts = coords.split(":");
         switch (parts.length) {
             case 3:
                 s = new DefaultArtifact(parts[0], parts[1], "*", "*", parts[2]);
@@ -207,7 +207,7 @@ public final class UserPropertiesArtifactRelocationSource implements MavenArtifa
                 s = new DefaultArtifact(parts[0], parts[1], parts[2], parts[3], parts[4]);
                 break;
             default:
-                throw new IllegalArgumentException("Bad artifact coordinates " + coord
+                throw new IllegalArgumentException("Bad artifact coordinates " + coords
                         + ", expected format is <groupId>:<artifactId>[:<extension>[:<classifier>]]:<version>");
         }
         return s;
diff --git a/pom.xml b/pom.xml
index 9f21e28d35..3d65c33c4d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -738,7 +738,7 @@ under the License.</licenseText>
             <charter>The mission of the Apache Maven project is to create and maintain software
             libraries that provide a widely-used project build tool, targeting mainly Java
             development. Apache Maven promotes the use of dependencies via a
-            standardized coordinate system, binary plugins, and a standard build
+            standardized coordinates system, binary plugins, and a standard build
             lifecycle.</charter>
           </asfExtOptions>
         </configuration>