 -----
 Comparison: Dependency vs Artifact vs MavenProject
 -----
 Robert Scholte
 -----
 2015-12-28
 -----

 ~~ Licensed to the Apache Software Foundation (ASF) under one
 ~~ or more contributor license agreements.  See the NOTICE file
 ~~ distributed with this work for additional information
 ~~ regarding copyright ownership.  The ASF licenses this file
 ~~ to you under the Apache License, Version 2.0 (the
 ~~ "License"); you may not use this file except in compliance
 ~~ with the License.  You may obtain a copy of the License at
 ~~
 ~~   http://www.apache.org/licenses/LICENSE-2.0
 ~~
 ~~ Unless required by applicable law or agreed to in writing,
 ~~ software distributed under the License is distributed on an
 ~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 ~~ KIND, either express or implied.  See the License for the
 ~~ specific language governing permissions and limitations
 ~~ under the License.

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html

Comparison: Dependency vs Artifact vs MavenProject

  Here's a small matrix which should help you choosing the right instance.

  In general:

  * an Artifact holds a file mapped on a certain coordinate (GAV + classifier + extension),

  * a {{{/ref/current/maven-model/maven.html#class_dependency}Dependency}} contains an artifact and has transitive information,

  * a MavenProject holds a pom-file, an optional main file derived from the packaging, and can have attached files (= with classifier and extension), all using the same GAV.

  []

*--------------------+-------------+----------------+---------------+
||                   || Dependency || Artifact      || MavenProject ||
*--------------------+-------------+----------------+---------------+
| Has dependencies   | yes         | no             | yes           |
*--------------------+-------------+----------------+---------------+
| filetype reference | {{{/ref/current/maven-core/artifact-handlers.html}type}} | file extension | packaging     |
*--------------------+-------------+----------------+---------------+
| version ranges     | yes         | no             | no            |
*--------------------+-------------+----------------+---------------+
| scope              | yes         | no             | no            |
*--------------------+-------------+----------------+---------------+
| attached artifacts | no          | no             | yes           |
*--------------------+-------------+----------------+---------------+

  This implies the following:

  * From dependency to artifact is possible, since you can map a type to an extension (see {{{/ref/current/maven-core/artifact-handlers.html}default dependency types}}).
    However, it is not possible to go from artifact back to dependency, there are several types which have jar as file extension for example.

  * There's no such thing as transitive artifacts. Filtering during resolution is based on DependencyFilters,
    ArtifactFilters can only be applied afterwards, hence are less powerful.

  Notice that for historical reasons, Maven internal {{{/ref/current/maven-artifact/apidocs/org/apache/maven/artifact/Artifact.html}Artifact API}}
  mixes dependency and artifact concepts.
