You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by eo...@apache.org on 2020/03/14 14:04:02 UTC

[maven-studies] 01/02: Import Maven 3.7.0-SNAPSHOT

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

eolivelli pushed a commit to branch maven-metrics
in repository https://gitbox.apache.org/repos/asf/maven-studies.git

commit 739b210f7ac28e82d31672c45ec87cfc44fa9e9d
Author: Enrico Olivelli <en...@diennea.com>
AuthorDate: Sat Mar 14 15:03:00 2020 +0100

    Import Maven 3.7.0-SNAPSHOT
---
 CONTRIBUTING.md                                    |   92 +
 Jenkinsfile                                        |  169 +
 LICENSE                                            |  202 +
 NOTICE                                             |    5 +
 README.md                                          |   88 +
 apache-maven/README.txt                            |   79 +
 apache-maven/pom.xml                               |  324 ++
 apache-maven/src/bin/.gitattributes                |    3 +
 apache-maven/src/bin/m2.conf                       |    8 +
 apache-maven/src/bin/mvn                           |  199 +
 apache-maven/src/bin/mvn.cmd                       |  201 +
 apache-maven/src/bin/mvnDebug                      |   34 +
 apache-maven/src/bin/mvnDebug.cmd                  |   33 +
 apache-maven/src/bin/mvnyjp                        |   35 +
 .../src/conf/logging/simplelogger.properties       |   32 +
 apache-maven/src/conf/settings.xml                 |  257 ++
 apache-maven/src/conf/toolchains.xml               |  103 +
 apache-maven/src/lib/ext/README.txt                |    2 +
 apache-maven/src/lib/jansi-native/README.txt       |    7 +
 .../main/appended-resources/META-INF/LICENSE.vm    |   84 +
 .../src/main/appended-resources/META-INF/NOTICE.vm |  116 +
 .../appended-resources/licenses/Apache-2.0.txt     |  202 +
 .../main/appended-resources/licenses/CDDL-1.0.txt  |  384 ++
 .../main/appended-resources/licenses/EPL-1.0.txt   |  210 +
 .../licenses/MIT-jsoup-1.12.1.txt                  |   23 +
 .../licenses/MIT-slf4j-api-1.7.29.txt              |   23 +
 apache-maven/src/main/assembly/bin.xml             |   30 +
 apache-maven/src/main/assembly/component.xml       |  104 +
 apache-maven/src/main/assembly/dir.xml             |   30 +
 apache-maven/src/main/assembly/src.xml             |   58 +
 apache-maven/src/site/site.xml                     |   31 +
 .../apache/maven/settings/GlobalSettingsTest.java  |   54 +
 deploySite.sh                                      |   23 +
 doap_Maven.rdf                                     |  301 ++
 maven-artifact/pom.xml                             |   73 +
 .../java/org/apache/maven/artifact/Artifact.java   |  161 +
 .../org/apache/maven/artifact/ArtifactUtils.java   |  216 ++
 .../org/apache/maven/artifact/DefaultArtifact.java |  588 +++
 .../maven/artifact/InvalidArtifactRTException.java |  100 +
 .../maven/artifact/handler/ArtifactHandler.java    |   58 +
 .../maven/artifact/metadata/ArtifactMetadata.java  |   30 +
 .../artifact/repository/ArtifactRepository.java    |  134 +
 .../repository/ArtifactRepositoryPolicy.java       |  223 ++
 .../maven/artifact/repository/Authentication.java  |  129 +
 .../layout/ArtifactRepositoryLayout.java           |   38 +
 .../layout/ArtifactRepositoryLayout2.java          |   34 +
 .../metadata/RepositoryMetadataStoreException.java |   40 +
 .../AbstractArtifactResolutionException.java       |  347 ++
 .../resolver/ArtifactNotFoundException.java        |   85 +
 .../resolver/ArtifactResolutionException.java      |   68 +
 .../resolver/CyclicDependencyException.java        |   45 +
 .../MultipleArtifactsNotFoundException.java        |  123 +
 .../artifact/resolver/filter/ArtifactFilter.java   |   30 +
 .../maven/artifact/versioning/ArtifactVersion.java |   42 +
 .../artifact/versioning/ComparableVersion.java     |  795 ++++
 .../versioning/DefaultArtifactVersion.java         |  251 ++
 .../InvalidVersionSpecificationException.java      |   34 +
 .../OverConstrainedVersionException.java           |   49 +
 .../maven/artifact/versioning/Restriction.java     |  195 +
 .../maven/artifact/versioning/VersionRange.java    |  607 +++
 .../java/org/apache/maven/repository/Proxy.java    |  200 +
 .../legacy/metadata/ArtifactMetadata.java          |   83 +
 maven-artifact/src/site/apt/index.apt              |   47 +
 maven-artifact/src/site/site.xml                   |   38 +
 .../apache/maven/artifact/ArtifactUtilsTest.java   |   81 +
 .../apache/maven/artifact/DefaultArtifactTest.java |  140 +
 .../artifact/handler/ArtifactHandlerMock.java      |  100 +
 .../artifact/versioning/ComparableVersionIT.java   |   93 +
 .../artifact/versioning/ComparableVersionTest.java |  325 ++
 .../versioning/DefaultArtifactVersionTest.java     |  223 ++
 .../artifact/versioning/VersionRangeTest.java      |  749 ++++
 maven-builder-support/pom.xml                      |   36 +
 .../org/apache/maven/building/DefaultProblem.java  |  161 +
 .../maven/building/DefaultProblemCollector.java    |   64 +
 .../java/org/apache/maven/building/FileSource.java |  107 +
 .../java/org/apache/maven/building/Problem.java    |  101 +
 .../apache/maven/building/ProblemCollector.java    |   59 +
 .../maven/building/ProblemCollectorFactory.java    |   43 +
 .../java/org/apache/maven/building/Source.java     |   49 +
 .../org/apache/maven/building/StringSource.java    |  120 +
 .../java/org/apache/maven/building/UrlSource.java  |  107 +
 maven-builder-support/src/site/site.xml            |   38 +
 .../building/DefaultProblemCollectorTest.java      |   76 +
 .../apache/maven/building/DefaultProblemTest.java  |  136 +
 .../org/apache/maven/building/FileSourceTest.java  |   79 +
 .../building/ProblemCollectorFactoryTest.java      |   45 +
 .../apache/maven/building/StringSourceTest.java    |   64 +
 .../org/apache/maven/building/UrlSourceTest.java   |   71 +
 .../src/test/resources/source.txt                  |    1 +
 maven-compat/pom.xml                               |  139 +
 .../apache/maven/artifact/ArtifactScopeEnum.java   |  131 +
 .../org/apache/maven/artifact/ArtifactStatus.java  |  124 +
 .../artifact/UnknownRepositoryLayoutException.java |   54 +
 .../maven/artifact/deployer/ArtifactDeployer.java  |   64 +
 .../deployer/ArtifactDeploymentException.java      |   43 +
 .../artifact/deployer/DefaultArtifactDeployer.java |  164 +
 .../installer/ArtifactInstallationException.java   |   43 +
 .../artifact/installer/ArtifactInstaller.java      |   60 +
 .../installer/DefaultArtifactInstaller.java        |  135 +
 .../artifact/manager/DefaultWagonManager.java      |  185 +
 .../manager/WagonConfigurationException.java       |   38 +
 .../maven/artifact/manager/WagonManager.java       |   56 +
 .../repository/ArtifactRepositoryFactory.java      |   59 +
 .../repository/DefaultArtifactRepository.java      |  267 ++
 .../DefaultArtifactRepositoryFactory.java          |  126 +
 .../repository/layout/FlatRepositoryLayout.java    |   91 +
 .../metadata/DefaultRepositoryMetadataManager.java |  536 +++
 .../metadata/GroupRepositoryMetadata.java          |  119 +
 .../repository/metadata/MetadataBridge.java        |  172 +
 .../repository/metadata/MetadataUtils.java         |   39 +
 .../metadata/RepositoryMetadataReadException.java  |   40 +
 .../SnapshotArtifactRepositoryMetadata.java        |   98 +
 .../maven/artifact/resolver/ArtifactCollector.java |   46 +
 .../maven/artifact/resolver/ArtifactResolver.java  |  116 +
 .../artifact/resolver/DebugResolutionListener.java |  168 +
 .../resolver/DefaultArtifactCollector.java         |   34 +
 .../artifact/resolver/DefaultArtifactResolver.java |  660 ++++
 .../resolver/ResolutionListenerForDepMgmt.java     |   43 +
 .../artifact/resolver/UnresolvedArtifacts.java     |   66 +
 .../resolver/WarningResolutionListener.java        |   90 +
 .../resolver/filter/InversionArtifactFilter.java   |   68 +
 .../artifact/resolver/filter/OrArtifactFilter.java |   93 +
 .../resolver/filter/TypeArtifactFilter.java        |   66 +
 .../artifact/versioning/ManagedVersionMap.java     |   59 +
 .../maven/execution/DefaultRuntimeInformation.java |   64 +
 .../apache/maven/execution/RuntimeInformation.java |   34 +
 .../profiles/DefaultMavenProfilesBuilder.java      |   90 +
 .../maven/profiles/DefaultProfileManager.java      |  238 ++
 .../maven/profiles/MavenProfilesBuilder.java       |   37 +
 .../org/apache/maven/profiles/ProfileManager.java  |   61 +
 .../maven/profiles/ProfilesConversionUtils.java    |  154 +
 .../activation/DetectedProfileActivator.java       |   38 +
 .../profiles/activation/FileProfileActivator.java  |  112 +
 .../activation/JdkPrefixProfileActivator.java      |  100 +
 .../OperatingSystemProfileActivator.java           |  164 +
 .../activation/ProfileActivationException.java     |   42 +
 .../profiles/activation/ProfileActivator.java      |   38 +
 .../activation/SystemPropertyProfileActivator.java |  117 +
 .../maven/project/DefaultMavenProjectBuilder.java  |  324 ++
 .../DefaultProjectBuilderConfiguration.java        |  110 +
 .../project/InvalidProjectModelException.java      |   77 +
 .../apache/maven/project/MavenProjectBuilder.java  |   77 +
 .../project/MissingRepositoryElementException.java |   40 +
 .../java/org/apache/maven/project/ModelUtils.java  |  364 ++
 .../maven/project/ProjectBuilderConfiguration.java |   55 +
 .../org/apache/maven/project/ProjectUtils.java     |  118 +
 .../DefaultModelInheritanceAssembler.java          |  747 ++++
 .../inheritance/ModelInheritanceAssembler.java     |   41 +
 .../AbstractStringBasedModelInterpolator.java      |  406 ++
 .../interpolation/BuildTimestampValueSource.java   |   63 +
 .../interpolation/ModelInterpolationException.java |   70 +
 .../project/interpolation/ModelInterpolator.java   |   64 +
 .../PathTranslatingPostProcessor.java              |   64 +
 .../interpolation/RegexBasedModelInterpolator.java |   58 +
 .../StringSearchModelInterpolator.java             |  408 ++
 .../maven/project/path/DefaultPathTranslator.java  |  260 ++
 .../project/validation/DefaultModelValidator.java  |   76 +
 .../project/validation/ModelValidationResult.java  |   95 +
 .../maven/project/validation/ModelValidator.java   |   37 +
 .../maven/reporting/MavenReportException.java      |   39 +
 .../maven/repository/DefaultMirrorSelector.java    |  208 +
 .../maven/repository/MavenArtifactMetadata.java    |  119 +
 .../org/apache/maven/repository/MetadataGraph.java |   91 +
 .../apache/maven/repository/MetadataGraphNode.java |  101 +
 .../repository/MetadataResolutionRequest.java      |  220 ++
 .../maven/repository/MetadataResolutionResult.java |  363 ++
 .../apache/maven/repository/MirrorSelector.java    |   44 +
 .../repository/UserLocalArtifactRepository.java    |   77 +
 .../maven/repository/VersionNotFoundException.java |   83 +
 .../repository/legacy/ChecksumFailedException.java |   42 +
 .../legacy/DefaultUpdateCheckManager.java          |  428 +++
 .../repository/legacy/DefaultWagonManager.java     |  851 +++++
 .../repository/legacy/LegacyRepositorySystem.java  |  913 +++++
 .../maven/repository/legacy/MavenArtifact.java     |   96 +
 .../repository/legacy/TransferListenerAdapter.java |  190 +
 .../repository/legacy/UpdateCheckManager.java      |   44 +
 .../legacy/WagonConfigurationException.java        |   65 +
 .../maven/repository/legacy/WagonManager.java      |   84 +
 .../repository/ArtifactRepositoryFactory.java      |   58 +
 .../DefaultArtifactRepositoryFactory.java          |  144 +
 .../resolver/DefaultLegacyArtifactCollector.java   |  818 ++++
 .../legacy/resolver/LegacyArtifactCollector.java   |   66 +
 .../legacy/resolver/conflict/ConflictResolver.java |   44 +
 .../resolver/conflict/ConflictResolverFactory.java |   48 +
 .../ConflictResolverNotFoundException.java         |   47 +
 .../resolver/conflict/DefaultConflictResolver.java |   36 +
 .../conflict/DefaultConflictResolverFactory.java   |   80 +
 .../conflict/FarthestConflictResolver.java         |   47 +
 .../resolver/conflict/NearestConflictResolver.java |   48 +
 .../resolver/conflict/NewestConflictResolver.java  |   62 +
 .../resolver/conflict/OldestConflictResolver.java  |   62 +
 .../transform/AbstractVersionTransformation.java   |  135 +
 .../resolver/transform/ArtifactTransformation.java |   86 +
 .../transform/ArtifactTransformationManager.java   |   84 +
 .../DefaultArtifactTransformationManager.java      |   86 +
 .../transform/LatestArtifactTransformation.java    |   77 +
 .../transform/ReleaseArtifactTransformation.java   |  100 +
 .../resolver/transform/SnapshotTransformation.java |  173 +
 .../repository/metadata/ArtifactMetadata.java      |  344 ++
 .../repository/metadata/ClasspathContainer.java    |  144 +
 .../metadata/ClasspathTransformation.java          |   46 +
 .../metadata/DefaultClasspathTransformation.java   |  173 +
 .../DefaultGraphConflictResolutionPolicy.java      |   73 +
 .../metadata/DefaultGraphConflictResolver.java     |  249 ++
 .../metadata/GraphConflictResolutionException.java |   51 +
 .../metadata/GraphConflictResolutionPolicy.java    |   35 +
 .../repository/metadata/GraphConflictResolver.java |   48 +
 .../maven/repository/metadata/MetadataGraph.java   |  514 +++
 .../repository/metadata/MetadataGraphEdge.java     |  191 +
 .../MetadataGraphTransformationException.java      |   50 +
 .../repository/metadata/MetadataGraphVertex.java   |  216 ++
 .../repository/metadata/MetadataResolution.java    |   71 +
 .../metadata/MetadataResolutionException.java      |   52 +
 .../metadata/MetadataResolutionRequest.java        |   79 +
 .../MetadataResolutionRequestTypeEnum.java         |   48 +
 .../metadata/MetadataResolutionResult.java         |  168 +
 .../metadata/MetadataRetrievalException.java       |   59 +
 .../maven/repository/metadata/MetadataSource.java  |   39 +
 .../repository/metadata/MetadataTreeNode.java      |  148 +
 .../plugin/ExpressionDocumentationException.java   |   40 +
 .../usability/plugin/ExpressionDocumenter.java     |  176 +
 maven-compat/src/main/mdo/paramdoc.mdo             |  154 +
 maven-compat/src/main/mdo/profiles.mdo             |  398 ++
 .../maven/plugin-expressions/project.paramdoc.xml  |  172 +
 .../maven/plugin-expressions/rootless.paramdoc.xml |   48 +
 .../maven/plugin-expressions/settings.paramdoc.xml |   53 +
 .../src/main/resources/META-INF/maven/plugin.xml   |  218 ++
 maven-compat/src/site/apt/index.apt                |   32 +
 maven-compat/src/site/site.xml                     |   38 +
 .../AbstractArtifactComponentTestCase.java         |  374 ++
 .../artifact/deployer/ArtifactDeployerTest.java    |   67 +
 .../deployer/SimpleArtifactMetadataSource.java     |   66 +
 .../factory/DefaultArtifactFactoryTest.java        |   49 +
 .../artifact/installer/ArtifactInstallerTest.java  |   61 +
 .../artifact/metadata/TestMetadataSource.java      |  102 +
 .../repository/MavenArtifactRepositoryTest.java    |   59 +
 .../resolver/ArtifactResolutionExceptionTest.java  |   64 +
 .../artifact/resolver/ArtifactResolverTest.java    |  282 ++
 .../resolver/DefaultArtifactResolverTest.java      |  111 +
 .../maven/artifact/resolver/TestFileWagon.java     |   94 +
 .../artifact/resolver/TestTransferListener.java    |   43 +
 .../resolver/filter/AndArtifactFilterTest.java     |   54 +
 .../resolver/filter/FilterHashEqualsTest.java      |   50 +
 .../resolver/filter/OrArtifactFilterTest.java      |   54 +
 .../resolver/filter/ScopeArtifactFilterTest.java   |   96 +
 .../maven/artifact/testutils/TestFileManager.java  |  215 ++
 .../transform/TransformationManagerTest.java       |   46 +
 .../manager/DefaultProfileManagerTest.java         |  236 ++
 .../project/AbstractMavenProjectTestCase.java      |  185 +
 .../maven/project/ClasspathArtifactResolver.java   |   89 +
 .../maven/project/EmptyLifecycleExecutor.java      |  110 +
 .../project/EmptyLifecyclePluginAnalyzer.java      |   78 +
 .../project/LegacyLocalRepositoryManager.java      |  192 +
 .../org/apache/maven/project/ModelUtilsTest.java   |  619 +++
 .../apache/maven/project/ProjectClasspathTest.java |  148 +
 .../apache/maven/project/TestArtifactResolver.java |   30 +
 .../maven/project/TestMavenRepositorySystem.java   |   30 +
 .../apache/maven/project/TestProjectBuilder.java   |   68 +
 .../AbstractProjectInheritanceTestCase.java        |   57 +
 .../inheritance/t00/ProjectInheritanceTest.java    |   92 +
 .../inheritance/t01/ProjectInheritanceTest.java    |   92 +
 .../inheritance/t02/ProjectInheritanceTest.java    |  167 +
 .../inheritance/t03/ProjectInheritanceTest.java    |   68 +
 .../inheritance/t04/ProjectInheritanceTest.java    |   85 +
 .../inheritance/t05/ProjectInheritanceTest.java    |   78 +
 .../inheritance/t06/ProjectInheritanceTest.java    |   80 +
 .../inheritance/t07/ProjectInheritanceTest.java    |   81 +
 .../inheritance/t08/ProjectInheritanceTest.java    |   81 +
 .../inheritance/t09/ProjectInheritanceTest.java    |  119 +
 .../inheritance/t10/ProjectInheritanceTest.java    |   94 +
 .../inheritance/t11/ProjectInheritanceTest.java    |   64 +
 .../inheritance/t12/ProjectInheritanceTest.java    |   65 +
 .../inheritance/t12scm/ProjectInheritanceTest.java |  125 +
 .../project/path/DefaultPathTranslatorTest.java    |   58 +
 .../repository/DefaultMirrorSelectorTest.java      |   38 +
 .../maven/repository/LegacyRepositoryLayout.java   |   89 +
 .../repository/LegacyRepositorySystemTest.java     |  207 +
 .../maven/repository/MirrorProcessorTest.java      |  259 ++
 .../legacy/DefaultUpdateCheckManagerTest.java      |  240 ++
 .../repository/legacy/DefaultWagonManagerTest.java |  422 ++
 .../legacy/LegacyRepositorySystemTest.java         |   88 +
 .../maven/repository/legacy/PerLookupWagon.java    |   38 +
 .../maven/repository/legacy/StringWagon.java       |  100 +
 .../org/apache/maven/repository/legacy/WagonA.java |   39 +
 .../org/apache/maven/repository/legacy/WagonB.java |   39 +
 .../org/apache/maven/repository/legacy/WagonC.java |   39 +
 .../apache/maven/repository/legacy/WagonMock.java  |   50 +
 .../resolver/DefaultArtifactCollectorTest.java     |  977 +++++
 .../conflict/AbstractConflictResolverTest.java     |  143 +
 .../conflict/FarthestConflictResolverTest.java     |  104 +
 .../conflict/NearestConflictResolverTest.java      |  104 +
 .../conflict/NewestConflictResolverTest.java       |  104 +
 .../conflict/OldestConflictResolverTest.java       |  105 +
 .../DefaultClasspathTransformationTest.java        |  120 +
 .../DefaultGraphConflictResolutionPolicyTest.java  |   59 +
 .../metadata/DefaultGraphConflictResolverTest.java |  153 +
 .../repository/metadata/TestMetadataSource.java    |   99 +
 .../org/apache/maven/its/a/0.1/a-0.1.jar           |  Bin 0 -> 1898 bytes
 .../org/apache/maven/its/a/0.1/a-0.1.pom           |   41 +
 .../org/apache/maven/its/a/maven-metadata.xml      |   12 +
 .../org/apache/maven/its/b/0.1/b-0.1.jar           |  Bin 0 -> 1936 bytes
 .../org/apache/maven/its/b/0.1/b-0.1.pom           |   49 +
 .../org/apache/maven/its/b/maven-metadata.xml      |   12 +
 .../test/repository-system/maven-core-2.1.0.jar    |    0
 .../resources/artifact-install/artifact-1.0.jar    |    1 +
 .../inheritance-repo/t00/maven/poms/p0-1.0.pom     |   11 +
 .../inheritance-repo/t00/maven/poms/p1-1.0.pom     |   16 +
 .../inheritance-repo/t00/maven/poms/p2-1.0.pom     |   18 +
 .../inheritance-repo/t00/maven/poms/p3-1.0.pom     |   14 +
 .../inheritance-repo/t00/maven/poms/p4-1.0.pom     |   13 +
 .../inheritance-repo/t01/maven.t01/poms/p0-1.0.pom |   11 +
 .../inheritance-repo/t01/maven.t01/poms/p1-1.0.pom |   16 +
 .../inheritance-repo/t01/maven.t01/poms/p2-1.0.pom |   16 +
 .../inheritance-repo/t01/maven.t01/poms/p3-1.0.pom |   16 +
 .../inheritance-repo/t01/maven.t01/poms/p4-1.0.pom |   16 +
 .../inheritance-repo/t02/p0/p1/p2/p3/p4/p5/pom.xml |   32 +
 .../inheritance-repo/t02/p0/p1/p2/p3/p4/pom.xml    |   32 +
 .../inheritance-repo/t02/p0/p1/p2/p3/pom.xml       |   33 +
 .../inheritance-repo/t02/p0/p1/p2/pom.xml          |   37 +
 .../resources/inheritance-repo/t02/p0/p1/pom.xml   |   51 +
 .../test/resources/inheritance-repo/t02/p0/pom.xml |   30 +
 .../resources/inheritance-repo/t03/p0/p1/pom.xml   |   45 +
 .../test/resources/inheritance-repo/t03/p0/pom.xml |   30 +
 .../t04/maven-test/jars/t04-a-1.0.jar              |    1 +
 .../t04/maven-test/jars/t04-b-1.0.jar              |    1 +
 .../t04/maven-test/jars/t04-b-2.0.jar              |    1 +
 .../t04/maven-test/jars/t04-c-1.0.jar              |    1 +
 .../t04/maven-test/jars/t04-c-2.0.jar              |    1 +
 .../t04/maven-test/poms/t04-a-1.0.pom              |   21 +
 .../t04/maven-test/poms/t04-b-1.0.pom              |    7 +
 .../t04/maven-test/poms/t04-b-2.0.pom              |    7 +
 .../t04/maven-test/poms/t04-c-1.0.pom              |    7 +
 .../t04/maven-test/poms/t04-c-2.0.pom              |    7 +
 .../resources/inheritance-repo/t04/p0/p1/pom.xml   |   41 +
 .../test/resources/inheritance-repo/t04/p0/pom.xml |   37 +
 .../t05/maven-test/jars/t05-a-1.0.jar              |    1 +
 .../t05/maven-test/jars/t05-a-2.0.jar              |    1 +
 .../t05/maven-test/jars/t05-b-1.0.jar              |    1 +
 .../t05/maven-test/jars/t05-b-1.1.jar              |    1 +
 .../t05/maven-test/jars/t05-b-2.0.jar              |    1 +
 .../t05/maven-test/jars/t05-c-1.0.jar              |    1 +
 .../t05/maven-test/jars/t05-d-1.0.jar              |    1 +
 .../t05/maven-test/jars/t05-d-1.1.jar              |    1 +
 .../t05/maven-test/jars/t05-d-1.2.jar              |    1 +
 .../t05/maven-test/poms/t05-a-1.0.pom              |   23 +
 .../t05/maven-test/poms/t05-a-2.0.pom              |   23 +
 .../t05/maven-test/poms/t05-b-1.0.pom              |   24 +
 .../t05/maven-test/poms/t05-b-1.1.pom              |   24 +
 .../t05/maven-test/poms/t05-b-2.0.pom              |   24 +
 .../t05/maven-test/poms/t05-c-1.0.pom              |   17 +
 .../t05/maven-test/poms/t05-d-1.0.pom              |    7 +
 .../t05/maven-test/poms/t05-d-1.1.pom              |    7 +
 .../t05/maven-test/poms/t05-d-1.2.pom              |    7 +
 .../resources/inheritance-repo/t05/p0/p1/pom.xml   |   54 +
 .../test/resources/inheritance-repo/t05/p0/pom.xml |   36 +
 .../t06/maven-test/jars/t06-a-1.0.jar              |    1 +
 .../t06/maven-test/jars/t06-b-1.0.jar              |    1 +
 .../t06/maven-test/jars/t06-b-1.1.jar              |    1 +
 .../t06/maven-test/jars/t06-c-1.0.jar              |    1 +
 .../t06/maven-test/jars/t06-d-1.0.jar              |    1 +
 .../t06/maven-test/jars/t06-d-1.1.jar              |    1 +
 .../t06/maven-test/jars/t06-d-1.2.jar              |    1 +
 .../t06/maven-test/poms/t06-a-1.0.pom              |   23 +
 .../t06/maven-test/poms/t06-b-1.0.pom              |   24 +
 .../t06/maven-test/poms/t06-b-1.1.pom              |   24 +
 .../t06/maven-test/poms/t06-c-1.0.pom              |   17 +
 .../t06/maven-test/poms/t06-d-1.0.pom              |    7 +
 .../t06/maven-test/poms/t06-d-1.1.pom              |    7 +
 .../t06/maven-test/poms/t06-d-1.2.pom              |    7 +
 .../resources/inheritance-repo/t06/p0/p1/pom.xml   |   54 +
 .../test/resources/inheritance-repo/t06/p0/pom.xml |   37 +
 .../t07/maven-test/jars/t07-a-1.0.jar              |    1 +
 .../t07/maven-test/jars/t07-b-1.0.jar              |    1 +
 .../t07/maven-test/jars/t07-b-1.1.jar              |    1 +
 .../t07/maven-test/jars/t07-c-1.0.jar              |    1 +
 .../t07/maven-test/jars/t07-d-1.0.jar              |    1 +
 .../t07/maven-test/jars/t07-d-1.1.jar              |    1 +
 .../t07/maven-test/jars/t07-d-1.2.jar              |    1 +
 .../t07/maven-test/poms/t07-a-1.0.pom              |   23 +
 .../t07/maven-test/poms/t07-b-1.0.pom              |   24 +
 .../t07/maven-test/poms/t07-b-1.1.pom              |   24 +
 .../t07/maven-test/poms/t07-c-1.0.pom              |   17 +
 .../t07/maven-test/poms/t07-d-1.0.pom              |    7 +
 .../t07/maven-test/poms/t07-d-1.1.pom              |    7 +
 .../t07/maven-test/poms/t07-d-1.2.pom              |    7 +
 .../resources/inheritance-repo/t07/p0/p1/pom.xml   |   54 +
 .../test/resources/inheritance-repo/t07/p0/pom.xml |   37 +
 .../t08/maven-test/jars/t08-a-1.0.jar              |    1 +
 .../t08/maven-test/jars/t08-b-1.0.jar              |    1 +
 .../t08/maven-test/jars/t08-b-1.1.jar              |    1 +
 .../t08/maven-test/jars/t08-c-1.0.jar              |    1 +
 .../t08/maven-test/jars/t08-d-1.0.jar              |    1 +
 .../t08/maven-test/jars/t08-d-1.1.jar              |    1 +
 .../t08/maven-test/jars/t08-d-1.2.jar              |    1 +
 .../t08/maven-test/poms/t08-a-1.0.pom              |   23 +
 .../t08/maven-test/poms/t08-b-1.0.pom              |   24 +
 .../t08/maven-test/poms/t08-b-1.1.pom              |   24 +
 .../t08/maven-test/poms/t08-c-1.0.pom              |   17 +
 .../t08/maven-test/poms/t08-d-1.0.pom              |    7 +
 .../t08/maven-test/poms/t08-d-1.1.pom              |    7 +
 .../t08/maven-test/poms/t08-d-1.2.pom              |    7 +
 .../resources/inheritance-repo/t08/p0/p1/pom.xml   |   59 +
 .../test/resources/inheritance-repo/t08/p0/pom.xml |   37 +
 .../t09/maven-test/jars/t09-a-1.0.jar              |    1 +
 .../t09/maven-test/jars/t09-b-1.0.jar              |    1 +
 .../t09/maven-test/jars/t09-c-1.0.jar              |    1 +
 .../t09/maven-test/jars/t09-d-1.0.jar              |    1 +
 .../t09/maven-test/poms/t09-a-1.0.pom              |   24 +
 .../t09/maven-test/poms/t09-b-1.0.pom              |   17 +
 .../t09/maven-test/poms/t09-c-1.0.pom              |    7 +
 .../t09/maven-test/poms/t09-d-1.0.pom              |   17 +
 .../resources/inheritance-repo/t09/p0/p1/pom.xml   |   36 +
 .../resources/inheritance-repo/t09/p0/p2/pom.xml   |   42 +
 .../test/resources/inheritance-repo/t09/p0/pom.xml |   38 +
 .../t10/maven-test/jars/t10-a-1.0.jar              |    1 +
 .../t10/maven-test/jars/t10-b-1.0.jar              |    1 +
 .../t10/maven-test/jars/t10-c-1.0.jar              |    1 +
 .../t10/maven-test/poms/t10-a-1.0.pom              |   24 +
 .../t10/maven-test/poms/t10-b-1.0.pom              |    7 +
 .../t10/maven-test/poms/t10-c-1.0.pom              |    7 +
 .../resources/inheritance-repo/t10/p0/p1/pom.xml   |   42 +
 .../test/resources/inheritance-repo/t10/p0/pom.xml |   41 +
 .../resources/inheritance-repo/t11/p0/p1/pom.xml   |   16 +
 .../test/resources/inheritance-repo/t11/p0/pom.xml |   27 +
 .../resources/inheritance-repo/t12/p0/p1/pom.xml   |   29 +
 .../test/resources/inheritance-repo/t12/p0/pom.xml |   30 +
 .../t12scm/maven/p0/1.0/p0-1.0.pom                 |   18 +
 .../t12scm/maven/p1/1.0/p1-1.0.pom                 |   11 +
 .../inheritance-repo/t12scm/p0/modules/p1/pom.xml  |   11 +
 .../resources/inheritance-repo/t12scm/p0/pom.xml   |   18 +
 .../src/test/resources/local-repo/marker.txt       |    1 +
 .../maven-test/jars/maven-test-a-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-b-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-c-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-d-1.0.jar           |    1 +
 .../maven-test/poms/maven-test-a-1.0.pom           |   23 +
 .../maven-test/poms/maven-test-b-1.0.pom           |   23 +
 .../maven-test/poms/maven-test-c-1.0.pom           |   16 +
 .../maven-test/poms/maven-test-d-1.1.pom           |    7 +
 .../maven-test/poms/maven-test-d-1.2.pom           |    7 +
 .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-e-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../poms/maven-test-snapshot-resolving-1.0.pom     |   49 +
 .../artifact/deployer/ArtifactDeployerTest.xml     |   23 +
 .../artifact/installer/ArtifactInstallerTest.xml   |   23 +
 .../artifact/manager/DefaultWagonManagerTest.xml   |   48 +
 .../artifact/resolver/ArtifactResolverTest.xml     |   71 +
 .../artifact/resolver/ArtifactUpdatePolicyTest.xml |   29 +
 .../maven/project/AbstractMavenProjectTestCase.xml |    9 +
 maven-compat/src/test/resources/pom.xml            |  155 +
 .../scope/project-with-scoped-dependencies.xml     |   99 +
 .../projects/scope/transitive-compile-dep.xml      |   57 +
 .../projects/scope/transitive-default-dep.xml      |   58 +
 .../projects/scope/transitive-provided-dep.xml     |   57 +
 .../projects/scope/transitive-runtime-dep.xml      |   58 +
 .../projects/scope/transitive-test-dep.xml         |   58 +
 maven-core/lifecycle-executor.txt                  |  217 ++
 maven-core/plugin-manager.txt                      |  184 +
 maven-core/pom.xml                                 |  222 ++
 .../maven/AbstractMavenLifecycleParticipant.java   |   77 +
 .../org/apache/maven/ArtifactFilterManager.java    |   54 +
 .../maven/ArtifactFilterManagerDelegate.java       |   34 +
 .../src/main/java/org/apache/maven/BuildAbort.java |   39 +
 .../org/apache/maven/BuildFailureException.java    |   39 +
 .../apache/maven/DefaultArtifactFilterManager.java |  112 +
 .../main/java/org/apache/maven/DefaultMaven.java   |  537 +++
 .../maven/DefaultProjectDependenciesResolver.java  |  222 ++
 .../apache/maven/DuplicateProjectException.java    |   61 +
 .../org/apache/maven/InternalErrorException.java   |   36 +
 .../src/main/java/org/apache/maven/Maven.java      |   38 +
 .../org/apache/maven/MavenExecutionException.java  |   55 +
 .../org/apache/maven/MissingModuleException.java   |   51 +
 .../apache/maven/ProjectBuildFailureException.java |   55 +
 .../org/apache/maven/ProjectCycleException.java    |   39 +
 .../apache/maven/ProjectDependenciesResolver.java  |   95 +
 .../main/java/org/apache/maven/ReactorReader.java  |  250 ++
 .../java/org/apache/maven/RepositoryUtils.java     |  436 +++
 .../main/java/org/apache/maven/SessionScoped.java  |   42 +
 .../DependencyResolutionRequiredException.java     |   35 +
 .../maven/artifact/InvalidRepositoryException.java |   65 +
 .../maven/artifact/factory/ArtifactFactory.java    |   63 +
 .../artifact/factory/DefaultArtifactFactory.java   |  165 +
 .../artifact/handler/DefaultArtifactHandler.java   |  134 +
 .../handler/manager/ArtifactHandlerManager.java    |   37 +
 .../manager/DefaultArtifactHandlerManager.java     |   77 +
 .../metadata/AbstractArtifactMetadata.java         |   36 +
 .../ArtifactMetadataRetrievalException.java        |   58 +
 .../artifact/metadata/ArtifactMetadataSource.java  |   56 +
 .../maven/artifact/metadata/ResolutionGroup.java   |   49 +
 .../repository/DefaultRepositoryRequest.java       |  134 +
 .../repository/LegacyLocalRepositoryManager.java   |  432 +++
 .../repository/MavenArtifactRepository.java        |  417 ++
 .../maven/artifact/repository/RepositoryCache.java |   58 +
 .../artifact/repository/RepositoryRequest.java     |   95 +
 .../repository/layout/DefaultRepositoryLayout.java |  112 +
 .../metadata/AbstractRepositoryMetadata.java       |  233 ++
 .../metadata/ArtifactRepositoryMetadata.java       |  129 +
 .../repository/metadata/RepositoryMetadata.java    |   92 +
 .../RepositoryMetadataDeploymentException.java     |   40 +
 .../RepositoryMetadataInstallationException.java   |   40 +
 .../metadata/RepositoryMetadataManager.java        |   64 +
 .../RepositoryMetadataResolutionException.java     |   40 +
 .../metadata/io/DefaultMetadataReader.java         |   91 +
 .../metadata/io/MetadataParseException.java        |   93 +
 .../repository/metadata/io/MetadataReader.java     |   82 +
 .../resolver/ArtifactResolutionRequest.java        |  329 ++
 .../resolver/ArtifactResolutionResult.java         |  374 ++
 .../resolver/DefaultResolutionErrorHandler.java    |   89 +
 .../artifact/resolver/ResolutionErrorHandler.java  |   31 +
 .../artifact/resolver/ResolutionListener.java      |  109 +
 .../maven/artifact/resolver/ResolutionNode.java    |  255 ++
 .../filter/AbstractScopeArtifactFilter.java        |  107 +
 .../resolver/filter/AndArtifactFilter.java         |   99 +
 .../filter/CumulativeScopeArtifactFilter.java      |  122 +
 .../resolver/filter/ExcludesArtifactFilter.java    |   44 +
 .../resolver/filter/ExclusionArtifactFilter.java   |   68 +
 .../resolver/filter/ExclusionSetFilter.java        |   86 +
 .../resolver/filter/IncludesArtifactFilter.java    |   93 +
 .../resolver/filter/ScopeArtifactFilter.java       |   75 +
 .../apache/maven/bridge/MavenRepositorySystem.java |  868 +++++
 .../classrealm/ArtifactClassRealmConstituent.java  |   76 +
 .../maven/classrealm/ClassRealmConstituent.java    |   74 +
 .../apache/maven/classrealm/ClassRealmManager.java |   88 +
 .../classrealm/ClassRealmManagerDelegate.java      |   36 +
 .../apache/maven/classrealm/ClassRealmRequest.java |  100 +
 .../maven/classrealm/DefaultClassRealmManager.java |  407 ++
 .../maven/classrealm/DefaultClassRealmRequest.java |   82 +
 .../BasedirBeanConfigurationPathTranslator.java    |   71 +
 .../configuration/BeanConfigurationException.java  |   41 +
 .../BeanConfigurationPathTranslator.java           |   41 +
 .../configuration/BeanConfigurationRequest.java    |  130 +
 .../BeanConfigurationValuePreprocessor.java        |   45 +
 .../maven/configuration/BeanConfigurator.java      |   44 +
 .../DefaultBeanConfigurationRequest.java           |  190 +
 .../internal/DefaultBeanConfigurator.java          |  154 +
 .../apache/maven/eventspy/AbstractEventSpy.java    |   45 +
 .../java/org/apache/maven/eventspy/EventSpy.java   |   79 +
 .../eventspy/internal/EventSpyDispatcher.java      |  146 +
 .../internal/EventSpyExecutionListener.java        |  163 +
 .../internal/EventSpyRepositoryListener.java       |  176 +
 .../maven/exception/DefaultExceptionHandler.java   |  342 ++
 .../apache/maven/exception/ExceptionHandler.java   |   30 +
 .../apache/maven/exception/ExceptionSummary.java   |   82 +
 .../maven/execution/AbstractExecutionListener.java |  116 +
 .../org/apache/maven/execution/BuildFailure.java   |   61 +
 .../org/apache/maven/execution/BuildSuccess.java   |   44 +
 .../org/apache/maven/execution/BuildSummary.java   |   77 +
 .../execution/DefaultMavenExecutionRequest.java    | 1286 +++++++
 .../DefaultMavenExecutionRequestPopulator.java     |  321 ++
 .../execution/DefaultMavenExecutionResult.java     |  111 +
 .../org/apache/maven/execution/ExecutionEvent.java |   92 +
 .../apache/maven/execution/ExecutionListener.java  |   66 +
 .../maven/execution/MavenExecutionRequest.java     |  445 +++
 .../MavenExecutionRequestPopulationException.java  |   43 +
 .../execution/MavenExecutionRequestPopulator.java  |   74 +
 .../maven/execution/MavenExecutionResult.java      |   70 +
 .../org/apache/maven/execution/MavenSession.java   |  442 +++
 .../apache/maven/execution/MojoExecutionEvent.java |   88 +
 .../maven/execution/MojoExecutionListener.java     |   42 +
 .../maven/execution/ProjectDependencyGraph.java    |   74 +
 .../maven/execution/ProjectExecutionEvent.java     |   92 +
 .../maven/execution/ProjectExecutionListener.java  |   46 +
 .../org/apache/maven/execution/ReactorManager.java |  190 +
 .../apache/maven/execution/SettingsAdapter.java    |  126 +
 .../maven/execution/scope/MojoExecutionScoped.java |   42 +
 .../execution/scope/WeakMojoExecutionListener.java |   46 +
 .../scope/internal/MojoExecutionScope.java         |  186 +
 .../internal/MojoExecutionScopeCoreModule.java     |   48 +
 .../scope/internal/MojoExecutionScopeModule.java   |   59 +
 .../maven/extension/internal/CoreExports.java      |   75 +
 .../extension/internal/CoreExportsProvider.java    |   56 +
 .../extension/internal/CoreExtensionEntry.java     |  136 +
 .../apache/maven/graph/DefaultGraphBuilder.java    |  483 +++
 .../maven/graph/DefaultProjectDependencyGraph.java |  161 +
 .../graph/FilteredProjectDependencyGraph.java      |  116 +
 .../java/org/apache/maven/graph/GraphBuilder.java  |   36 +
 .../DefaultRepositorySystemSessionFactory.java     |  270 ++
 .../internal/aether/LoggingRepositoryListener.java |  141 +
 .../maven/lifecycle/DefaultLifecycleExecutor.java  |  177 +
 .../apache/maven/lifecycle/DefaultLifecycles.java  |  145 +
 .../maven/lifecycle/LifeCyclePluginAnalyzer.java   |   32 +
 .../java/org/apache/maven/lifecycle/Lifecycle.java |   88 +
 .../lifecycle/LifecycleExecutionException.java     |  107 +
 .../apache/maven/lifecycle/LifecycleExecutor.java  |   89 +
 .../maven/lifecycle/LifecycleMappingDelegate.java  |   52 +
 .../lifecycle/LifecycleNotFoundException.java      |   54 +
 .../lifecycle/LifecyclePhaseNotFoundException.java |   55 +
 .../apache/maven/lifecycle/MavenExecutionPlan.java |  205 +
 .../maven/lifecycle/MissingProjectException.java   |   41 +
 .../maven/lifecycle/MojoExecutionConfigurator.java |   45 +
 .../maven/lifecycle/NoGoalSpecifiedException.java  |   41 +
 .../lifecycle/internal/BuildListCalculator.java    |   68 +
 .../lifecycle/internal/BuildThreadFactory.java     |   39 +
 .../internal/CompoundProjectExecutionListener.java |   72 +
 .../lifecycle/internal/DefaultExecutionEvent.java  |   77 +
 .../internal/DefaultExecutionEventCatapult.java    |  119 +
 .../DefaultLifecycleExecutionPlanCalculator.java   |  586 +++
 .../internal/DefaultLifecycleMappingDelegate.java  |  157 +
 .../internal/DefaultLifecyclePluginAnalyzer.java   |  280 ++
 .../DefaultLifecycleTaskSegmentCalculator.java     |  155 +
 .../internal/DefaultMojoExecutionConfigurator.java |  108 +
 .../internal/DefaultProjectArtifactFactory.java    |   56 +
 .../lifecycle/internal/DependencyContext.java      |  115 +
 .../lifecycle/internal/ExecutionEventCatapult.java |   40 +
 .../lifecycle/internal/ExecutionPlanItem.java      |   85 +
 .../apache/maven/lifecycle/internal/GoalTask.java  |   46 +
 .../lifecycle/internal/LifecycleDebugLogger.java   |  183 +
 .../internal/LifecycleDependencyResolver.java      |  382 ++
 .../internal/LifecycleExecutionPlanCalculator.java |   66 +
 .../lifecycle/internal/LifecycleModuleBuilder.java |  154 +
 .../internal/LifecyclePluginResolver.java          |   92 +
 .../maven/lifecycle/internal/LifecycleStarter.java |  150 +
 .../maven/lifecycle/internal/LifecycleTask.java    |   51 +
 .../internal/LifecycleTaskSegmentCalculator.java   |   61 +
 .../lifecycle/internal/MojoDescriptorCreator.java  |  309 ++
 .../maven/lifecycle/internal/MojoExecutor.java     |  385 ++
 .../maven/lifecycle/internal/PhaseRecorder.java    |   77 +
 .../lifecycle/internal/ProjectArtifactFactory.java |   40 +
 .../maven/lifecycle/internal/ProjectBuildList.java |  159 +
 .../maven/lifecycle/internal/ProjectIndex.java     |   71 +
 .../maven/lifecycle/internal/ProjectSegment.java   |  110 +
 .../lifecycle/internal/ReactorBuildStatus.java     |   80 +
 .../maven/lifecycle/internal/ReactorContext.java   |   83 +
 .../maven/lifecycle/internal/TaskSegment.java      |   73 +
 .../maven/lifecycle/internal/builder/Builder.java  |   48 +
 .../lifecycle/internal/builder/BuilderCommon.java  |  199 +
 .../internal/builder/BuilderNotFoundException.java |   32 +
 .../multithreaded/ConcurrencyDependencyGraph.java  |  155 +
 .../multithreaded/MultiThreadedBuilder.java        |  195 +
 .../builder/multithreaded/ThreadOutputMuxer.java   |  477 +++
 .../singlethreaded/SingleThreadedBuilder.java      |   70 +
 .../lifecycle/mapping/DefaultLifecycleMapping.java |  120 +
 .../apache/maven/lifecycle/mapping/Lifecycle.java  |  118 +
 .../maven/lifecycle/mapping/LifecycleMapping.java  |   42 +
 .../maven/lifecycle/mapping/LifecycleMojo.java     |   66 +
 .../maven/lifecycle/mapping/LifecyclePhase.java    |  119 +
 .../plugin/DefaultLifecycleBindingsInjector.java   |  201 +
 .../maven/monitor/event/EventDispatcher.java       |   37 +
 .../apache/maven/monitor/event/EventMonitor.java   |   35 +
 .../apache/maven/plugin/BuildPluginManager.java    |   54 +
 .../java/org/apache/maven/plugin/CacheUtils.java   |  152 +
 .../plugin/CompoundMojoExecutionListener.java      |   64 +
 .../CycleDetectedInPluginGraphException.java       |   46 +
 .../maven/plugin/DebugConfigurationListener.java   |   91 +
 .../maven/plugin/DefaultBuildPluginManager.java    |  247 ++
 .../maven/plugin/DefaultExtensionRealmCache.java   |  170 +
 .../maven/plugin/DefaultPluginArtifactsCache.java  |  206 +
 .../maven/plugin/DefaultPluginDescriptorCache.java |  218 ++
 .../maven/plugin/DefaultPluginRealmCache.java      |  213 ++
 .../apache/maven/plugin/ExtensionRealmCache.java   |  101 +
 .../plugin/InvalidPluginDescriptorException.java   |   47 +
 .../maven/plugin/InvalidPluginException.java       |   48 +
 .../org/apache/maven/plugin/LegacySupport.java     |   59 +
 .../apache/maven/plugin/MavenPluginManager.java    |  128 +
 .../apache/maven/plugin/MavenPluginValidator.java  |   81 +
 .../org/apache/maven/plugin/MojoExecution.java     |  240 ++
 .../apache/maven/plugin/PluginArtifactsCache.java  |  104 +
 .../maven/plugin/PluginConfigurationException.java |   74 +
 .../maven/plugin/PluginContainerException.java     |   88 +
 .../apache/maven/plugin/PluginDescriptorCache.java |   58 +
 .../plugin/PluginDescriptorParsingException.java   |   58 +
 .../maven/plugin/PluginExecutionException.java     |   93 +
 .../maven/plugin/PluginIncompatibleException.java  |   36 +
 .../apache/maven/plugin/PluginLoaderException.java |  124 +
 .../org/apache/maven/plugin/PluginManager.java     |   82 +
 .../maven/plugin/PluginManagerException.java       |  197 +
 .../maven/plugin/PluginNotFoundException.java      |   58 +
 .../maven/plugin/PluginParameterException.java     |  195 +
 .../plugin/PluginParameterExpressionEvaluator.java |  485 +++
 .../org/apache/maven/plugin/PluginRealmCache.java  |   97 +
 .../maven/plugin/PluginResolutionException.java    |   47 +
 .../plugin/internal/DefaultLegacySupport.java      |   74 +
 .../plugin/internal/DefaultMavenPluginManager.java |  909 +++++
 .../DefaultPluginDependenciesResolver.java         |  318 ++
 .../plugin/internal/DefaultPluginManager.java      |  257 ++
 .../maven/plugin/internal/PlexusUtilsInjector.java |   87 +
 .../internal/PluginDependenciesResolver.java       |   71 +
 .../PluginDependencyResolutionListener.java        |  150 +
 .../internal/ValidatingConfigurationListener.java  |   97 +
 .../maven/plugin/internal/WagonExcluder.java       |  109 +
 .../plugin/prefix/DefaultPluginPrefixRequest.java  |  156 +
 .../prefix/NoPluginFoundForPrefixException.java    |   68 +
 .../maven/plugin/prefix/PluginPrefixRequest.java   |  115 +
 .../maven/plugin/prefix/PluginPrefixResolver.java  |   42 +
 .../maven/plugin/prefix/PluginPrefixResult.java    |   55 +
 .../internal/DefaultPluginPrefixResolver.java      |  294 ++
 .../prefix/internal/DefaultPluginPrefixResult.java |   90 +
 .../version/DefaultPluginVersionRequest.java       |  165 +
 .../version/PluginVersionNotFoundException.java    |   50 +
 .../maven/plugin/version/PluginVersionRequest.java |  115 +
 .../version/PluginVersionResolutionException.java  |  110 +
 .../plugin/version/PluginVersionResolver.java      |   42 +
 .../maven/plugin/version/PluginVersionResult.java  |   47 +
 .../internal/DefaultPluginVersionResolver.java     |  406 ++
 .../internal/DefaultPluginVersionResult.java       |   69 +
 .../DefaultDependencyResolutionRequest.java        |   82 +
 .../project/DefaultDependencyResolutionResult.java |  114 +
 .../maven/project/DefaultMavenProjectHelper.java   |  131 +
 .../project/DefaultModelBuildingListener.java      |  132 +
 .../maven/project/DefaultProjectBuilder.java       | 1081 ++++++
 .../project/DefaultProjectBuildingHelper.java      |  295 ++
 .../project/DefaultProjectBuildingRequest.java     |  349 ++
 .../project/DefaultProjectBuildingResult.java      |  110 +
 .../DefaultProjectDependenciesResolver.java        |  336 ++
 .../maven/project/DefaultProjectRealmCache.java    |  149 +
 .../project/DependencyResolutionException.java     |   42 +
 .../maven/project/DependencyResolutionRequest.java |   81 +
 .../maven/project/DependencyResolutionResult.java  |   80 +
 .../DuplicateArtifactAttachmentException.java      |   64 +
 .../maven/project/DuplicateProjectException.java   |   80 +
 .../apache/maven/project/ExtensionDescriptor.java  |   88 +
 .../maven/project/ExtensionDescriptorBuilder.java  |  151 +
 .../project/InvalidProjectVersionException.java    |   62 +
 .../org/apache/maven/project/MavenProject.java     | 1978 ++++++++++
 .../apache/maven/project/MavenProjectHelper.java   |   76 +
 .../org/apache/maven/project/ProjectBuilder.java   |   98 +
 .../maven/project/ProjectBuildingException.java    |  150 +
 .../maven/project/ProjectBuildingHelper.java       |   81 +
 .../maven/project/ProjectBuildingRequest.java      |  207 +
 .../maven/project/ProjectBuildingResult.java       |   74 +
 .../maven/project/ProjectDependenciesResolver.java |   40 +
 .../apache/maven/project/ProjectModelResolver.java |  298 ++
 .../apache/maven/project/ProjectRealmCache.java    |   92 +
 .../org/apache/maven/project/ProjectSorter.java    |  288 ++
 .../apache/maven/project/ReactorModelCache.java    |  167 +
 .../org/apache/maven/project/ReactorModelPool.java |  106 +
 .../maven/project/RepositorySessionDecorator.java  |   36 +
 .../project/artifact/ActiveProjectArtifact.java    |  403 ++
 .../project/artifact/ArtifactWithDependencies.java |   36 +
 .../maven/project/artifact/AttachedArtifact.java   |  185 +
 .../artifact/DefaultMavenMetadataCache.java        |  353 ++
 .../project/artifact/DefaultMetadataSource.java    |   37 +
 .../artifact/DefaultProjectArtifactsCache.java     |  248 ++
 .../InvalidDependencyVersionException.java         |   55 +
 .../maven/project/artifact/MavenMetadataCache.java |   41 +
 .../project/artifact/MavenMetadataSource.java      |  784 ++++
 .../maven/project/artifact/PluginArtifact.java     |   97 +
 .../maven/project/artifact/ProjectArtifact.java    |  106 +
 .../project/artifact/ProjectArtifactMetadata.java  |  130 +
 .../project/artifact/ProjectArtifactsCache.java    |  103 +
 .../apache/maven/project/path/PathTranslator.java  |   41 +
 .../properties/internal/EnvironmentUtils.java      |   70 +
 .../properties/internal/SystemProperties.java      |   63 +
 .../repository/ArtifactDoesNotExistException.java  |   37 +
 .../maven/repository/ArtifactTransferEvent.java    |  339 ++
 .../ArtifactTransferFailedException.java           |   38 +
 .../maven/repository/ArtifactTransferListener.java |   39 +
 .../maven/repository/ArtifactTransferResource.java |   66 +
 .../DelegatingLocalArtifactRepository.java         |  204 +
 .../maven/repository/LocalArtifactRepository.java  |   36 +
 .../LocalRepositoryNotAccessibleException.java     |   44 +
 .../apache/maven/repository/RepositorySystem.java  |  167 +
 .../legacy/metadata/AbstractArtifactMetadata.java  |   65 +
 .../ArtifactMetadataRetrievalException.java        |   68 +
 .../legacy/metadata/ArtifactMetadataSource.java    |   78 +
 .../metadata/DefaultMetadataResolutionRequest.java |  132 +
 .../legacy/metadata/MetadataResolutionRequest.java |  113 +
 .../legacy/metadata/ResolutionGroup.java           |   86 +
 .../apache/maven/rtinfo/RuntimeInformation.java    |   49 +
 .../rtinfo/internal/DefaultRuntimeInformation.java |  135 +
 .../maven/session/scope/internal/SessionScope.java |  167 +
 .../session/scope/internal/SessionScopeModule.java |   66 +
 .../settings/DefaultMavenSettingsBuilder.java      |  158 +
 .../maven/settings/MavenSettingsBuilder.java       |   81 +
 .../settings/SettingsConfigurationException.java   |   63 +
 .../org/apache/maven/settings/SettingsUtils.java   |  321 ++
 .../apache/maven/toolchain/DefaultToolchain.java   |  186 +
 .../maven/toolchain/DefaultToolchainManager.java   |  140 +
 .../toolchain/DefaultToolchainManagerPrivate.java  |   82 +
 .../maven/toolchain/DefaultToolchainsBuilder.java  |   71 +
 .../toolchain/MisconfiguredToolchainException.java |   39 +
 .../apache/maven/toolchain/RequirementMatcher.java |   30 +
 .../maven/toolchain/RequirementMatcherFactory.java |  109 +
 .../java/org/apache/maven/toolchain/Toolchain.java |   46 +
 .../apache/maven/toolchain/ToolchainFactory.java   |   44 +
 .../apache/maven/toolchain/ToolchainManager.java   |   64 +
 .../maven/toolchain/ToolchainManagerPrivate.java   |   58 +
 .../apache/maven/toolchain/ToolchainPrivate.java   |   48 +
 .../apache/maven/toolchain/ToolchainsBuilder.java  |   46 +
 .../building/DefaultToolchainsBuilder.java         |  212 ++
 .../building/DefaultToolchainsBuildingRequest.java |   63 +
 .../building/DefaultToolchainsBuildingResult.java  |   66 +
 .../toolchain/building/ToolchainsBuilder.java      |   41 +
 .../building/ToolchainsBuildingException.java      |   93 +
 .../building/ToolchainsBuildingRequest.java        |   64 +
 .../building/ToolchainsBuildingResult.java         |   50 +
 .../toolchain/io/DefaultToolchainsReader.java      |   96 +
 .../toolchain/io/DefaultToolchainsWriter.java      |   54 +
 .../toolchain/io/ToolchainsParseException.java     |   94 +
 .../maven/toolchain/io/ToolchainsReader.java       |   83 +
 .../maven/toolchain/io/ToolchainsWriter.java       |   48 +
 .../maven/toolchain/java/DefaultJavaToolChain.java |   55 +
 .../apache/maven/toolchain/java/JavaToolchain.java |   67 +
 .../maven/toolchain/java/JavaToolchainFactory.java |  127 +
 .../maven/toolchain/java/JavaToolchainImpl.java    |   87 +
 .../toolchain/merge/MavenToolchainMerger.java      |  103 +
 maven-core/src/main/mdo/extension.mdo              |   65 +
 maven-core/src/main/mdo/toolchains.mdo             |  231 ++
 .../main/resources/META-INF/maven/extension.xml    |  191 +
 .../META-INF/plexus/artifact-handlers.xml          |  194 +
 .../main/resources/META-INF/plexus/components.xml  |  134 +
 .../resources/META-INF/plexus/default-bindings.xml |  316 ++
 .../org/apache/maven/messages/build.properties     |   22 +
 .../org/apache/maven/project/standalone.xml        |   30 +
 maven-core/src/site/apt/artifact-handlers.apt      |   59 +
 .../src/site/apt/configuration-management.apt      |  139 +
 maven-core/src/site/apt/core-extensions.apt.vm     |   30 +
 maven-core/src/site/apt/default-bindings.apt.vm    |   60 +
 .../apt/getting-to-container-configured-mojos.apt  |  102 +
 maven-core/src/site/apt/index.apt                  |   80 +
 maven-core/src/site/apt/inheritance.apt            |  100 +
 maven-core/src/site/apt/lifecycles.apt.vm          |   49 +
 maven-core/src/site/apt/offline-mode.apt           |  269 ++
 .../src/site/apt/plugin-execution-isolation.apt    |   57 +
 .../2.1-lifecycle-refactor-class-diagram.png       |  Bin 0 -> 38152 bytes
 .../2.1-lifecycle-refactor-sequence-diagram.png    |  Bin 0 -> 87383 bytes
 .../design/2.1-lifecycle-refactor.graffle          | 4024 ++++++++++++++++++++
 maven-core/src/site/site.xml                       |   45 +
 .../maven/AbstractCoreMavenComponentTestCase.java  |  330 ++
 .../java/org/apache/maven/DefaultMavenTest.java    |   45 +
 .../maven/MavenLifecycleParticipantTest.java       |  173 +
 .../src/test/java/org/apache/maven/MavenTest.java  |   69 +
 .../maven/ProjectDependenciesResolverTest.java     |  117 +
 .../artifact/handler/ArtifactHandlerTest.java      |   88 +
 .../filter/ExclusionArtifactFilterTest.java        |  156 +
 .../configuration/DefaultBeanConfiguratorTest.java |  134 +
 .../exception/DefaultExceptionHandlerTest.java     |  105 +
 .../DefaultMavenExecutionRequestPopulatorTest.java |   62 +
 .../maven/execution/DefaultMavenExecutionTest.java |   56 +
 .../scope/internal/MojoExecutionScopeTest.java     |  106 +
 .../graph/DefaultProjectDependencyGraphTest.java   |  172 +
 .../maven/lifecycle/DefaultLifecyclesTest.java     |   59 +
 .../lifecycle/DelegatingMojoExecutionListener.java |   75 +
 .../DelegatingProjectExecutionListener.java        |   82 +
 .../lifecycle/EmptyLifecyclePluginAnalyzer.java    |   77 +
 .../lifecycle/LifecycleExecutorSubModulesTest.java |   98 +
 .../maven/lifecycle/LifecycleExecutorTest.java     |  558 +++
 .../maven/lifecycle/MavenExecutionPlanTest.java    |   74 +
 .../lifecycle/MojoExecutionXPathContainer.java     |   72 +
 .../internal/BuildListCalculatorTest.java          |   49 +
 .../lifecycle/internal/BuilderCommonTest.java      |   75 +
 .../internal/ConcurrencyDependencyGraphTest.java   |   94 +
 .../internal/LifecycleDependencyResolverTest.java  |   82 +
 .../LifecycleExecutionPlanCalculatorTest.java      |   82 +
 .../LifecycleTaskSegmentCalculatorImplTest.java    |   57 +
 .../lifecycle/internal/PhaseRecorderTest.java      |   49 +
 .../lifecycle/internal/ProjectBuildListTest.java   |   47 +
 .../ConcurrencyDependencyGraphTest.java            |   83 +
 .../multithreaded/ThreadOutputMuxerTest.java       |  167 +
 .../lifecycle/internal/stub/AboutTheStubs.html     |   55 +
 .../internal/stub/BuildPluginManagerStub.java      |   56 +
 .../internal/stub/CompletionServiceStub.java       |   89 +
 .../internal/stub/DefaultLifecyclesStub.java       |   62 +
 .../internal/stub/ExecutionEventCatapultStub.java  |   42 +
 .../internal/stub/LifeCyclePluginAnalyzerStub.java |   74 +
 .../stub/LifecycleExecutionPlanCalculatorStub.java |  242 ++
 .../stub/LifecycleTaskSegmentCalculatorStub.java   |   89 +
 .../maven/lifecycle/internal/stub/LoggerStub.java  |  110 +
 .../lifecycle/internal/stub/MojoExecutorStub.java  |   67 +
 .../internal/stub/PluginPrefixResolverStub.java    |   52 +
 .../internal/stub/PluginVersionResolverStub.java   |   48 +
 .../stub/ProjectDependenciesResolverStub.java      |  109 +
 .../internal/stub/ProjectDependencyGraphStub.java  |  233 ++
 .../stub/ProjectDependencyGraphStubTest.java       |   61 +
 .../lifecycle/mapping/LifecyclePhaseTest.java      |   73 +
 .../org/apache/maven/plugin/PluginManagerTest.java |  320 ++
 .../maven/plugin/PluginParameterExceptionTest.java |  164 +
 .../PluginParameterExpressionEvaluatorTest.java    |  447 +++
 .../plugin/internal/DefaultLegacySupportTest.java  |   74 +
 .../project/AbstractMavenProjectTestCase.java      |  193 +
 .../project/DefaultMavenProjectBuilderTest.java    |  380 ++
 .../maven/project/EmptyLifecycleExecutor.java      |  109 +
 .../maven/project/EmptyProjectBuildingHelper.java  |   62 +
 .../project/ExtensionDescriptorBuilderTest.java    |   98 +
 .../project/LegacyLocalRepositoryManager.java      |  192 +
 .../org/apache/maven/project/MavenProjectTest.java |  219 ++
 .../apache/maven/project/PomConstructionTest.java  | 1894 +++++++++
 .../apache/maven/project/ProjectBuilderTest.java   |  333 ++
 .../maven/project/ProjectModelResolverTest.java    |  243 ++
 .../apache/maven/project/ProjectSorterTest.java    |  372 ++
 .../apache/maven/project/TestMetadataSource.java   |   51 +
 .../artifact/DefaultMavenMetadataCacheTest.java    |   83 +
 .../artifact/DefaultProjectArtifactsCacheTest.java |   72 +
 .../project/artifact/MavenMetadataSourceTest.java  |  185 +
 .../canonical/CanonicalProjectBuilderTest.java     |  101 +
 .../maven/project/harness/PomTestWrapper.java      |  111 +
 .../project/harness/Xpp3DomAttributeIterator.java  |   89 +
 .../project/harness/Xpp3DomAttributePointer.java   |  105 +
 .../maven/project/harness/Xpp3DomNodeIterator.java |  161 +
 .../maven/project/harness/Xpp3DomNodePointer.java  |  155 +
 .../project/harness/Xpp3DomPointerFactory.java     |   61 +
 .../maven/repository/LegacyRepositoryLayout.java   |   89 +
 .../maven/repository/TestArtifactHandler.java      |   83 +
 .../maven/repository/TestRepositoryConnector.java  |  161 +
 .../repository/TestRepositoryConnectorFactory.java |   48 +
 .../maven/repository/TestRepositorySystem.java     |  329 ++
 .../internal/DefaultRuntimeInformationTest.java    |   81 +
 .../settings/PomConstructionWithSettingsTest.java  |  158 +
 .../apache/maven/settings/SettingsUtilsTest.java   |  126 +
 .../DefaultToolchainManagerPrivateTest.java        |  163 +
 .../toolchain/DefaultToolchainManagerTest.java     |  153 +
 .../maven/toolchain/DefaultToolchainTest.java      |  150 +
 .../toolchain/RequirementMatcherFactoryTest.java   |   72 +
 .../building/DefaultToolchainsBuilderTest.java     |  283 ++
 .../building/ToolchainsBuildingExceptionTest.java  |   73 +
 .../toolchain/merge/MavenToolchainMergerTest.java  |  135 +
 .../cyclic-reference/module-a/pom.xml              |   19 +
 .../cyclic-reference/module-b/pom.xml              |   19 +
 .../default-maven/cyclic-reference/pom.xml         |   14 +
 .../lifecycle-dependency-resolver/lib/pom.xml      |   32 +
 .../projects/lifecycle-dependency-resolver/pom.xml |   58 +
 .../lifecycle-dependency-resolver/war/pom.xml      |   53 +
 .../lifecycle-executor/mojo-configuration/pom.xml  |   67 +
 .../lifecycle-executor/project-basic/pom.xml       |   79 +
 .../pom.xml                                        |   72 +
 .../java/org/apache/maven/lifecycle/test/App.java  |   13 +
 .../org/apache/maven/lifecycle/test/AppTest.java   |   38 +
 .../project-with-inheritance/pom.xml               |  628 +++
 .../project-with-multiple-executions/pom.xml       |  112 +
 .../src/main/mdo/remote-resources.mdo              |   61 +
 .../src/main/mdo/supplemental-model.mdo            |   61 +
 .../pom.xml                                        |   42 +
 .../pom.xml                                        |   30 +
 .../module-a/pom.xml                               |   12 +
 .../module-b/pom.xml                               |   12 +
 .../pom.xml                                        |   13 +
 .../mng-5003-plugin-realm-cache/pom.xml            |    8 +
 .../pom.xml                                        |   44 +
 .../tools.jar                                      |    0
 .../project-with-build-extensions-plugin/pom.xml   |   31 +
 .../project-with-inheritance/pom.xml               |  628 +++
 .../project-with-plugin-classpath-ordering/pom.xml |   63 +
 .../sub/pom.xml                                    |   77 +
 .../org/apache/maven/its/mng3906/a/0.1/a-0.1.jar   |  Bin 0 -> 5109 bytes
 .../org/apache/maven/its/mng3906/a/0.1/a-0.1.pom   |   56 +
 .../org/apache/maven/its/mng3906/a/0.2/a-0.2.jar   |  Bin 0 -> 5111 bytes
 .../org/apache/maven/its/mng3906/a/0.2/a-0.2.pom   |   56 +
 .../apache/maven/its/mng3906/a/maven-metadata.xml  |   13 +
 .../org/apache/maven/its/mng3906/b/0.1/b-0.1.jar   |  Bin 0 -> 5108 bytes
 .../org/apache/maven/its/mng3906/b/0.1/b-0.1.pom   |   56 +
 .../apache/maven/its/mng3906/b/maven-metadata.xml  |   12 +
 .../org/apache/maven/its/mng3906/c/0.1/c-0.1.jar   |  Bin 0 -> 5109 bytes
 .../org/apache/maven/its/mng3906/c/0.1/c-0.1.pom   |   56 +
 .../apache/maven/its/mng3906/c/maven-metadata.xml  |   12 +
 .../org/apache/maven/its/mng3906/d/0.1/d-0.1.jar   |  Bin 0 -> 5108 bytes
 .../org/apache/maven/its/mng3906/d/0.1/d-0.1.pom   |   56 +
 .../apache/maven/its/mng3906/d/maven-metadata.xml  |   12 +
 .../org/apache/maven/its/mng3906/e/0.1/e-0.1.jar   |  Bin 0 -> 5107 bytes
 .../org/apache/maven/its/mng3906/e/0.1/e-0.1.pom   |   56 +
 .../apache/maven/its/mng3906/e/maven-metadata.xml  |   12 +
 .../sub/settings-template.xml                      |   55 +
 .../project-builder/MNG-6716/project/pom.xml       |   22 +
 .../project-builder/MNG-6723/child/pom.xml         |   11 +
 .../test/projects/project-builder/MNG-6723/pom.xml |   49 +
 .../project-builder/it0063/jdk/jre/placeholder.txt |    1 +
 .../project-builder/it0063/jdk/lib/tools.jar       |  Bin 0 -> 345 bytes
 .../test/projects/project-builder/it0063/pom.xml   |   55 +
 .../project-builder/mng-3023/consumer/pom.xml      |   66 +
 .../mng-3023/dependency/dependency-1.jar           |  Bin 0 -> 345 bytes
 .../project-builder/mng-3023/dependency/pom.xml    |   70 +
 .../test/projects/project-builder/mng-3023/pom.xml |   37 +
 .../it0063/jdk/jre/placeholder.txt                 |    1 +
 .../it0063/jdk/lib/tools.jar                       |  Bin 0 -> 345 bytes
 .../project-dependencies-resolver/it0063/pom.xml   |   55 +
 .../project-with-exclusions/pom.xml                |   41 +
 .../remote-repo/org/apache/apache/1/apache-1.pom   |   82 +
 .../org/apache/apache/maven-metadata.xml           |   13 +
 .../org/apache/maven/its/a/0.1/a-0.1.jar           |  Bin 0 -> 1898 bytes
 .../org/apache/maven/its/a/0.1/a-0.1.pom           |   41 +
 .../org/apache/maven/its/a/maven-metadata.xml      |   12 +
 .../org/apache/maven/its/b/0.1/b-0.1.jar           |  Bin 0 -> 1936 bytes
 .../org/apache/maven/its/b/0.1/b-0.1.pom           |   49 +
 .../org/apache/maven/its/b/maven-metadata.xml      |   12 +
 .../maven-it-plugin/0.1/maven-it-plugin-0.1.jar    |  Bin 0 -> 13520 bytes
 .../maven-it-plugin/0.1/maven-it-plugin-0.1.pom    |   70 +
 .../maven/its/plugins/maven-it-plugin/0.1/pom.xml  |   70 +
 .../its/plugins/maven-it-plugin/maven-metadata.xml |   14 +
 .../apache/maven/its/plugins/maven-metadata.xml    |   10 +
 .../maven-plugin-api/2.0/maven-plugin-api-2.0.jar  |  Bin 0 -> 10133 bytes
 .../maven-plugin-api/2.0/maven-plugin-api-2.0.pom  |   23 +
 .../org/apache/maven/maven/2.0/maven-2.0.pom       |  264 ++
 .../0.1/maven-clean-plugin-0.1.jar                 |  Bin 0 -> 6767 bytes
 .../0.1/maven-clean-plugin-0.1.pom                 |   70 +
 .../plugins/maven-clean-plugin/maven-metadata.xml  |   14 +
 .../0.1/maven-compiler-plugin-0.1.jar              |  Bin 0 -> 8085 bytes
 .../0.1/maven-compiler-plugin-0.1.pom              |   70 +
 .../maven-compiler-plugin/maven-metadata.xml       |   14 +
 .../0.1/maven-deploy-plugin-0.1.jar                |  Bin 0 -> 6777 bytes
 .../0.1/maven-deploy-plugin-0.1.pom                |   70 +
 .../plugins/maven-deploy-plugin/maven-metadata.xml |   14 +
 .../0.1/maven-install-plugin-0.1.jar               |  Bin 0 -> 6781 bytes
 .../0.1/maven-install-plugin-0.1.pom               |   70 +
 .../maven-install-plugin/maven-metadata.xml        |   14 +
 .../maven-jar-plugin/0.1/maven-jar-plugin-0.1.jar  |  Bin 0 -> 6790 bytes
 .../maven-jar-plugin/0.1/maven-jar-plugin-0.1.pom  |   70 +
 .../plugins/maven-jar-plugin/maven-metadata.xml    |   14 +
 .../org/apache/maven/plugins/maven-metadata.xml    |   45 +
 .../0.1/maven-plugin-plugin-0.1.jar                |  Bin 0 -> 8007 bytes
 .../0.1/maven-plugin-plugin-0.1.pom                |   70 +
 .../plugins/maven-plugin-plugin/maven-metadata.xml |   14 +
 .../0.1/maven-resources-plugin-0.1.jar             |  Bin 0 -> 8034 bytes
 .../0.1/maven-resources-plugin-0.1.pom             |   70 +
 .../maven-resources-plugin/maven-metadata.xml      |   14 +
 .../0.1/maven-surefire-plugin-0.1.jar              |  Bin 0 -> 6827 bytes
 .../0.1/maven-surefire-plugin-0.1.pom              |   70 +
 .../maven-surefire-plugin/maven-metadata.xml       |   14 +
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar   |  Bin 0 -> 168568 bytes
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom   |   27 +
 .../artifact-id-inheritance/child/pom.xml          |   32 +
 .../artifact-id-inheritance/pom.xml                |   35 +
 .../basedir-aligned-interpolation/pom.xml          |   60 +
 .../pom-with-unusual-name.xml                      |   39 +
 .../baseuri-interpolation/pom.xml                  |   38 +
 .../boolean-interpolation/pom.xml                  |   82 +
 .../build-extension-inheritance/pom.xml            |   49 +
 .../build-extension-inheritance/sub/pom.xml        |   75 +
 .../complete-model/w-parent/pom.xml                |   31 +
 .../complete-model/w-parent/sub/pom.xml            |  319 ++
 .../complete-model/wo-parent/pom.xml               |  313 ++
 .../config-with-plugin-mng/pom.xml                 |   39 +
 .../consecutive_empty_elements/pom.xml             |   14 +
 .../contributors-inheritance/child-2/pom.xml       |   45 +
 .../contributors-inheritance/pom.xml               |   35 +
 .../dependency-inheritance/maven-parent.xml        |   31 +
 .../dependency-inheritance/pom.xml                 |   48 +
 .../dependency-inheritance/sub/pom.xml             |   34 +
 .../pom.xml                                        |   19 +
 .../sub/pom.xml                                    |   17 +
 .../dependency-order/w-plugin-mgmt/pom.xml         |   68 +
 .../dependency-order/wo-plugin-mgmt/pom.xml        |   66 +
 .../dependency-scope-inheritance/pom.xml           |   16 +
 .../dependency-scope-inheritance/sub/pom.xml       |   19 +
 .../dependency-scope/pom.xml                       |   18 +
 .../dependency-scope/sub/pom.xml                   |   24 +
 .../developers-inheritance/child-2/pom.xml         |   45 +
 .../developers-inheritance/pom.xml                 |   35 +
 .../distribution-management/pom.xml                |   39 +
 .../dual-execution-ids/pom.xml                     |   28 +
 .../dual-execution-ids/sub/pom.xml                 |   43 +
 .../nexus-parent.xml                               |   29 +
 .../duplicate-exclusions-dependency/pom.xml        |   33 +
 .../duplicate-exclusions-dependency/sub/pom.xml    |   16 +
 .../empty-distMng-repo-url/pom.xml                 |   15 +
 .../resources-project-builder/empty-scm/pom.xml    |   58 +
 .../equal-plugin-deps/pom.xml                      |   64 +
 .../equal-plugin-exec-ids/pom.xml                  |   83 +
 .../execution-configuration-join/pom.xml           |   35 +
 .../execution-configuration-subcollections/pom.xml |   42 +
 .../execution-configuration/pom.xml                |   58 +
 .../test/resources-project-builder/foo/sub/pom.xml |  414 ++
 .../full-interpolation/pom.xml                     |   66 +
 .../pom.xml                                        |   97 +
 .../sub/pom.xml                                    |   84 +
 .../active-profile/pom.xml                         |   50 +
 .../active-profile/sub/pom.xml                     |   54 +
 .../no-profile/pom.xml                             |   41 +
 .../no-profile/sub/pom.xml                         |   45 +
 .../interpolation-cli-wins/pom.xml                 |   39 +
 .../jdk-activation/pom.xml                         |  105 +
 .../join-different-containers-same-id/pom.xml      |   66 +
 .../licenses-inheritance/child-2/pom.xml           |   47 +
 .../licenses-inheritance/pom.xml                   |   37 +
 .../limited-inheritance/child/pom.xml              |   61 +
 .../limited-inheritance/pom.xml                    |   87 +
 .../mailing-lists-inheritance/child-2/pom.xml      |   45 +
 .../mailing-lists-inheritance/pom.xml              |   35 +
 .../managed-profile-dependency/pom.xml             |   55 +
 .../managed-profile-dependency/sub/pom.xml         |   55 +
 .../merged-filter-order/pom.xml                    |   44 +
 .../merged-filter-order/sub/pom.xml                |   49 +
 .../w-plugin-mgmt/pom.xml                          |   64 +
 .../w-plugin-mgmt/sub/pom.xml                      |   64 +
 .../wo-plugin-mgmt/pom.xml                         |   62 +
 .../wo-plugin-mgmt/sub/pom.xml                     |   64 +
 .../w-plugin-mgmt/pom.xml                          |   59 +
 .../w-plugin-mgmt/sub/pom.xml                      |   59 +
 .../wo-plugin-mgmt/pom.xml                         |   57 +
 .../wo-plugin-mgmt/sub/pom.xml                     |   59 +
 .../merged-plugin-exec-order/w-plugin-mgmt/pom.xml |   71 +
 .../w-plugin-mgmt/sub/pom.xml                      |   71 +
 .../wo-plugin-mgmt/pom.xml                         |   69 +
 .../wo-plugin-mgmt/sub/pom.xml                     |   71 +
 .../resources-project-builder/micromailer/pom.xml  |  124 +
 .../micromailer/spice-parent-9.pom                 |  103 +
 .../multiple-filters/pom.xml                       |   17 +
 .../multiple-repos/pom.xml                         |   44 +
 .../multiple-repos/sub/pom.xml                     |   45 +
 .../nested-build-dir-interpolation/pom.xml         |   55 +
 .../parent-inheritance/child3.xml                  |    7 +
 .../parent-inheritance/pom.xml                     |   11 +
 .../parent-inheritance/sub/pom.xml                 |    9 +
 .../parent-interpolation/pom.xml                   |   16 +
 .../parent-interpolation/sub/pom.xml               |    9 +
 .../parent-pom-packaging/pom.xml                   |   35 +
 .../parent-pom-packaging/sub/pom.xml               |   40 +
 .../platform-file-separator/pom.xml                |   40 +
 .../plugin-config-append/no-profile/pom.xml        |   80 +
 .../no-profile/subproject/pom.xml                  |   70 +
 .../plugin-config-append/with-profile/pom.xml      |   90 +
 .../with-profile/subproject/pom.xml                |   80 +
 .../plugin-config-attributes/w-plugin-mgmt/pom.xml |   62 +
 .../plugin-config-attributes/w-profile/pom.xml     |   74 +
 .../wo-plugin-mgmt/pom.xml                         |   53 +
 .../plugin-config-merging/child/pom.xml            |   76 +
 .../plugin-config-merging/pom.xml                  |   72 +
 .../plugin-config-order/w-plugin-mgmt/pom.xml      |   68 +
 .../plugin-config-order/wo-plugin-mgmt/pom.xml     |   60 +
 .../plugin-config-properties/pom.xml               |   30 +
 .../plugin-exec-config-order/w-plugin-mgmt/pom.xml |   78 +
 .../wo-plugin-mgmt/pom.xml                         |   70 +
 .../plugin-exec-goals-order/w-plugin-mgmt/pom.xml  |   66 +
 .../plugin-exec-goals-order/wo-plugin-mgmt/pom.xml |   57 +
 .../plugin-exec-inheritance/pom.xml                |   75 +
 .../plugin-exec-inheritance/w-merge/pom.xml        |   48 +
 .../plugin-exec-inheritance/wo-merge/pom.xml       |   43 +
 .../pom.xml                                        |   56 +
 .../sub/pom.xml                                    |   59 +
 .../plugin-exec-merging-wo-version/pom.xml         |   55 +
 .../plugin-exec-merging-wo-version/sub/pom.xml     |   58 +
 .../plugin-exec-merging/w-plugin-mgmt/pom.xml      |   58 +
 .../plugin-exec-merging/w-plugin-mgmt/sub/pom.xml  |   59 +
 .../plugin-exec-merging/wo-plugin-mgmt/pom.xml     |   56 +
 .../plugin-exec-merging/wo-plugin-mgmt/sub/pom.xml |   59 +
 .../plugin-exec-order-and-default-exec/pom.xml     |   71 +
 .../plugin-exec-order-with-lifecycle/pom.xml       |   52 +
 .../plugin-exec-order/w-plugin-mgmt/pom.xml        |   76 +
 .../plugin-exec-order/wo-plugin-mgmt/pom.xml       |   67 +
 .../plugin-exec-w-and-wo-id/w-plugin-mgmt/pom.xml  |   72 +
 .../plugin-exec-w-and-wo-id/wo-plugin-mgmt/pom.xml |   64 +
 .../plugin-inheritance-merge-order/pom.xml         |   67 +
 .../plugin-inheritance-merge-order/sub/pom.xml     |   72 +
 .../plugin-inheritance-order/child/pom.xml         |   51 +
 .../plugin-inheritance-order/pom.xml               |   68 +
 .../plugin-inheritance-simple/pom.xml              |   17 +
 .../plugin-inheritance-simple/sub/pom.xml          |   20 +
 .../plugin-injection-merge-order/pom.xml           |  133 +
 .../plugin-management-dependencies/pom.xml         |   25 +
 .../plugin-management-dependencies/sub/pom.xml     |   25 +
 .../plugin-management-duplicate/pom.xml            |   39 +
 .../plugin-management-duplicate/sub/pom.xml        |   64 +
 .../child/pom.xml                                  |   53 +
 .../plugin-management-for-implicit-plugin/pom.xml  |   61 +
 .../plugin-management-inheritance/pom.xml          |   64 +
 .../plugin-merge-simple/pom.xml                    |   17 +
 .../plugin-order/nexus-parent.xml                  |   19 +
 .../resources-project-builder/plugin-order/pom.xml |   28 +
 .../pluginmanagement-inherited/pom.xml             |   18 +
 .../pluginmanagement-inherited/sub/pom.xml         |   17 +
 .../pom-encoding/latin-1/pom.xml                   |   36 +
 .../pom-encoding/utf-8/pom.xml                     |   36 +
 .../pom-inheritance/pom.xml                        |  188 +
 .../pom-inheritance/sub/pom.xml                    |   36 +
 .../prerequisites-inheritance/child/pom.xml        |   36 +
 .../prerequisites-inheritance/pom.xml              |   33 +
 .../profile-default-deactivation/pom.xml           |   35 +
 .../profile-dependencies-multiple-profiles/pom.xml |   81 +
 .../profile-injected-dependencies/pom.xml          |   75 +
 .../profile-injection-order/pom.xml                |   68 +
 .../profile-module-inheritance/pom.xml             |   18 +
 .../profile-module-inheritance/sub/pom.xml         |   12 +
 .../profile-module/pom.xml                         |   24 +
 .../profile-plugin-mng-dependencies/pom.xml        |   77 +
 .../profile-plugin-mng-dependencies/sub/pom.xml    |   62 +
 .../profile-plugins/pom.xml                        |   52 +
 .../profile-properties-interpolation/pom.xml       |   54 +
 .../properties-inheritance/pom.xml                 |   34 +
 .../properties-inheritance/sub/pom.xml             |   40 +
 .../properties-no-duplication/pom.xml              |   12 +
 .../properties-no-duplication/sub/pom.xml          |   17 +
 .../repo-inheritance/pom.xml                       |   64 +
 .../reporting-interpolation/pom.xml                |    6 +
 .../reporting-plugin-config/pom.xml                |   51 +
 .../reporting-plugin-config/sub/pom.xml            |   48 +
 .../jetty-parent.xml                               |   37 +
 .../single-configuration-inheritance/pom.xml       |   41 +
 .../system-property-interpolation/pom.xml          |   30 +
 .../resources-project-builder/unc-path/pom.xml     |   41 +
 .../resources-project-builder/unc-path/sub/pom.xml |   57 +
 .../dep-mgmt-in-profile/pom.xml                    |   49 +
 .../unique-dependency-key/dep-mgmt/pom.xml         |   44 +
 .../unique-dependency-key/deps-in-profile/pom.xml  |   47 +
 .../unique-dependency-key/deps/pom.xml             |   42 +
 .../artifact-repo-in-profile/pom.xml               |   51 +
 .../unique-repo-id/artifact-repo/pom.xml           |   45 +
 .../unique-repo-id/plugin-repo-in-profile/pom.xml  |   51 +
 .../unique-repo-id/plugin-repo/pom.xml             |   45 +
 .../child/pom.xml                                  |  104 +
 .../unprefixed-expression-interpolation/pom.xml    |   36 +
 .../url-append/child/pom.xml                       |   64 +
 .../url-append/parent/pom.xml                      |   53 +
 .../url-inheritance/another-parent/pom.xml         |   36 +
 .../url-inheritance/another-parent/sub/pom.xml     |   35 +
 .../url-inheritance/pom.xml                        |   74 +
 .../url-inheritance/sub/pom.xml                    |   35 +
 .../url-no-decoding/pom.xml                        |   64 +
 .../xml-coalesce-text/pom.xml                      |  567 +++
 .../xml-markup-interpolation/pom.xml               |   41 +
 .../xml-whitespace/pom.xml                         |   43 +
 .../xml-whitespace/sub/pom.xml                     |   49 +
 .../test/resources-settings/repositories/pom.xml   |   29 +
 .../resources-settings/repositories/settings.xml   |   55 +
 .../resources-settings/settings-no-pom/pom.xml     |   13 +
 .../settings-no-pom/settings.xml                   |   20 +
 .../test-pom-and-settings-interpolation/pom.xml    |   78 +
 .../settings.xml                                   |   35 +
 .../org.apache.maven/maven-core/pom.properties     |    1 +
 .../test/resources/META-INF/plexus/components.xml  |  113 +
 maven-core/src/test/resources/canonical-pom.xml    |   55 +
 .../test/resources/dependencyManagement-pom.xml    |   65 +
 .../test/resources/distributionManagement-pom.xml  |   44 +
 .../t01/maven-test/jars/maven-test-a-1.0.jar       |    1 +
 .../t01/maven-test/jars/maven-test-a-1.1.jar       |    1 +
 .../t01/maven-test/jars/maven-test-b-1.0.jar       |    1 +
 .../t01/maven-test/jars/maven-test-b-1.1.jar       |    1 +
 .../t01/maven-test/jars/maven-test-c-1.0.jar       |    1 +
 .../t01/maven-test/jars/maven-test-c-1.1.jar       |    1 +
 .../t01/maven-test/jars/maven-test-d-1.0.jar       |    1 +
 .../t01/maven-test/jars/maven-test-d-1.1.jar       |    1 +
 .../t01/maven-test/jars/maven-test-d-1.2.jar       |    1 +
 .../t01/maven-test/poms/maven-test-a-1.0.pom       |   14 +
 .../t01/maven-test/poms/maven-test-a-1.1.pom       |   14 +
 .../t01/maven-test/poms/maven-test-b-1.0.pom       |    7 +
 .../t01/maven-test/poms/maven-test-b-1.1.pom       |    7 +
 .../t01/maven-test/poms/maven-test-c-1.0.pom       |    7 +
 .../t01/maven-test/poms/maven-test-c-1.1.pom       |    7 +
 .../t01/maven-test/poms/maven-test-d-1.0.pom       |    7 +
 .../t01/maven-test/poms/maven-test-d-1.1.pom       |    7 +
 .../t01/maven-test/poms/maven-test-d-1.2.pom       |    7 +
 .../test/resources/imports-repo/t01/p0/p1/pom.xml  |   45 +
 .../test/resources/imports-repo/t01/p0/p2/pom.xml  |   56 +
 .../test/resources/imports-repo/t01/p0/p3/pom.xml  |   59 +
 .../test/resources/imports-repo/t01/p0/p4/pom.xml  |   67 +
 .../src/test/resources/imports-repo/t01/p0/pom.xml |   26 +
 .../src/test/resources/local-repo/marker.txt       |    1 +
 .../maven-test/jars/maven-test-a-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-b-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-c-1.0.jar           |    1 +
 .../maven-test/jars/maven-test-d-1.0.jar           |    1 +
 .../maven-test/poms/maven-test-a-1.0.pom           |   23 +
 .../maven-test/poms/maven-test-b-1.0.pom           |   23 +
 .../maven-test/poms/maven-test-c-1.0.pom           |   16 +
 .../maven-test/poms/maven-test-d-1.1.pom           |    7 +
 .../maven-test/poms/maven-test-d-1.2.pom           |    7 +
 .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-e-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-e-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../poms/maven-test-snapshot-resolving-1.0.pom     |   49 +
 .../apache/maven/MavenLifecycleParticipantTest.xml |    9 +
 .../apache/maven/execution/test-extension-1.jar    |  Bin 0 -> 4208 bytes
 .../junit/junit/3.8.1/junit-3.8.1.jar              |  Bin 0 -> 121070 bytes
 .../junit/junit/3.8.1/junit-3.8.1.jar.md5          |    1 +
 .../junit/junit/3.8.1/junit-3.8.1.jar.sha1         |    1 +
 .../junit/junit/3.8.1/junit-3.8.1.pom              |   29 +
 .../junit/junit/3.8.1/junit-3.8.1.pom.md5          |    1 +
 .../junit/junit/3.8.1/junit-3.8.1.pom.sha1         |    1 +
 .../org/apache/apache/3/apache-3.pom               |   82 +
 .../org/apache/apache/3/apache-3.pom.md5           |    1 +
 .../org/apache/apache/3/apache-3.pom.sha1          |    1 +
 .../3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.jar   |  Bin 0 -> 163984 bytes
 .../maven-artifact-3.0-SNAPSHOT.jar.md5            |    1 +
 .../maven-artifact-3.0-SNAPSHOT.jar.sha1           |    1 +
 .../3.0-SNAPSHOT/maven-artifact-3.0-SNAPSHOT.pom   |  112 +
 .../maven-artifact-3.0-SNAPSHOT.pom.md5            |    1 +
 .../maven-artifact-3.0-SNAPSHOT.pom.sha1           |    1 +
 .../test/test-extension/1/test-extension-1.jar     |  Bin 0 -> 4208 bytes
 .../test/test-extension/1/test-extension-1.pom     |   73 +
 .../test/test-extension/1/test-extension-1.pom.md5 |    1 +
 .../test-extension/1/test-extension-1.pom.sha1     |    1 +
 .../1/test-lifecycle-and-artifactHandler-1.jar     |  Bin 0 -> 2582 bytes
 .../1/test-lifecycle-and-artifactHandler-1.pom     |   44 +
 .../1/test-lifecycle-and-artifactHandler-1.pom.md5 |    1 +
 .../test-lifecycle-and-artifactHandler-1.pom.sha1  |    1 +
 .../apache/maven/maven-parent/4/maven-parent-4.pom |  304 ++
 .../maven/maven-parent/4/maven-parent-4.pom.md5    |    1 +
 .../maven/maven-parent/4/maven-parent-4.pom.sha1   |    1 +
 .../apache/maven/maven-parent/5/maven-parent-5.pom |  466 +++
 .../maven/maven-parent/5/maven-parent-5.pom.md5    |    1 +
 .../maven/maven-parent/5/maven-parent-5.pom.sha1   |    1 +
 .../1.0-beta-2/wagon-provider-api-1.0-beta-2.jar   |  Bin 0 -> 46326 bytes
 .../wagon-provider-api-1.0-beta-2.jar.md5          |    1 +
 .../wagon-provider-api-1.0-beta-2.jar.sha1         |    1 +
 .../1.0-beta-2/wagon-provider-api-1.0-beta-2.pom   |   21 +
 .../wagon-provider-api-1.0-beta-2.pom.md5          |    1 +
 .../wagon-provider-api-1.0-beta-2.pom.sha1         |    1 +
 .../wagon/wagon/1.0-beta-2/wagon-1.0-beta-2.pom    |  170 +
 .../wagon/1.0-beta-2/wagon-1.0-beta-2.pom.md5      |    1 +
 .../wagon/1.0-beta-2/wagon-1.0-beta-2.pom.sha1     |    1 +
 .../plexus-active-collections-1.0-beta-1.jar       |  Bin 0 -> 15961 bytes
 .../plexus-active-collections-1.0-beta-1.jar.md5   |    1 +
 .../plexus-active-collections-1.0-beta-1.jar.sha1  |    1 +
 .../plexus-active-collections-1.0-beta-1.pom       |   51 +
 .../plexus-active-collections-1.0-beta-1.pom.md5   |    1 +
 .../plexus-active-collections-1.0-beta-1.pom.sha1  |    1 +
 .../plexus-classworlds-1.2-alpha-10.jar            |  Bin 0 -> 42472 bytes
 .../plexus-classworlds-1.2-alpha-10.jar.md5        |    1 +
 .../plexus-classworlds-1.2-alpha-10.jar.sha1       |    1 +
 .../plexus-classworlds-1.2-alpha-10.pom            |   94 +
 .../plexus-classworlds-1.2-alpha-10.pom.md5        |    1 +
 .../plexus-classworlds-1.2-alpha-10.pom.sha1       |    1 +
 .../1.2-alpha-7/plexus-classworlds-1.2-alpha-7.jar |  Bin 0 -> 42636 bytes
 .../plexus-classworlds-1.2-alpha-7.jar.md5         |    1 +
 .../plexus-classworlds-1.2-alpha-7.jar.sha1        |    1 +
 .../1.2-alpha-7/plexus-classworlds-1.2-alpha-7.pom |   78 +
 .../plexus-classworlds-1.2-alpha-7.pom.md5         |    1 +
 .../plexus-classworlds-1.2-alpha-7.pom.sha1        |    1 +
 .../plexus-component-api-1.0-alpha-16.jar          |  Bin 0 -> 33149 bytes
 .../plexus-component-api-1.0-alpha-16.jar.md5      |    1 +
 .../plexus-component-api-1.0-alpha-16.jar.sha1     |    1 +
 .../plexus-component-api-1.0-alpha-16.pom          |   63 +
 .../plexus-component-api-1.0-alpha-16.pom.md5      |    1 +
 .../plexus-component-api-1.0-alpha-16.pom.sha1     |    1 +
 .../plexus-component-api-1.0-alpha-32.jar          |  Bin 0 -> 36108 bytes
 .../plexus-component-api-1.0-alpha-32.jar.md5      |    1 +
 .../plexus-component-api-1.0-alpha-32.jar.sha1     |    1 +
 .../plexus-component-api-1.0-alpha-32.pom          |   61 +
 .../plexus-component-api-1.0-alpha-32.pom.md5      |    1 +
 .../plexus-component-api-1.0-alpha-32.pom.sha1     |    1 +
 .../1.1.6/plexus-components-1.1.6.pom              |   60 +
 .../1.1.6/plexus-components-1.1.6.pom.md5          |    1 +
 .../1.1.6/plexus-components-1.1.6.pom.sha1         |    1 +
 .../plexus-container-default-1.0-alpha-16.jar      |  Bin 0 -> 210679 bytes
 .../plexus-container-default-1.0-alpha-16.jar.md5  |    1 +
 .../plexus-container-default-1.0-alpha-16.jar.sha1 |    1 +
 .../plexus-container-default-1.0-alpha-16.pom      |   56 +
 .../plexus-container-default-1.0-alpha-16.pom.md5  |    1 +
 .../plexus-container-default-1.0-alpha-16.pom.sha1 |    1 +
 .../plexus-container-default-1.0-alpha-32.jar      |  Bin 0 -> 238880 bytes
 .../plexus-container-default-1.0-alpha-32.jar.md5  |    1 +
 .../plexus-container-default-1.0-alpha-32.jar.sha1 |    1 +
 .../plexus-container-default-1.0-alpha-32.pom      |   98 +
 .../plexus-container-default-1.0-alpha-32.pom.md5  |    1 +
 .../plexus-container-default-1.0-alpha-32.pom.sha1 |    1 +
 .../plexus-containers-1.0-alpha-16.pom             |   49 +
 .../plexus-containers-1.0-alpha-16.pom.md5         |    1 +
 .../plexus-containers-1.0-alpha-16.pom.sha1        |    1 +
 .../plexus-containers-1.0-alpha-32.pom             |   49 +
 .../plexus-containers-1.0-alpha-32.pom.md5         |    1 +
 .../plexus-containers-1.0-alpha-32.pom.sha1        |    1 +
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar   |  Bin 0 -> 168568 bytes
 .../plexus-utils/1.1/plexus-utils-1.1.jar.md5      |    1 +
 .../plexus-utils/1.1/plexus-utils-1.1.jar.sha1     |    1 +
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom   |   27 +
 .../plexus-utils/1.1/plexus-utils-1.1.pom.md5      |    1 +
 .../plexus-utils/1.1/plexus-utils-1.1.pom.sha1     |    1 +
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar      |  Bin 0 -> 205043 bytes
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar.md5  |    1 +
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.jar.sha1 |    1 +
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom      |   61 +
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom.md5  |    1 +
 .../plexus-utils/1.4.5/plexus-utils-1.4.5.pom.sha1 |    1 +
 .../plexus/plexus/1.0.10/plexus-1.0.10.pom         |  273 ++
 .../plexus/plexus/1.0.10/plexus-1.0.10.pom.md5     |    1 +
 .../plexus/plexus/1.0.10/plexus-1.0.10.pom.sha1    |    1 +
 .../plexus/plexus/1.0.11/plexus-1.0.11.pom         |  308 ++
 .../plexus/plexus/1.0.11/plexus-1.0.11.pom.md5     |    1 +
 .../plexus/plexus/1.0.11/plexus-1.0.11.pom.sha1    |    1 +
 .../codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom  |  205 +
 .../plexus/plexus/1.0.4/plexus-1.0.4.pom.md5       |    1 +
 .../plexus/plexus/1.0.4/plexus-1.0.4.pom.sha1      |    1 +
 .../codehaus/plexus/plexus/1.0.8/plexus-1.0.8.pom  |  259 ++
 .../plexus/plexus/1.0.8/plexus-1.0.8.pom.md5       |    1 +
 .../plexus/plexus/1.0.8/plexus-1.0.8.pom.sha1      |    1 +
 .../codehaus/plexus/plexus/1.0.9/plexus-1.0.9.pom  |  257 ++
 .../plexus/plexus/1.0.9/plexus-1.0.9.pom.md5       |    1 +
 .../plexus/plexus/1.0.9/plexus-1.0.9.pom.sha1      |    1 +
 .../extension/test-extension-repo/repo-marker.txt  |    1 +
 .../maven/lifecycle/LifecycleExecutorTest.xml      |    9 +
 .../resources/org/apache/maven/lifecycle/pom.xml   |  628 +++
 .../org/apache/maven/plugin/PluginManagerTest.xml  |    9 +
 .../maven/project/AbstractMavenProjectTestCase.xml |    9 +
 .../apache/maven/project/PomConstructionTest.xml   |   13 +
 .../maven/project/workspace/buildFromFile/pom.xml  |    8 +
 .../tests/project-caching/1/project-caching-1.pom  |    8 +
 .../tests/project-caching/maven-metadata-local.xml |   11 +
 .../project/workspace/buildModelLineage/pom.xml    |    7 +
 .../resolveParentPom/childAndParent/child/pom.xml  |   10 +
 .../resolveParentPom/childAndParent/pom.xml        |    7 +
 .../project/workspace/resolveParentPom/pom.xml     |   10 +
 .../settings/PomConstructionWithSettingsTest.xml   |    9 +
 .../org/apache/maven/toolchain/global.xml          |   35 +
 .../toolchain/model/toolchains-jdks-extend.xml     |   45 +
 .../toolchain/model/toolchains-jdks-extra.xml      |   45 +
 .../maven/toolchain/model/toolchains-jdks.xml      |   43 +
 .../resources/org/apache/maven/toolchain/user.xml  |   35 +
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.jar   |  Bin 0 -> 168568 bytes
 .../plexus-utils/1.1/plexus-utils-1.1.jar.sha1     |    1 +
 .../plexus/plexus-utils/1.1/plexus-utils-1.1.pom   |   27 +
 .../plexus-utils/1.1/plexus-utils-1.1.pom.sha1     |    1 +
 maven-core/src/test/resources/pom.xml              |   52 +
 .../project-dynamism/plugin-level-dep.pom.xml      |   24 +
 .../test/resources/project-dynamism/pom-interp.xml |   28 +
 .../resources/project-dynamism/pom-relative.xml    |   36 +
 .../src/test/resources/project-dynamism/pom.xml    |   36 +
 .../resources/projects/artifactMissingVersion.xml  |   34 +
 .../src/test/resources/projects/bad-dependency.xml |   27 +
 .../src/test/resources/projects/bad-project.xml    |   20 +
 maven-core/src/test/resources/projects/badPom.xml  |    8 +
 ...oject-which-needs-directory-alignment-child.xml |   33 +
 .../project-which-needs-directory-alignment.xml    |  135 +
 ...oject-which-needs-directory-alignment-child.xml |   29 +
 .../projects/basic-resolveDependencies.xml         |   15 +
 .../projects/build-path-expression-pom.xml         |   14 +
 .../src/test/resources/projects/build.properties   |   18 +
 .../child-which-inherits-from-super-model.xml      |   28 +
 .../resources/projects/child-with-bogus-parent.xml |   29 +
 maven-core/src/test/resources/projects/child.xml   |   33 +
 .../projects/duplicate-plugins-merged-pom.xml      |   48 +
 .../resources/projects/fully-populated-child.xml   |  168 +
 .../projects/future-model-version-pom.xml          |   25 +
 .../projects/future-schema-model-version-pom.xml   |   24 +
 .../grandchild-check/child/grandchild/pom.xml      |   10 +
 .../projects/grandchild-check/child/pom.xml        |   13 +
 .../resources/projects/grandchild-check/pom.xml    |    7 +
 ...pom-resolves-from-property-based-repository.xml |   31 +
 .../projects/modelsource/module01/pom.xml          |   12 +
 .../test/resources/projects/modelsource/pom.xml    |   13 +
 .../pom.xml                                        |   12 +
 .../pom.xml                                        |   11 +
 .../parent-version-range-external-valid/pom.xml    |   11 +
 .../child/pom.xml                                  |   12 +
 .../pom.xml                                        |    7 +
 .../child/pom.xml                                  |   11 +
 .../pom.xml                                        |    7 +
 .../parent-version-range-local-valid/child/pom.xml |   11 +
 .../parent-version-range-local-valid/pom.xml       |    7 +
 .../resources/projects/past-model-version-pom.xml  |   26 +
 maven-core/src/test/resources/projects/project.xml |  162 +
 .../projects/versionless-managed-dependency.xml    |   24 +
 .../maven-test/jars/maven-test-b-1.0.jar           |  Bin 0 -> 18874 bytes
 .../maven-test/jars/maven-test-b-1.0.jar.md5       |    1 +
 .../maven-test/poms/maven-test-b-1.0.pom           |   21 +
 .../jars/maven-snapshot-a-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-a-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-b-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-b-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../jars/maven-snapshot-c-1.0-SNAPSHOT.jar         |    1 +
 ...en-snapshot-c-1.0-SNAPSHOT.jar.snapshot-version |    1 +
 .../maven-test/jars/maven-test-z-1.0.jar           |    1 +
 .../resources/withActiveByDefaultProfile-pom.xml   |   40 +
 maven-embedder/pom.xml                             |  194 +
 maven-embedder/src/examples/simple-project/pom.xml |   39 +
 .../src/examples/simple-project/settings.xml       |   26 +
 .../main/java/org/apache/maven/embedder/App.java   |   28 +
 .../java/org/apache/maven/embedder/AppTest.java    |   53 +
 .../main/java/org/apache/maven/cli/CLIManager.java |  181 +
 .../org/apache/maven/cli/CLIReportingUtils.java    |  196 +
 .../java/org/apache/maven/cli/CleanArgument.java   |  125 +
 .../main/java/org/apache/maven/cli/CliRequest.java |  123 +
 .../main/java/org/apache/maven/cli/MavenCli.java   | 1746 +++++++++
 .../java/org/apache/maven/cli/ResolveFile.java     |   50 +
 .../cli/configuration/ConfigurationProcessor.java  |   31 +
 .../SettingsXmlConfigurationProcessor.java         |  277 ++
 .../maven/cli/event/DefaultEventSpyContext.java    |   41 +
 .../maven/cli/event/ExecutionEventLogger.java      |  488 +++
 .../internal/BootstrapCoreExtensionManager.java    |  146 +
 .../maven/cli/logging/BaseSlf4jConfiguration.java  |   45 +
 .../maven/cli/logging/Slf4jConfiguration.java      |   50 +
 .../cli/logging/Slf4jConfigurationFactory.java     |   79 +
 .../org/apache/maven/cli/logging/Slf4jLogger.java  |  145 +
 .../maven/cli/logging/Slf4jLoggerManager.java      |  111 +
 .../maven/cli/logging/Slf4jStdoutLogger.java       |  306 ++
 .../cli/logging/impl/Log4j2Configuration.java      |   59 +
 .../cli/logging/impl/LogbackConfiguration.java     |   61 +
 .../cli/logging/impl/Slf4jSimpleConfiguration.java |   63 +
 .../impl/UnsupportedSlf4jBindingConfiguration.java |   72 +
 .../transfer/AbstractMavenTransferListener.java    |  272 ++
 .../transfer/BatchModeMavenTransferListener.java   |   35 +
 .../cli/transfer/ConsoleMavenTransferListener.java |  169 +
 .../cli/transfer/QuietMavenTransferListener.java   |   31 +
 .../cli/transfer/Slf4jMavenTransferListener.java   |  103 +
 .../src/main/java/org/slf4j/MavenSlf4jFriend.java  |   35 +
 .../org/slf4j/impl/MavenSlf4jSimpleFriend.java     |   40 +
 maven-embedder/src/main/mdo/core-extensions.mdo    |   88 +
 .../META-INF/maven/slf4j-configuration.properties  |   23 +
 maven-embedder/src/site/apt/cli.apt.vm             |   28 +
 maven-embedder/src/site/apt/index.apt.vm           |   49 +
 maven-embedder/src/site/apt/logging.apt            |   92 +
 maven-embedder/src/site/site.xml                   |   42 +
 .../maven/cli/CLIManagerDocumentationTest.java     |  108 +
 .../java/org/apache/maven/cli/CLIManagerTest.java  |   50 +
 .../apache/maven/cli/CLIReportingUtilsTest.java    |   40 +
 .../org/apache/maven/cli/CleanArgumentTest.java    |   61 +
 .../java/org/apache/maven/cli/MavenCliTest.java    |  334 ++
 .../maven/cli/event/ExecutionEventLoggerTest.java  |  106 +
 .../maven/cli/transfer/FileSizeFormatTest.java     |  302 ++
 .../test/projects/config-illegal/.mvn/maven.config |    1 +
 .../src/test/projects/config/.mvn/maven.config     |    2 +
 .../mavenConfigProperties/.mvn/maven.config        |    3 +
 maven-metrics/pom.xml                              |   44 +
 .../java/org/apache/maven/metrics/Counter.java     |   54 +
 .../main/java/org/apache/maven/metrics/Gauge.java  |   38 +
 .../org/apache/maven/metrics/MetricsContext.java   |   92 +
 .../org/apache/maven/metrics/MetricsProvider.java  |   83 +
 .../metrics/MetricsProviderLifeCycleException.java |   51 +
 .../java/org/apache/maven/metrics/Summary.java     |   37 +
 .../java/org/apache/maven/metrics/SummarySet.java  |   39 +
 .../maven/metrics/impl/NullMetricsProvider.java    |  160 +
 maven-model-builder/pom.xml                        |  103 +
 .../building/AbstractModelBuildingListener.java    |   37 +
 .../maven/model/building/ArtifactModelSource.java  |   59 +
 .../maven/model/building/DefaultModelBuilder.java  | 1519 ++++++++
 .../model/building/DefaultModelBuilderFactory.java |  243 ++
 .../model/building/DefaultModelBuildingEvent.java  |   64 +
 .../building/DefaultModelBuildingRequest.java      |  411 ++
 .../model/building/DefaultModelBuildingResult.java |  175 +
 .../maven/model/building/DefaultModelProblem.java  |  176 +
 .../building/DefaultModelProblemCollector.java     |  200 +
 .../model/building/DefaultModelProcessor.java      |  114 +
 .../maven/model/building/FileModelSource.java      |  111 +
 .../model/building/FilterModelBuildingRequest.java |  285 ++
 .../apache/maven/model/building/ModelBuilder.java  |   63 +
 .../maven/model/building/ModelBuildingEvent.java   |   53 +
 .../model/building/ModelBuildingEventCatapult.java |   41 +
 .../model/building/ModelBuildingException.java     |  180 +
 .../model/building/ModelBuildingListener.java      |   40 +
 .../maven/model/building/ModelBuildingRequest.java |  338 ++
 .../maven/model/building/ModelBuildingResult.java  |   99 +
 .../apache/maven/model/building/ModelCache.java    |   85 +
 .../apache/maven/model/building/ModelCacheTag.java |  158 +
 .../org/apache/maven/model/building/ModelData.java |  222 ++
 .../apache/maven/model/building/ModelProblem.java  |  120 +
 .../model/building/ModelProblemCollector.java      |   41 +
 .../model/building/ModelProblemCollectorExt.java   |   37 +
 .../building/ModelProblemCollectorRequest.java     |   95 +
 .../maven/model/building/ModelProblemUtils.java    |  175 +
 .../maven/model/building/ModelProcessor.java       |   35 +
 .../apache/maven/model/building/ModelSource.java   |   38 +
 .../apache/maven/model/building/ModelSource2.java  |   56 +
 .../org/apache/maven/model/building/Result.java    |  265 ++
 .../maven/model/building/StringModelSource.java    |   56 +
 .../maven/model/building/UrlModelSource.java       |   46 +
 .../DefaultDependencyManagementImporter.java       |   86 +
 .../composition/DependencyManagementImporter.java  |   48 +
 .../inheritance/DefaultInheritanceAssembler.java   |  363 ++
 .../model/inheritance/InheritanceAssembler.java    |   48 +
 .../AbstractStringBasedModelInterpolator.java      |  215 ++
 .../interpolation/BuildTimestampValueSource.java   |   47 +
 .../model/interpolation/MavenBuildTimestamp.java   |   77 +
 .../model/interpolation/ModelInterpolator.java     |   52 +
 .../PathTranslatingPostProcessor.java              |   67 +
 .../interpolation/ProblemDetectingValueSource.java |   86 +
 .../StringSearchModelInterpolator.java             |  516 +++
 .../StringVisitorModelInterpolator.java            | 1455 +++++++
 .../interpolation/UrlNormalizingPostProcessor.java |   69 +
 .../apache/maven/model/io/DefaultModelReader.java  |  121 +
 .../apache/maven/model/io/DefaultModelWriter.java  |   93 +
 .../apache/maven/model/io/ModelParseException.java |   93 +
 .../org/apache/maven/model/io/ModelReader.java     |   89 +
 .../org/apache/maven/model/io/ModelWriter.java     |   74 +
 .../maven/model/locator/DefaultModelLocator.java   |   44 +
 .../apache/maven/model/locator/ModelLocator.java   |   44 +
 .../DefaultDependencyManagementInjector.java       |  117 +
 .../DefaultPluginManagementInjector.java           |  144 +
 .../management/DependencyManagementInjector.java   |   44 +
 .../model/management/PluginManagementInjector.java |   44 +
 .../apache/maven/model/merge/MavenModelMerger.java |  699 ++++
 .../normalization/DefaultModelNormalizer.java      |  141 +
 .../maven/model/normalization/ModelNormalizer.java |   54 +
 .../model/path/DefaultModelPathTranslator.java     |  114 +
 .../model/path/DefaultModelUrlNormalizer.java      |   87 +
 .../maven/model/path/DefaultPathTranslator.java    |   68 +
 .../maven/model/path/DefaultUrlNormalizer.java     |   75 +
 .../maven/model/path/ModelPathTranslator.java      |   45 +
 .../maven/model/path/ModelUrlNormalizer.java       |   42 +
 .../apache/maven/model/path/PathTranslator.java    |   43 +
 .../org/apache/maven/model/path/UrlNormalizer.java |   39 +
 .../plugin/DefaultPluginConfigurationExpander.java |   86 +
 .../plugin/DefaultReportConfigurationExpander.java |   68 +
 .../model/plugin/DefaultReportingConverter.java    |  274 ++
 .../model/plugin/LifecycleBindingsInjector.java    |   46 +
 .../model/plugin/PluginConfigurationExpander.java  |   43 +
 .../model/plugin/ReportConfigurationExpander.java  |   43 +
 .../maven/model/plugin/ReportingConverter.java     |   44 +
 .../profile/DefaultProfileActivationContext.java   |  259 ++
 .../model/profile/DefaultProfileInjector.java      |  256 ++
 .../model/profile/DefaultProfileSelector.java      |  146 +
 .../model/profile/ProfileActivationContext.java    |   79 +
 .../maven/model/profile/ProfileInjector.java       |   46 +
 .../maven/model/profile/ProfileSelector.java       |   49 +
 .../profile/activation/FileProfileActivator.java   |  195 +
 .../activation/JdkVersionProfileActivator.java     |  227 ++
 .../OperatingSystemProfileActivator.java           |  171 +
 .../model/profile/activation/ProfileActivator.java |   59 +
 .../activation/PropertyProfileActivator.java       |  129 +
 .../resolution/InvalidRepositoryException.java     |   73 +
 .../maven/model/resolution/ModelResolver.java      |  125 +
 .../resolution/UnresolvableModelException.java     |  126 +
 .../model/resolution/WorkspaceModelResolver.java   |   36 +
 .../model/superpom/DefaultSuperPomProvider.java    |   99 +
 .../maven/model/superpom/SuperPomProvider.java     |   42 +
 .../model/validation/DefaultModelValidator.java    | 1364 +++++++
 .../maven/model/validation/ModelValidator.java     |   54 +
 .../resources/org/apache/maven/model/pom-4.0.0.xml |  150 +
 maven-model-builder/src/site/apt/index.apt         |  217 ++
 maven-model-builder/src/site/apt/super-pom.apt.vm  |   30 +
 maven-model-builder/src/site/site.xml              |   42 +
 .../model/building/ComplexActivationTest.java      |   60 +
 .../building/DefaultModelBuilderFactoryTest.java   |   59 +
 .../maven/model/building/FileModelSourceTest.java  |   75 +
 .../model/building/SimpleProblemCollector.java     |   89 +
 .../DefaultInheritanceAssemblerTest.java           |  237 ++
 .../AbstractModelInterpolatorTest.java             |  505 +++
 .../interpolation/MavenBuildTimestampTest.java     |   38 +
 .../StringSearchModelInterpolatorTest.java         |  611 +++
 .../maven/model/merge/MavenModelMergerTest.java    |  101 +
 .../maven/model/path/DefaultUrlNormalizerTest.java |   90 +
 .../activation/AbstractProfileActivatorTest.java   |   85 +
 .../activation/JdkVersionProfileActivatorTest.java |  185 +
 .../activation/PropertyProfileActivatorTest.java   |  185 +
 .../validation/DefaultModelValidatorTest.java      |  817 ++++
 .../src/test/resources/poms/factory/complex.xml    |   49 +
 .../src/test/resources/poms/factory/simple.xml     |   81 +
 .../poms/inheritance/empty-urls-child.xml          |   31 +
 .../poms/inheritance/empty-urls-expected.xml       |   44 +
 .../poms/inheritance/empty-urls-parent.xml         |   42 +
 .../resources/poms/inheritance/flat-urls-child.xml |   34 +
 .../poms/inheritance/flat-urls-expected.xml        |   50 +
 .../poms/inheritance/flat-urls-parent.xml          |   49 +
 .../module-path-not-artifactId-child.xml           |   43 +
 .../module-path-not-artifactId-expected.xml        |   58 +
 .../module-path-not-artifactId-parent.xml          |   48 +
 .../poms/inheritance/no-append-urls-child.xml      |   34 +
 .../poms/inheritance/no-append-urls-expected.xml   |   53 +
 .../poms/inheritance/no-append-urls-parent.xml     |   52 +
 .../poms/inheritance/no-append-urls2-child.xml     |   43 +
 .../poms/inheritance/no-append-urls2-expected.xml  |   50 +
 .../poms/inheritance/no-append-urls2-parent.xml    |   45 +
 .../poms/inheritance/no-append-urls3-child.xml     |   41 +
 .../poms/inheritance/no-append-urls3-expected.xml  |   50 +
 .../poms/inheritance/no-append-urls3-parent.xml    |   45 +
 .../inheritance/plugin-configuration-child.xml     |   61 +
 .../inheritance/plugin-configuration-expected.xml  |   87 +
 .../inheritance/plugin-configuration-parent.xml    |   89 +
 .../tricky-flat-artifactId-urls-child.xml          |   34 +
 .../tricky-flat-artifactId-urls-expected.xml       |   50 +
 .../tricky-flat-artifactId-urls-parent.xml         |   49 +
 .../tricky-flat-directory-urls-child.xml           |   34 +
 .../tricky-flat-directory-urls-expected.xml        |   50 +
 .../tricky-flat-directory-urls-parent.xml          |   49 +
 .../test/resources/poms/inheritance/urls-child.xml |   34 +
 .../resources/poms/inheritance/urls-expected.xml   |   50 +
 .../resources/poms/inheritance/urls-parent.xml     |   49 +
 .../validation/bad-dependency-exclusion-id.xml     |   40 +
 .../validation/bad-dependency-management-scope.xml |   72 +
 .../poms/validation/bad-dependency-scope.xml       |   69 +
 .../poms/validation/bad-dependency-version.xml     |   43 +
 .../validation/bad-import-scope-classifier.xml     |   38 +
 .../poms/validation/bad-import-scope-type.xml      |   37 +
 .../resources/poms/validation/bad-modelVersion.xml |   25 +
 .../validation/bad-plugin-dependency-scope.xml     |   70 +
 .../validation/bad-plugin-dependency-version.xml   |   46 +
 .../poms/validation/bad-plugin-version.xml         |   55 +
 .../poms/validation/bad-repository-id.xml          |   50 +
 .../poms/validation/bad-snapshot-version.xml       |   25 +
 .../test/resources/poms/validation/bad-version.xml |   25 +
 .../poms/validation/basedir-system-path.xml        |   42 +
 ...-dependency-metaversions-latest-and-release.xml |   38 +
 .../validation/distribution-management-status.xml  |   29 +
 .../resources/poms/validation/duplicate-module.xml |   31 +
 .../poms/validation/duplicate-plugin-execution.xml |  103 +
 .../resources/poms/validation/duplicate-plugin.xml |   81 +
 .../poms/validation/duplicate-profile-id.xml       |   35 +
 .../resources/poms/validation/empty-module.xml     |   30 +
 .../poms/validation/empty-plugin-version.xml       |   34 +
 .../poms/validation/hard-coded-system-path.xml     |   42 +
 .../poms/validation/incomplete-parent.xml          |   30 +
 .../invalid-aggregator-packaging-pom.xml           |   30 +
 .../resources/poms/validation/invalid-ids-pom.xml  |   26 +
 .../resources/poms/validation/missing-1-pom.xml    |   21 +
 .../poms/validation/missing-artifactId-pom.xml     |   25 +
 .../missing-dependency-artifactId-pom.xml          |   32 +
 .../validation/missing-dependency-exclusion-id.xml |   39 +
 .../validation/missing-dependency-groupId-pom.xml  |   32 +
 .../missing-dependency-mgmt-artifactId-pom.xml     |   34 +
 .../missing-dependency-mgmt-groupId-pom.xml        |   34 +
 .../missing-dependency-mgmt-version-pom.xml        |   34 +
 .../validation/missing-dependency-version-pom.xml  |   32 +
 .../poms/validation/missing-groupId-pom.xml        |   25 +
 .../poms/validation/missing-modelVersion-pom.xml   |   25 +
 .../validation/missing-plugin-artifactId-pom.xml   |   33 +
 .../missing-plugin-dependency-artifactId.xml       |   41 +
 .../missing-plugin-dependency-groupId.xml          |   41 +
 .../missing-plugin-dependency-version.xml          |   41 +
 .../poms/validation/missing-plugin-version-pom.xml |   33 +
 .../validation/missing-report-artifactId-pom.xml   |   33 +
 .../poms/validation/missing-report-version-pom.xml |   57 +
 .../poms/validation/missing-repository-id-pom.xml  |   36 +
 .../validation/missing-resource-directory-pom.xml  |   38 +
 .../resources/poms/validation/missing-type-pom.xml |   26 +
 .../poms/validation/missing-version-pom.xml        |   25 +
 .../raw-model/bad-ci-friendly-sha1plus.xml         |   31 +
 .../raw-model/bad-ci-friendly-sha1plus2.xml        |   31 +
 .../poms/validation/raw-model/bad-ci-friendly.xml  |   31 +
 .../raw-model/bad-parent-version-latest.xml        |   37 +
 .../raw-model/bad-parent-version-release.xml       |   37 +
 .../missing-artifactId-pluginManagement.xml        |   39 +
 .../raw-model/missing-ga-pluginManagement.xml      |   39 +
 .../raw-model/missing-groupId-pluginManagement.xml |   39 +
 .../missing-plugin-version-pluginManagement.xml    |   40 +
 .../raw-model/ok-ci-friendly-all-expressions.xml   |   31 +
 .../raw-model/ok-ci-friendly-changelist.xml        |   31 +
 .../raw-model/ok-ci-friendly-revision.xml          |   31 +
 .../validation/raw-model/ok-ci-friendly-sha1.xml   |   31 +
 .../raw-model/self-referencing-classifier.xml      |   39 +
 .../poms/validation/raw-model/self-referencing.xml |   38 +
 .../poms/validation/reserved-repository-id.xml     |   50 +
 maven-model/pom.xml                                |   79 +
 .../apache/maven/model/io/xpp3/package-info.java   |   30 +
 .../org/apache/maven/model/merge/ModelMerger.java  | 2795 ++++++++++++++
 .../org/apache/maven/model/merge/package-info.java |   24 +
 .../java/org/apache/maven/model/package-info.java  |   25 +
 maven-model/src/main/mdo/maven.mdo                 | 3164 +++++++++++++++
 maven-model/src/site/apt/index.apt                 |   39 +
 maven-model/src/site/site.xml                      |   38 +
 .../org/apache/maven/model/ActivationFileTest.java |   56 +
 .../org/apache/maven/model/ActivationOSTest.java   |   56 +
 .../apache/maven/model/ActivationPropertyTest.java |   56 +
 .../org/apache/maven/model/ActivationTest.java     |   56 +
 .../java/org/apache/maven/model/BuildTest.java     |   56 +
 .../org/apache/maven/model/CiManagementTest.java   |   56 +
 .../org/apache/maven/model/ContributorTest.java    |   56 +
 .../maven/model/DependencyManagementTest.java      |   56 +
 .../org/apache/maven/model/DependencyTest.java     |   56 +
 .../maven/model/DeploymentRepositoryTest.java      |   56 +
 .../java/org/apache/maven/model/DeveloperTest.java |   56 +
 .../maven/model/DistributionManagementTest.java    |   56 +
 .../java/org/apache/maven/model/ExclusionTest.java |   56 +
 .../java/org/apache/maven/model/ExtensionTest.java |   56 +
 .../apache/maven/model/IssueManagementTest.java    |   56 +
 .../java/org/apache/maven/model/LicenseTest.java   |   56 +
 .../org/apache/maven/model/MailingListTest.java    |   56 +
 .../java/org/apache/maven/model/ModelTest.java     |   56 +
 .../java/org/apache/maven/model/NotifierTest.java  |   56 +
 .../org/apache/maven/model/OrganizationTest.java   |   56 +
 .../java/org/apache/maven/model/ParentTest.java    |   56 +
 .../maven/model/PluginConfigurationTest.java       |   56 +
 .../apache/maven/model/PluginContainerTest.java    |   56 +
 .../apache/maven/model/PluginExecutionTest.java    |   56 +
 .../apache/maven/model/PluginManagementTest.java   |   56 +
 .../java/org/apache/maven/model/PluginTest.java    |   56 +
 .../org/apache/maven/model/PrerequisitesTest.java  |   56 +
 .../java/org/apache/maven/model/ProfileTest.java   |   56 +
 .../org/apache/maven/model/RelocationTest.java     |   56 +
 .../org/apache/maven/model/ReportPluginTest.java   |   56 +
 .../java/org/apache/maven/model/ReportSetTest.java |   56 +
 .../java/org/apache/maven/model/ReportingTest.java |   56 +
 .../apache/maven/model/RepositoryPolicyTest.java   |   56 +
 .../org/apache/maven/model/RepositoryTest.java     |   56 +
 .../java/org/apache/maven/model/ResourceTest.java  |   56 +
 .../test/java/org/apache/maven/model/ScmTest.java  |   56 +
 .../test/java/org/apache/maven/model/SiteTest.java |   56 +
 .../apache/maven/model/merge/ModelMergerTest.java  |  430 +++
 maven-plugin-api/pom.xml                           |   87 +
 .../apache/maven/monitor/logging/DefaultLog.java   |  131 +
 .../java/org/apache/maven/plugin/AbstractMojo.java |  193 +
 .../plugin/AbstractMojoExecutionException.java     |   53 +
 .../org/apache/maven/plugin/ContextEnabled.java    |   44 +
 .../main/java/org/apache/maven/plugin/Mojo.java    |   69 +
 .../maven/plugin/MojoExecutionException.java       |   79 +
 .../apache/maven/plugin/MojoFailureException.java  |   68 +
 .../apache/maven/plugin/MojoNotFoundException.java |   88 +
 .../DuplicateMojoDescriptorException.java          |   37 +
 .../descriptor/DuplicateParameterException.java    |   34 +
 .../descriptor/InvalidParameterException.java      |   37 +
 .../InvalidPluginDescriptorException.java          |   41 +
 .../maven/plugin/descriptor/MojoDescriptor.java    |  718 ++++
 .../apache/maven/plugin/descriptor/Parameter.java  |  207 +
 .../maven/plugin/descriptor/PluginDescriptor.java  |  439 +++
 .../plugin/descriptor/PluginDescriptorBuilder.java |  357 ++
 .../maven/plugin/descriptor/Requirement.java       |   72 +
 .../java/org/apache/maven/plugin/logging/Log.java  |  149 +
 .../maven/plugin/logging/SystemStreamLog.java      |  196 +
 maven-plugin-api/src/main/mdo/lifecycle.mdo        |  129 +
 maven-plugin-api/src/main/mdo/plugin.mdo           |  525 +++
 maven-plugin-api/src/site/apt/index.apt            |   39 +
 maven-plugin-api/src/site/site.xml                 |   42 +
 .../descriptor/PluginDescriptorBuilderTest.java    |  134 +
 maven-plugin-api/src/test/resources/plugin.xml     |   90 +
 maven-repository-metadata/pom.xml                  |   57 +
 .../src/main/mdo/metadata.mdo                      |  371 ++
 maven-repository-metadata/src/site/apt/index.apt   |   52 +
 maven-repository-metadata/src/site/site.xml        |   38 +
 maven-resolver-provider/pom.xml                    |  132 +
 .../internal/ArtifactDescriptorReaderDelegate.java |  157 +
 .../internal/ArtifactDescriptorUtils.java          |   81 +
 .../internal/DefaultArtifactDescriptorReader.java  |  390 ++
 .../repository/internal/DefaultModelCache.java     |  119 +
 .../repository/internal/DefaultModelResolver.java  |  276 ++
 .../internal/DefaultVersionRangeResolver.java      |  276 ++
 .../internal/DefaultVersionResolver.java           |  612 +++
 .../repository/internal/LocalSnapshotMetadata.java |  163 +
 .../internal/LocalSnapshotMetadataGenerator.java   |   82 +
 .../repository/internal/MavenAetherModule.java     |   80 +
 .../maven/repository/internal/MavenMetadata.java   |  137 +
 .../internal/MavenRepositorySystemUtils.java       |  145 +
 .../repository/internal/MavenResolverModule.java   |   73 +
 .../repository/internal/MavenSnapshotMetadata.java |  100 +
 .../repository/internal/MavenWorkspaceReader.java  |   35 +
 .../repository/internal/RelocatedArtifact.java     |  114 +
 .../internal/RemoteSnapshotMetadata.java           |  157 +
 .../internal/RemoteSnapshotMetadataGenerator.java  |  107 +
 .../internal/SnapshotMetadataGeneratorFactory.java |   55 +
 .../repository/internal/VersionsMetadata.java      |  133 +
 .../internal/VersionsMetadataGenerator.java        |  108 +
 .../internal/VersionsMetadataGeneratorFactory.java |   55 +
 .../maven/repository/internal/package-info.java    |   25 +
 maven-resolver-provider/src/site/apt/index.apt     |   33 +
 maven-resolver-provider/src/site/site.xml          |   38 +
 .../internal/AbstractRepositoryTestCase.java       |   87 +
 .../DefaultArtifactDescriptorReaderTest.java       |   77 +
 .../internal/DefaultModelResolverTest.java         |  222 ++
 .../internal/DefaultVersionResolverTest.java       |   96 +
 .../internal/MavenRepositorySystemUtilsTest.java   |   45 +
 .../internal/RemoteSnapshotMetadataTest.java       |   82 +
 .../repository/internal/RepositorySystemTest.java  |  220 ++
 .../internal/util/ConsoleRepositoryListener.java   |  132 +
 .../internal/util/ConsoleTransferListener.java     |  186 +
 .../07.20.3-SNAPSHOT/maven-metadata.xml            |   49 +
 .../dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml  |   47 +
 .../artifact/1.0/artifact-1.0-classifier.zip       |    0
 .../repo/ut/simple/artifact/1.0/artifact-1.0.jar   |    0
 .../repo/ut/simple/artifact/1.0/artifact-1.0.pom   |   48 +
 .../repo/ut/simple/artifact/1.0/artifact-1.0.zip   |    0
 .../repo/ut/simple/artifact/maven-metadata.xml     |   34 +
 .../dependency/1.0/dependency-1.0-sources.jar      |    0
 .../ut/simple/dependency/1.0/dependency-1.0.jar    |    0
 .../ut/simple/dependency/1.0/dependency-1.0.pom    |   31 +
 .../repo/ut/simple/dependency/maven-metadata.xml   |   34 +
 .../repo/ut/simple/parent/1.0/parent-1.0.pom       |   43 +
 .../repo/ut/simple/parent/maven-metadata.xml       |   34 +
 maven-settings-builder/pom.xml                     |   79 +
 .../settings/building/DefaultSettingsBuilder.java  |  282 ++
 .../building/DefaultSettingsBuilderFactory.java    |   67 +
 .../building/DefaultSettingsBuildingRequest.java   |  159 +
 .../building/DefaultSettingsBuildingResult.java    |   58 +
 .../settings/building/DefaultSettingsProblem.java  |  166 +
 .../building/DefaultSettingsProblemCollector.java  |   70 +
 .../settings/building/FileSettingsSource.java      |   59 +
 .../maven/settings/building/SettingsBuilder.java   |   40 +
 .../building/SettingsBuildingException.java        |   90 +
 .../settings/building/SettingsBuildingRequest.java |  131 +
 .../settings/building/SettingsBuildingResult.java  |   50 +
 .../maven/settings/building/SettingsProblem.java   |  100 +
 .../building/SettingsProblemCollector.java         |   41 +
 .../maven/settings/building/SettingsSource.java    |   35 +
 .../settings/building/StringSettingsSource.java    |   69 +
 .../maven/settings/building/UrlSettingsSource.java |   60 +
 .../settings/crypto/DefaultSettingsDecrypter.java  |  117 +
 .../crypto/DefaultSettingsDecryptionRequest.java   |  120 +
 .../crypto/DefaultSettingsDecryptionResult.java    |   81 +
 .../maven/settings/crypto/SettingsDecrypter.java   |   38 +
 .../settings/crypto/SettingsDecryptionRequest.java |   65 +
 .../settings/crypto/SettingsDecryptionResult.java  |   71 +
 .../maven/settings/io/DefaultSettingsReader.java   |   97 +
 .../maven/settings/io/DefaultSettingsWriter.java   |   93 +
 .../maven/settings/io/SettingsParseException.java  |   93 +
 .../apache/maven/settings/io/SettingsReader.java   |   82 +
 .../apache/maven/settings/io/SettingsWriter.java   |   74 +
 .../maven/settings/merge/MavenSettingsMerger.java  |  142 +
 .../validation/DefaultSettingsValidator.java       |  288 ++
 .../settings/validation/SettingsValidator.java     |   41 +
 maven-settings-builder/src/site/site.xml           |   38 +
 .../DefaultSettingsBuilderFactoryTest.java         |   53 +
 .../validation/DefaultSettingsValidatorTest.java   |  244 ++
 .../src/test/resources/settings/factory/simple.xml |   24 +
 maven-settings/pom.xml                             |   57 +
 .../org/apache/maven/settings/RuntimeInfo.java     |   55 +
 maven-settings/src/main/mdo/settings.mdo           | 1073 ++++++
 maven-settings/src/site/apt/index.apt              |   36 +
 maven-settings/src/site/site.xml                   |   38 +
 maven-slf4j-provider/pom.xml                       |  104 +
 .../org/slf4j/impl/MavenFailOnSeverityLogger.java  |  142 +
 .../java/org/slf4j/impl/MavenLoggerFactory.java    |   82 +
 .../java/org/slf4j/impl/MavenSimpleLogger.java     |  120 +
 .../java/org/slf4j/impl/StaticLoggerBinder.java    |   89 +
 maven-slf4j-provider/src/site/site.xml             |   38 +
 .../org/slf4j/impl/MavenLoggerFactoryTest.java     |   90 +
 maven-slf4j-wrapper/pom.xml                        |   44 +
 .../apache/maven/logwrapper/LogLevelRecorder.java  |   55 +
 .../maven/logwrapper/MavenSlf4jWrapperFactory.java |   33 +
 maven-slf4j-wrapper/src/site/site.xml              |   38 +
 .../maven/logwrapper/LogLevelRecorderTest.java     |   49 +
 pom.xml                                            |  728 ++++
 src/site/resources/images/maven-deps.png           |  Bin 0 -> 104566 bytes
 src/site/site.xml                                  |   70 +
 src/site/xdoc/index.xml                            |   82 +
 src/site/xdoc/maven-deps.odg                       |  Bin 0 -> 19887 bytes
 1894 files changed, 186770 insertions(+)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..9989fb1
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,92 @@
+<!---
+ 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.
+-->
+Contributing to Apache Maven 
+======================
+
+You have found a bug or you have an idea for a cool new feature? Contributing
+code is a great way to give something back to the open source community. Before
+you dig right into the code, there are a few guidelines that we need
+contributors to follow so that we can have a chance of keeping on top of
+things.
+
+Some of the ideas are documented in the [Maven Wiki][maven-wiki]
+which might be interesting to read and for further discussion.
+
+Getting Started
+---------------
+
++ Make sure you have a [JIRA account](https://issues.apache.org/jira/).
++ Make sure you have a [GitHub account](https://github.com/signup/free).
++ If you're planning to implement a new feature, it makes sense to discuss your changes 
+  on the [dev list](https://maven.apache.org/mailing-lists.html) first.
+  This way you can make sure you're not wasting your time on something that isn't 
+  considered to be in Apache Maven's scope.
++ Submit a ticket for your issue, assuming one does not already exist.
+  + Clearly describe the issue, including steps to reproduce when it is a bug.
+  + Make sure you fill in the earliest version that you know has the issue.
++ Fork the repository on GitHub.
+
+Making and Submitting Changes
+--------------
+
+We accept Pull Requests via GitHub. The [developer mailing list][dev-ml-list] is the
+main channel of communication for contributors.  
+There are some guidelines which will make applying PRs easier for us:
++ Create a topic branch from where you want to base your work (this is usually the master branch).
+  Push your changes to a topic branch in your fork of the repository.
++ Make commits of logical units.
++ Respect the original code style: by using the same [codestyle][code-style],
+  patches should only highlight the actual difference, not being disturbed by any formatting issues:
+  + Only use spaces for indentation.
+  + Create minimal diffs - disable on save actions like reformat source code or organize imports. 
+    If you feel the source code should be reformatted, create a separate PR for this change.
+  + Check for unnecessary whitespace with `git diff --check` before committing.
++ Make sure your commit messages are in the proper format. Your commit message should contain the key of the JIRA issue.
+```
+[MNG-XXX] - Subject of the JIRA Ticket
+ Optional supplemental description.
+```
++ Make sure you have added the necessary tests (JUnit/[Core IT tests][core-it]) for your changes.
++ Run all the tests with `mvn -Prun-its verify` to assure nothing else was accidentally broken.
++ Submit a pull request to the repository in the Apache organization.
++ Update your JIRA ticket and include a link to the pull request in the ticket.
+
+If you plan to contribute on a regular basis, please consider filing a [contributor license agreement][cla].
+
+Making Trivial Changes
+----------------------
+
+For changes of a trivial nature to comments and documentation, it is not always
+necessary to create a new ticket in JIRA.  In this case, it is appropriate to
+start the first line of a commit with '(doc)' instead of a ticket number.
+
+Additional Resources
+--------------------
+
++ [Contributing patches](https://maven.apache.org/guides/development/guide-maven-development.html#Creating_and_submitting_a_patch)
++ [Apache Maven JIRA project page](https://issues.apache.org/jira/projects/MNG/)
++ [Contributor License Agreement][cla]
++ [General GitHub documentation](https://help.github.com/)
++ [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
++ [Apache Maven Twitter Account](https://twitter.com/ASFMavenProject)
++ #Maven IRC channel on freenode.org
+
+[dev-ml-list]: https://maven.apache.org/mailing-lists.html
+[code-style]: https://maven.apache.org/developers/conventions/code.html
+[cla]: https://www.apache.org/licenses/#clas
+[maven-wiki]: https://cwiki.apache.org/confluence/display/MAVEN/Index
+[core-it]: https://maven.apache.org/core-its/core-it-suite/
diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..ff917a2
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,169 @@
+/*
+ * 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.
+ */
+
+properties([buildDiscarder(logRotator(artifactNumToKeepStr: '5', numToKeepStr: env.BRANCH_NAME=='master'?'5':'1'))])
+
+def buildOs = 'linux'
+def buildJdk = '8'
+def buildMvn = '3.6.2'
+def runITsOses = ['linux', 'windows']
+def runITsJdks = ['8', '11', '13', '14']
+def runITsMvn = '3.6.2'
+def runITscommand = "mvn clean install -Prun-its,embedded -B -U -V" // -DmavenDistro=... -Dmaven.test.failure.ignore=true
+def tests
+
+try {
+
+def osNode = jenkinsEnv.labelForOS(buildOs) 
+node(jenkinsEnv.nodeSelection(osNode)) {
+    dir('build') {
+        stage('Checkout') {
+            checkout scm
+        }
+
+        def WORK_DIR=pwd()
+        def MAVEN_GOAL='verify'
+
+        stage('Configure deploy') {
+           if (env.BRANCH_NAME == 'master'){
+               MAVEN_GOAL='deploy'
+           }
+        }
+
+        stage('Build / Unit Test') {
+            String jdkName = jenkinsEnv.jdkFromVersion(buildOs, buildJdk)
+            String mvnName = jenkinsEnv.mvnFromVersion(buildOs, buildMvn)
+            withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/.repository", options:[
+                artifactsPublisher(disabled: false),
+                junitPublisher(ignoreAttachments: false),
+                findbugsPublisher(disabled: false),
+                openTasksPublisher(disabled: false),
+                dependenciesFingerprintPublisher(),
+                invokerPublisher(),
+                pipelineGraphPublisher()
+            ]) {
+                sh "mvn clean ${MAVEN_GOAL} -B -U -e -fae -V -Dmaven.test.failure.ignore=true"
+            }
+            dir ('apache-maven/target') {
+                sh "mv apache-maven-*-bin.zip apache-maven-dist.zip"
+                stash includes: 'apache-maven-dist.zip', name: 'dist'
+            }
+        }
+
+        tests = resolveScm source: [$class: 'GitSCMSource', credentialsId: '', id: '_', remote: 'https://gitbox.apache.org/repos/asf/maven-integration-testing.git', traits: [[$class: 'jenkins.plugins.git.traits.BranchDiscoveryTrait'], [$class: 'GitToolSCMSourceTrait', gitTool: 'Default']]], targets: [BRANCH_NAME, 'master']
+    }
+}
+
+Map runITsTasks = [:]
+for (String os in runITsOses) {
+    for (def jdk in runITsJdks) {
+        String osLabel = jenkinsEnv.labelForOS(os);
+        String jdkName = jenkinsEnv.jdkFromVersion(os, "${jdk}")
+        String mvnName = jenkinsEnv.mvnFromVersion(os, "${runITsMvn}")
+        echo "OS: ${os} JDK: ${jdk} => Label: ${osLabel} JDK: ${jdkName}"
+
+        String stageId = "${os}-jdk${jdk}"
+        String stageLabel = "Run ITs ${os.capitalize()} Java ${jdk}"
+        runITsTasks[stageId] = {
+            node(jenkinsEnv.nodeSelection(osLabel)) {
+                stage("${stageLabel}") {
+                    echo "NODE_NAME = ${env.NODE_NAME}"
+                    // on Windows, need a short path or we hit 256 character limit for paths
+                    // using EXECUTOR_NUMBER guarantees that concurrent builds on same agent
+                    // will not trample each other plus workaround for JENKINS-52657
+                    dir(isUnix() ? 'test' : "c:\\mvn-it-${EXECUTOR_NUMBER}.tmp") {
+                        def WORK_DIR=pwd()
+                        checkout tests
+                        if (isUnix()) {
+                            sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo"
+                        } else {
+                            bat "if exist it-local-repo rmdir /s /q it-local-repo"
+                            bat "if exist apache-maven-dist.zip del /q apache-maven-dist.zip"
+                        }
+                        unstash 'dist'
+                        try {
+                            withMaven(jdk: jdkName, maven: mvnName, mavenLocalRepo:"${WORK_DIR}/it-local-repo", options:[
+                                junitPublisher(ignoreAttachments: false)
+                            ]) {
+                                String cmd = "${runITscommand} -DmavenDistro=$WORK_DIR/apache-maven-dist.zip -Dmaven.test.failure.ignore=true"
+
+                                if (isUnix()) {
+                                    sh 'df -hT'
+                                    sh "${cmd}"
+                                } else {
+                                    bat 'wmic logicaldisk get size,freespace,caption'
+                                    bat "${cmd}"
+                                }
+                            }
+                        } finally {
+                            archiveDirs(stageId, ['core-it-suite-logs':'core-it-suite/target/test-classes',
+                                                  'core-it-suite-reports':'core-it-suite/target/surefire-reports'])
+                            deleteDir() // clean up after ourselves to reduce disk space
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+// run the parallel ITs
+parallel(runITsTasks)
+
+// JENKINS-34376 seems to make it hard to detect the aborted builds
+} catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
+    echo "[FAILURE-002] FlowInterruptedException ${e}"
+    // this ambiguous condition means a user probably aborted
+    if (e.causes.size() == 0) {
+        currentBuild.result = "ABORTED"
+    } else {
+        currentBuild.result = "FAILURE"
+    }
+    throw e
+} catch (hudson.AbortException e) {
+    echo "[FAILURE-003] AbortException ${e}"
+    // this ambiguous condition means during a shell step, user probably aborted
+    if (e.getMessage().contains('script returned exit code 143')) {
+        currentBuild.result = "ABORTED"
+    } else {
+        currentBuild.result = "FAILURE"
+    }
+    throw e
+} catch (InterruptedException e) {
+    echo "[FAILURE-004] ${e}"
+    currentBuild.result = "ABORTED"
+    throw e
+} catch (Throwable e) {
+    echo "[FAILURE-001] ${e}"
+    currentBuild.result = "FAILURE"
+    throw e
+} finally {
+    // notify completion
+    stage("Notifications") {
+        jenkinsNotify()      
+    }    
+}
+
+def archiveDirs(stageId, archives) {
+    archives.each { archivePrefix, pathToContent ->
+        if (fileExists(pathToContent)) {
+            zip(zipFile: "${archivePrefix}-${stageId}.zip", dir: pathToContent, archive: true)
+        }
+    }
+}
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..5e1d069
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,5 @@
+Apache Maven
+Copyright 2001-2019 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..50a4f3f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,88 @@
+<!---
+ 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.
+-->
+Apache Maven
+============
+
+[![Apache License, Version 2.0, January 2004](https://img.shields.io/github/license/apache/maven.svg?label=License)][license]
+[![Maven Central](https://img.shields.io/maven-central/v/org.apache.maven/apache-maven.svg?label=Maven%20Central)](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache.maven%22%20AND%20a%3A%22apache-maven%22)
+[![Jenkins Status](https://img.shields.io/jenkins/s/https/builds.apache.org/job/maven-box/job/maven/job/master.svg?style=flat-square)][build]
+[![Jenkins tests](https://img.shields.io/jenkins/t/https/builds.apache.org/job/maven-box/job/maven/job/master.svg?style=flat-square)][test-results]
+
+
+Apache Maven is a software project management and comprehension tool. Based on
+the concept of a project object model (POM), Maven can manage a project's
+build, reporting and documentation from a central piece of information.
+
+If you think you have found a bug, please file an issue in the [Maven Issue Tracker](https://issues.apache.org/jira/browse/MNG).
+
+Documentation
+-------------
+
+More information can be found on [Apache Maven Homepage][maven-home].
+Questions related to the usage of Maven should be posted on
+the [Maven User List][users-list].
+
+
+Where can I get the latest release?
+-----------------------------------
+You can download release source from our [download page][maven-download].
+
+Contributing
+------------
+
+If you are interested in the development of Maven, please consult the 
+documentation first and afterwards you are welcome to join the developers 
+mailing list to ask question or discuss new ideas / features / bugs etc.
+
+Take a look into the [contribution guidelines](CONTRIBUTING.md).
+
+License
+-------
+This code is under the [Apache License, Version 2.0, January 2004][license].
+
+See the `NOTICE` file for required notices and attributions.
+
+Donations
+---------
+You like Apache Maven? Then [donate back to the ASF](https://www.apache.org/foundation/contributing.html) to support the development.
+
+Quick Build
+-------
+If you want to bootstrap Maven, you'll need:
+- Java 1.8+
+- Maven 3.0.5 or later
+- Run Maven, specifying a location into which the completed Maven distro should be installed:
+```
+mvn -DdistributionTargetDir="$HOME/app/maven/apache-maven-3.7.x-SNAPSHOT" clean package
+```
+
+
+[home]: https://maven.apache.org/
+[license]: https://www.apache.org/licenses/LICENSE-2.0
+[build]: https://builds.apache.org/job/maven-box/job/maven/job/master/
+[test-results]: https://builds.apache.org/job/maven-box/job/maven/job/master/lastCompletedBuild/testReport/
+[build-status]: https://img.shields.io/jenkins/s/https/builds.apache.org/job/maven-box/job/maven/job/master.svg?style=flat-square
+[build-tests]: https://img.shields.io/jenkins/t/https/builds.apache.org/job/maven-box/job/maven/job/master.svg?style=flat-square
+[maven-home]: https://maven.apache.org/
+[maven-download]: https://maven.apache.org/download.cgi
+[users-list]: https://maven.apache.org/mailing-lists.html
+[dev-ml-list]: https://www.mail-archive.com/dev@maven.apache.org/
+[code-style]: http://maven.apache.org/developers/conventions/code.html
+[core-it]: https://maven.apache.org/core-its/core-it-suite/
+[building-maven]: https://maven.apache.org/guides/development/guide-building-maven.html
+[cla]: https://www.apache.org/licenses/#clas
+
diff --git a/apache-maven/README.txt b/apache-maven/README.txt
new file mode 100644
index 0000000..3e93a84
--- /dev/null
+++ b/apache-maven/README.txt
@@ -0,0 +1,79 @@
+
+                          Apache Maven
+
+  What is it?
+  -----------
+
+  Maven is a software project management and comprehension tool. Based on
+  the concept of a Project Object Model (POM), Maven can manage a project's
+  build, reporting and documentation from a central piece of information.
+
+  Documentation
+  -------------
+
+  The most up-to-date documentation can be found at https://maven.apache.org/.
+
+  Release Notes
+  -------------
+
+  The full list of changes can be found at https://maven.apache.org/docs/history.html.
+
+  System Requirements
+  -------------------
+
+  JDK:
+    1.7 or above (this is to execute Maven - it still allows you to build against 1.3
+    and prior JDK's).
+  Memory:
+    No minimum requirement.
+  Disk:
+    Approximately 10MB is required for the Maven installation itself. In addition to
+    that, additional disk space will be used for your local Maven repository. The size
+    of your local repository will vary depending on usage but expect at least 500MB.
+  Operating System:
+    Windows:
+      Windows 2000 or above.
+    Unix based systems (Linux, Solaris and Mac OS X) and others:
+      No minimum requirement.
+
+  Installing Maven
+  ----------------
+
+  1) Unpack the archive where you would like to store the binaries, e.g.:
+
+    Unix-based operating systems (Linux, Solaris and Mac OS X)
+      tar zxvf apache-maven-3.x.y.tar.gz
+    Windows
+      unzip apache-maven-3.x.y.zip
+
+  2) A directory called "apache-maven-3.x.y" will be created.
+
+  3) Add the bin directory to your PATH, e.g.:
+
+    Unix-based operating systems (Linux, Solaris and Mac OS X)
+      export PATH=/usr/local/apache-maven-3.x.y/bin:$PATH
+    Windows
+      set PATH="c:\program files\apache-maven-3.x.y\bin";%PATH%
+
+  4) Make sure JAVA_HOME is set to the location of your JDK
+
+  5) Run "mvn --version" to verify that it is correctly installed.
+
+  For complete documentation, see https://maven.apache.org/download.html#Installation
+
+  Licensing
+  ---------
+
+  Please see the file called LICENSE.
+
+  Maven URLS
+  ----------
+
+  Home Page:          https://maven.apache.org/
+  Downloads:          https://maven.apache.org/download.html
+  Release Notes:      https://maven.apache.org/docs/history.html
+  Mailing Lists:      https://maven.apache.org/mailing-lists.html
+  Source Code:        https://gitbox.apache.org/repos/asf/maven.git
+  Issue Tracking:     https://issues.apache.org/jira/browse/MNG
+  Wiki:               https://cwiki.apache.org/confluence/display/MAVEN/
+  Available Plugins:  https://maven.apache.org/plugins/
diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
new file mode 100644
index 0000000..a73163f
--- /dev/null
+++ b/apache-maven/pom.xml
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven</groupId>
+    <artifactId>maven</artifactId>
+    <version>3.7.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>apache-maven</artifactId>
+  <packaging>pom</packaging>
+
+  <name>Apache Maven Distribution</name>
+  <description>The Apache Maven distribution, source and binary, in zip and tar.gz formats.</description>
+
+  <properties>
+    <distributionFileName>${distributionId}-${project.version}</distributionFileName>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-embedder</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-compat</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.sisu</groupId>
+      <artifactId>org.eclipse.sisu.plexus</artifactId>
+    </dependency>
+    <!-- CLI -->
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-http</artifactId>
+      <classifier>shaded</classifier>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpclient</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.httpcomponents</groupId>
+          <artifactId>httpcore</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.maven.wagon</groupId>
+          <artifactId>wagon-http-shared</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <!--  This is included in Wagon HTTP.
+          We are just making the dependency explicit
+          in order to ease license attribution -->
+    <dependency>
+      <groupId>org.jsoup</groupId>
+      <artifactId>jsoup</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>jcl-over-slf4j</artifactId>
+      <version>${slf4jVersion}</version>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.wagon</groupId>
+      <artifactId>wagon-file</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-wagon</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-slf4j-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.fusesource.jansi</groupId>
+      <artifactId>jansi</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <finalName>${distributionFileName}</finalName>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <excludes combine.children="append">
+              <exclude>src/bin/m2.conf</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <includeArtifactIds>jansi</includeArtifactIds>
+          <includes>META-INF/native/**</includes>
+        </configuration>
+        <executions>
+          <execution>
+            <id>unpack-jansi-native</id>
+            <goals>
+              <goal>unpack-dependencies</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>test-compile</id>
+            <goals>
+              <goal>testCompile</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <systemProperties>
+            <property>
+              <name>basedir</name>
+              <value>${basedir}</value>
+            </property>
+          </systemProperties>
+        </configuration>
+        <executions>
+          <execution>
+            <id>test</id>
+            <goals>
+              <goal>test</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>create-distro-packages</id>
+            <phase>package</phase>
+            <goals>
+              <goal>single</goal>
+            </goals>
+            <configuration>
+              <descriptors>
+                <descriptor>src/main/assembly/bin.xml</descriptor>
+              </descriptors>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <pluginRepositories>
+    <pluginRepository>
+      <id>apache.snapshots</id>
+      <url>https://repository.apache.org/snapshots/</url>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <profiles>
+    <profile>
+      <id>create-distribution-in-dir</id>
+      <activation>
+        <property>
+          <name>distributionTargetDir</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-clean-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>clean</goal>
+                </goals>
+                <id>clean-target-dir</id>
+                <phase>prepare-package</phase>
+                <configuration>
+                  <excludeDefaultDirectories>true</excludeDefaultDirectories>
+                  <filesets>
+                    <fileset>
+                      <directory>${distributionTargetDir}</directory>
+                    </fileset>
+                  </filesets>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <plugin>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>create-distribution-dir</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <finalName>./</finalName>
+                  <appendAssemblyId>false</appendAssemblyId>
+                  <attach>false</attach>
+                  <outputDirectory>${distributionTargetDir}</outputDirectory>
+                  <descriptors>
+                    <descriptor>src/main/assembly/dir.xml</descriptor>
+                  </descriptors>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+    <profile>
+      <id>apache-release</id>
+      <build>
+        <plugins>
+          <plugin>
+            <artifactId>maven-assembly-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>make-src-assembly</id>
+                <phase>package</phase>
+                <goals>
+                  <goal>single</goal>
+                </goals>
+                <configuration>
+                  <descriptors>
+                    <descriptor>src/main/assembly/src.xml</descriptor>
+                  </descriptors>
+                  <tarLongFileMode>gnu</tarLongFileMode>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
+          <!-- calculate checksums of source release for Apache dist area -->
+          <plugin>
+            <groupId>net.nicoulaj.maven.plugins</groupId>
+            <artifactId>checksum-maven-plugin</artifactId>
+            <executions>
+              <execution>
+                <id>source-release-checksum</id>
+                <goals>
+                  <goal>files</goal>
+                </goals>
+              </execution>
+            </executions>
+            <configuration>
+              <fileSets>
+                <fileSet>
+                  <directory>${project.build.directory}</directory>
+                  <includes>
+                    <include>${project.artifactId}-${project.version}-src.zip</include>
+                    <include>${project.artifactId}-${project.version}-src.tar.gz</include>
+                    <include>${project.artifactId}-${project.version}-bin.zip</include>
+                    <include>${project.artifactId}-${project.version}-bin.tar.gz</include>
+                  </includes>
+                </fileSet>
+              </fileSets>
+              <failIfNoFiles>true</failIfNoFiles>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/apache-maven/src/bin/.gitattributes b/apache-maven/src/bin/.gitattributes
new file mode 100644
index 0000000..cc7533f
--- /dev/null
+++ b/apache-maven/src/bin/.gitattributes
@@ -0,0 +1,3 @@
+mvn                eol=lf crlf=input
+mvnDebug           eol=lf crlf=input
+mvnyjp             eol=lf crlf=input
diff --git a/apache-maven/src/bin/m2.conf b/apache-maven/src/bin/m2.conf
new file mode 100644
index 0000000..2235f82
--- /dev/null
+++ b/apache-maven/src/bin/m2.conf
@@ -0,0 +1,8 @@
+main is org.apache.maven.cli.MavenCli from plexus.core
+
+set maven.conf default ${maven.home}/conf
+
+[plexus.core]
+load       ${maven.conf}/logging
+optionally ${maven.home}/lib/ext/*.jar
+load       ${maven.home}/lib/*.jar
diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
new file mode 100755
index 0000000..a554c66
--- /dev/null
+++ b/apache-maven/src/bin/mvn
@@ -0,0 +1,199 @@
+#!/bin/sh
+
+# 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.
+
+# -----------------------------------------------------------------------------
+# Apache Maven Startup Script
+#
+# Environment Variable Prerequisites
+#
+#   JAVA_HOME       Must point at your Java Development Kit installation.
+#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
+#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
+# -----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+mingw=false;
+case "`uname`" in
+  CYGWIN*) cygwin=true;;
+  MINGW*) mingw=true;;
+esac
+
+## resolve links - $0 may be a link to Maven's home
+PRG="$0"
+
+# need this for relative symlinks
+while [ -h "$PRG" ] ; do
+  ls=`ls -ld "$PRG"`
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    PRG="$link"
+  else
+    PRG="`dirname "$PRG"`/$link"
+  fi
+done
+
+saveddir=`pwd`
+
+MAVEN_HOME=`dirname "$PRG"`/..
+
+# make it fully qualified
+MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`
+
+cd "$saveddir"
+
+# For Cygwin, ensure paths are in Unix format before anything is touched
+if $cygwin ; then
+  [ -n "$MAVEN_HOME" ] &&
+    MAVEN_HOME=`cygpath --unix "$MAVEN_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For MinGW, ensure paths are in Unix format before anything is touched
+if $mingw ; then
+  [ -n "$MAVEN_HOME" ] &&
+    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
+  # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  JAVACMD=`which java`
+else
+  JAVACMD="$JAVA_HOME/bin/java"
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "The JAVA_HOME environment variable is not defined correctly" >&2
+  echo "This environment variable is needed to run this program" >&2
+  echo "NB: JAVA_HOME should point to a JDK not a JRE" >&2
+  exit 1
+fi
+
+CLASSWORLDS_JAR=`echo "${MAVEN_HOME}"/boot/plexus-classworlds-*.jar`
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+  [ -n "$MAVEN_HOME" ] &&
+    MAVEN_HOME=`cygpath --path --windows "$MAVEN_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$CLASSWORLDS_JAR" ] &&
+    CLASSWORLDS_JAR=`cygpath --path --windows "$CLASSWORLDS_JAR"`
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+(
+  basedir=`find_file_argument_basedir "$@"`
+  wdir="${basedir}"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    wdir=`cd "$wdir/.."; pwd`
+  done
+  echo "${basedir}"
+)
+}
+
+find_file_argument_basedir() {
+(
+  basedir=`pwd`
+
+  found_file_switch=0
+  for arg in "$@"; do
+    if [ ${found_file_switch} -eq 1 ]; then
+      if [ -d "${arg}" ]; then
+        basedir=`cd "${arg}" && pwd -P`
+      elif [ -f "${arg}" ]; then
+        basedir=`dirname "${arg}"`
+        basedir=`cd "${basedir}" && pwd -P`
+        if [ ! -d "${basedir}" ]; then
+          echo "Directory ${basedir} extracted from the -f/--file command-line argument ${arg} does not exist" >&2
+          exit 1
+        fi
+      else
+        echo "POM file ${arg} specified with the -f/--file command line argument does not exist" >&2
+        exit 1
+      fi
+      break
+    fi
+    if [ "$arg" = "-f" -o "$arg" = "--file" ]; then
+      found_file_switch=1
+    fi
+  done
+  echo "${basedir}"
+)
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "`tr -s '\r\n' '  ' < "$1"`"
+  fi
+}
+
+MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-`find_maven_basedir "$@"`}"
+MAVEN_OPTS="`concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config"` $MAVEN_OPTS"
+
+# For Cygwin, switch project base directory path to Windows format before
+# executing Maven otherwise this will cause Maven not to consider it.
+if $cygwin ; then
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+  MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+export MAVEN_PROJECTBASEDIR
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  $MAVEN_DEBUG_OPTS \
+  -classpath "${CLASSWORLDS_JAR}" \
+  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
+  "-Dmaven.home=${MAVEN_HOME}" \
+  "-Dlibrary.jansi.path=${MAVEN_HOME}/lib/jansi-native" \
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${CLASSWORLDS_LAUNCHER} "$@"
diff --git a/apache-maven/src/bin/mvn.cmd b/apache-maven/src/bin/mvn.cmd
new file mode 100644
index 0000000..50dafc7
--- /dev/null
+++ b/apache-maven/src/bin/mvn.cmd
@@ -0,0 +1,201 @@
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+
+@REM -----------------------------------------------------------------------------
+@REM Apache Maven Startup Script
+@REM
+@REM Environment Variable Prerequisites
+@REM
+@REM   JAVA_HOME          Must point at your Java Development Kit installation.
+@REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
+@REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
+@REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
+@REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
+@REM -----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%"=="on" echo %MAVEN_BATCH_ECHO%
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat"
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%"=="" goto OkJHome
+for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
+goto checkJCmd
+
+:OkJHome
+set "JAVACMD=%JAVA_HOME%\bin\java.exe"
+
+:checkJCmd
+if exist "%JAVACMD%" goto chkMHome
+
+echo The JAVA_HOME environment variable is not defined correctly >&2
+echo This environment variable is needed to run this program >&2
+echo NB: JAVA_HOME should point to a JDK not a JRE >&2
+goto error
+
+:chkMHome
+set "MAVEN_HOME=%~dp0"
+set "MAVEN_HOME=%MAVEN_HOME:~0,-5%"
+if not "%MAVEN_HOME%"=="" goto checkMCmd
+goto error
+
+:checkMCmd
+if exist "%MAVEN_HOME%\bin\mvn.cmd" goto init
+goto error
+@REM ==== END VALIDATION ====
+
+:init
+
+set MAVEN_CMD_LINE_ARGS=%*
+
+@REM Find the project basedir, i.e., the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set "MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%"
+if not "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set "EXEC_DIR=%CD%"
+set "WDIR=%EXEC_DIR%"
+
+@REM Look for the --file switch and start the search for the .mvn directory from the specified
+@REM POM location, if supplied.
+
+set FILE_ARG=
+:arg_loop
+if "%~1" == "-f" (
+  set "FILE_ARG=%~2"
+  shift
+  goto process_file_arg
+)
+if "%~1" == "--file" (
+  set "FILE_ARG=%~2"
+  shift
+  goto process_file_arg
+)
+@REM If none of the above, skip the argument
+shift
+if not "%~1" == "" (
+  goto arg_loop
+) else (
+  goto findBaseDir
+)
+
+:process_file_arg
+if "%FILE_ARG%" == "" (
+  goto findBaseDir
+)
+if not exist "%FILE_ARG%" (
+  echo POM file "%FILE_ARG%" specified the -f/--file command-line argument does not exist >&2
+  goto error
+)
+if exist "%FILE_ARG%\*" (
+  set "POM_DIR=%FILE_ARG%"
+) else (
+  call :get_directory_from_file "%FILE_ARG%"
+)
+if not exist "%POM_DIR%" (
+  echo Directory "%POM_DIR%" extracted from the -f/--file command-line argument "%FILE_ARG%" does not exist >&2
+  goto error
+)
+set "WDIR=%POM_DIR%"
+goto findBaseDir
+
+:get_directory_from_file
+set "POM_DIR=%~dp1"
+:stripPomDir
+if not "_%POM_DIR:~-1%"=="_\" goto pomDirStripped
+set "POM_DIR=%POM_DIR:~0,-1%"
+goto stripPomDir
+:pomDirStripped
+exit /b
+
+:findBaseDir
+cd /d "%WDIR%"
+:findBaseDirLoop
+if exist "%WDIR%\.mvn" goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set "WDIR=%CD%"
+goto findBaseDirLoop
+
+:baseDirFound
+set "MAVEN_PROJECTBASEDIR=%WDIR%"
+cd /d "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+if "_%EXEC_DIR:~-1%"=="_\" set "EXEC_DIR=%EXEC_DIR:~0,-1%"
+set "MAVEN_PROJECTBASEDIR=%EXEC_DIR%"
+cd /d "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+set "jvmConfig=\.mvn\jvm.config"
+if not exist "%MAVEN_PROJECTBASEDIR%%jvmConfig%" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+for %%i in ("%MAVEN_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i"
+set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+"%JAVACMD%" ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %CLASSWORLDS_JAR% ^
+  "-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" ^
+  "-Dmaven.home=%MAVEN_HOME%" ^
+  "-Dlibrary.jansi.path=%MAVEN_HOME%\lib\jansi-native" ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/apache-maven/src/bin/mvnDebug b/apache-maven/src/bin/mvnDebug
new file mode 100755
index 0000000..be495ff
--- /dev/null
+++ b/apache-maven/src/bin/mvnDebug
@@ -0,0 +1,34 @@
+#!/bin/sh
+
+# 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.
+
+# -----------------------------------------------------------------------------
+# Apache Maven Debug Script
+#
+# Environment Variable Prerequisites
+#
+#   JAVA_HOME       Must point at your Java Development Kit installation.
+#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
+#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
+# -----------------------------------------------------------------------------
+
+MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"
+
+echo Preparing to execute Maven in debug mode
+
+env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvn" "$@"
diff --git a/apache-maven/src/bin/mvnDebug.cmd b/apache-maven/src/bin/mvnDebug.cmd
new file mode 100644
index 0000000..5f9a20a
--- /dev/null
+++ b/apache-maven/src/bin/mvnDebug.cmd
@@ -0,0 +1,33 @@
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+
+@REM -----------------------------------------------------------------------------
+@REM Apache Maven Debug Script
+@REM
+@REM Environment Variable Prerequisites
+@REM
+@REM   JAVA_HOME          Must point at your Java Development Kit installation.
+@REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
+@REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
+@REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
+@REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
+@REM -----------------------------------------------------------------------------
+
+@setlocal
+@set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+
+@call "%~dp0"mvn.cmd %*
diff --git a/apache-maven/src/bin/mvnyjp b/apache-maven/src/bin/mvnyjp
new file mode 100755
index 0000000..a35eabf
--- /dev/null
+++ b/apache-maven/src/bin/mvnyjp
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# 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.
+
+# -----------------------------------------------------------------------------
+# Apache Maven YourKit Profiler Startup Script
+#
+# Environment Variable Prerequisites
+#
+#   JAVA_HOME       Must point at your Java Development Kit installation.
+#   MAVEN_OPTS      (Optional) Java runtime options used when Maven is executed.
+#   MAVEN_SKIP_RC   (Optional) Flag to disable loading of mavenrc files.
+# -----------------------------------------------------------------------------
+
+if [ ! -f "$YJPLIB" ]; then
+  echo "Error: Unable to autodetect the YJP library location. Please set YJPLIB variable" >&2
+  exit 1
+fi
+
+env MAVEN_OPTS="-agentpath:$YJPLIB=onexit=snapshot,onexit=memory,tracing,onlylocal $MAVEN_OPTS" "`dirname "$0"`/mvn" "$@"
diff --git a/apache-maven/src/conf/logging/simplelogger.properties b/apache-maven/src/conf/logging/simplelogger.properties
new file mode 100644
index 0000000..64b331b
--- /dev/null
+++ b/apache-maven/src/conf/logging/simplelogger.properties
@@ -0,0 +1,32 @@
+# 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.
+
+org.slf4j.simpleLogger.defaultLogLevel=info
+org.slf4j.simpleLogger.showDateTime=false
+org.slf4j.simpleLogger.showThreadName=false
+org.slf4j.simpleLogger.showLogName=false
+org.slf4j.simpleLogger.logFile=System.out
+org.slf4j.simpleLogger.cacheOutputStream=true
+org.slf4j.simpleLogger.levelInBrackets=true
+org.slf4j.simpleLogger.log.Sisu=info
+org.slf4j.simpleLogger.warnLevelString=WARNING
+
+# MNG-6181: mvn -X also prints all debug logging from HttpClient
+# Be aware that the shaded packages are used
+# org.apache.http -> org.apache.maven.wagon.providers.http.httpclient
+org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient=off
+org.slf4j.simpleLogger.log.org.apache.maven.wagon.providers.http.httpclient.wire=off
diff --git a/apache-maven/src/conf/settings.xml b/apache-maven/src/conf/settings.xml
new file mode 100644
index 0000000..e27c579
--- /dev/null
+++ b/apache-maven/src/conf/settings.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation. Where appropriate, the default
+ | values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ${user.home}/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set to false,
+   | maven will use a sensible default value, perhaps based on some other setting, for
+   | the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when executing a build.
+   | This will have an effect on artifact downloads, artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
+   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to the network.
+   | Unless otherwise specified (by system property or command-line switch), the first proxy
+   | specification in this list marked as active will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used within the system.
+   | Authentication profiles can be used whenever maven must make a connection to a remote server.
+   |-->
+  <servers>
+    <!-- server
+     | Specifies the authentication information to use when connecting to a particular server, identified by
+     | a unique name within the system (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
+     |       used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
+   | However, this repository may have problems with heavy traffic at times, so people have mirrored
+   | it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a mirror reference for that
+   | repository, to be used as an alternate download site. The mirror site will be the preferred
+   | server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository. The repository that
+     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
+     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways, and which can modify
+   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
+   | specific paths and repository locations which allow the build to work in the local environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus - that needs to know where
+   | your Tomcat instance is installed, you can provide a variable here such that the variable is
+   | dereferenced during the build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
+   | section of this document (settings.xml) - will be discussed later. Another way essentially
+   | relies on the detection of a system property, either matching a particular value for the property,
+   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
+   | value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.
+   | Finally, the list of active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
+   |       repositories, plugin repositories, and free-form properties to be used as configuration
+   |       variables for plugins in the POM.
+   |
+   |-->
+  <profiles>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated using one or more of the
+     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
+     | or the command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a consistent naming convention
+     | for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.
+     | This will make it more intuitive to understand what the set of introduced profiles is attempting
+     | to accomplish, particularly when you only have a list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env' with a value of 'dev',
+     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
+     | might hypothetically look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to
+     |       anything, you could just leave off the <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/apache-maven/src/conf/toolchains.xml b/apache-maven/src/conf/toolchains.xml
new file mode 100644
index 0000000..b263072
--- /dev/null
+++ b/apache-maven/src/conf/toolchains.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<!--
+ | This is the toolchains file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This toolchains.xml file provides configuration for a single user,
+ |                 and is normally provided in ${user.home}/.m2/toolchains.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -t /path/to/user/toolchains.xml
+ |
+ |  2. Global Level. This toolchains.xml file provides configuration for all Maven
+ |                 users on a machine (assuming they're all using the same Maven
+ |                 installation). It's normally provided in
+ |                 ${maven.conf}/toolchains.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gt /path/to/global/toolchains.xml
+ |
+ | The sections in this sample file are intended to give you a running start at
+ | getting the most out of your Maven installation.
+ |-->
+<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
+
+  <!-- 
+   | With toolchains you can refer to installations on your system. This 
+   | way you don't have to hardcode paths in your pom.xml. 
+   | 
+   | Every toolchain consist of 3 elements: 
+   | * type: the type of tool. An often used value is 'jdk'. Toolchains-aware 
+   |   plugins should document which type you must use. 
+   | 
+   | * provides: A list of key/value-pairs. 
+   |   Based on the toolchain-configuration in the pom.xml Maven will search for 
+   |   matching <provides/> configuration. You can decide for yourself which key-value 
+   |   pairs to use. Often used keys are 'version', 'vendor' and 'arch'. By default 
+   |   the version has a special meaning. If you configured in the pom.xml '1.5' 
+   |   Maven will search for 1.5 and above.
+   |   
+   | * configuration: Additional configuration for this tool.
+   |   Look for documentation of the toolchains-aware plugin which configuration elements
+   |   can be used.   
+   |
+   | See also https://maven.apache.org/guides/mini/guide-using-toolchains.html
+   |
+   | General example
+
+  <toolchain>
+    <type/>
+    <provides> 
+      <version>1.0</version> 
+    </provides> 
+    <configuration/>
+  </toolchain>
+   
+   | JDK examples
+
+  <toolchain>
+    <type>jdk</type>
+    <provides>
+      <version>1.5</version>
+      <vendor>sun</vendor>
+    </provides>
+    <configuration>
+      <jdkHome>/path/to/jdk/1.5</jdkHome>
+    </configuration>
+  </toolchain>
+  <toolchain>
+    <type>jdk</type>
+    <provides>
+      <version>1.6</version>
+      <vendor>sun</vendor>
+    </provides>
+    <configuration>
+      <jdkHome>/path/to/jdk/1.6</jdkHome>
+    </configuration>
+  </toolchain>
+   
+  -->
+
+</toolchains>
\ No newline at end of file
diff --git a/apache-maven/src/lib/ext/README.txt b/apache-maven/src/lib/ext/README.txt
new file mode 100644
index 0000000..5ebe59e
--- /dev/null
+++ b/apache-maven/src/lib/ext/README.txt
@@ -0,0 +1,2 @@
+Use this directory to contribute 3rd-party extensions to the Maven core. These extensions can either extend or override
+Maven's default implementation.
diff --git a/apache-maven/src/lib/jansi-native/README.txt b/apache-maven/src/lib/jansi-native/README.txt
new file mode 100644
index 0000000..22857a6
--- /dev/null
+++ b/apache-maven/src/lib/jansi-native/README.txt
@@ -0,0 +1,7 @@
+This directory contains Jansi native libraries, extracted from Jansi jar.
+
+You can add your own extensions for platforms not natively supported by
+Jansi: the libraries follow HawtJNI directory and filename conventions.
+See http://fusesource.github.io/hawtjni/documentation/api/org/fusesource/hawtjni/runtime/Library.html
+
+See https://github.com/fusesource/jansi-native for native lib source.
diff --git a/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm b/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
new file mode 100644
index 0000000..43357d1
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
@@ -0,0 +1,84 @@
+##
+## 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.
+##
+
+
+Apache Maven includes a number of components and libraries with separate
+copyright notices and license terms. Your use of those components are
+subject to the terms and conditions of the following licenses:
+##
+#set ( $apacheMavenGroupIds = [ "org.apache.maven", "org.apache.maven.wagon", "org.apache.maven.resolver",
+                                "org.apache.maven.shared" ] )
+#set ( $MITLicenseNames = [ "MIT License", "MIT license", "The MIT License" ] )
+#foreach ( $project in $projects )
+#**##foreach ( $license in $project.licenses )
+#*  *##set ( $groupId = $project.artifact.groupId )
+#*  *##set ( $directory = 'lib' )
+#*  *##if ( !$apacheMavenGroupIds.contains( $groupId ) )
+#*    *### advertise about each non-Maven dependency
+#*    *###
+#*    *### infer SPDX license id
+#*    *##if ( $license.name == "COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0" )
+#*      *##set ( $spdx = 'CDDL-1.0' )
+#*    *##elseif ( $MITLicenseNames.contains( $license.name ) )
+#*      *##set ( $spdx = 'MIT' )
+#*    *##elseif ( $license.name == "Eclipse Public License, Version 1.0" )
+#*      *##set ( $spdx = 'EPL-1.0' )
+#*    *##elseif ( $license.url.contains( "www.apache.org/licenses/LICENSE-2.0" ) )
+#*      *##set ( $spdx = 'Apache-2.0' )
+#*    *##else
+#*      *### unrecognized license will require analysis to know obligations
+#*      *##set ( $spdx = 'unrecognized' )
+#*    *##end
+#*    *###
+#*    *### fix project urls that are wrong in pom
+#*    *##if ( $project.url.startsWith( "http://www.eclipse.org/sisu/" ) )
+#*      *##set ( $project.url = 'https://www.eclipse.org/sisu/' )
+#*    *##elseif ( $project.url.startsWith( "https://github.com/google/guava/" ) )
+#*      *##set ( $project.url = 'https://github.com/google/guava/' )
+#*    *##elseif ( $project.url.startsWith( "https://github.com/google/guice/" ) )
+#*      *##set ( $project.url = 'https://github.com/google/guice/' )
+#*    *##end
+#*    *###
+#*    *### Classworlds is in boot directory, not in lib
+#*    *##if ( $project.artifact.artifactId == "plexus-classworlds" )
+#*      *##set ( $directory = 'boot' )
+#*    *##end
+#*    *###
+#*    *### copy license file to lib/$artifactId.license
+#*    *##set ( $licFile = $directory + '/' + $project.artifact.artifactId + '.license' )
+#*    *##if ( $spdx == "MIT" )
+#*      *### MIT license contains date and copyright that makes the file specific to each artifact
+#*      *##set ( $downloaded = $locator.getResourceAsFile( "licenses/${spdx}-${project.artifact.artifactId}-${project.artifact.version}.txt", "licenses/${licFile}" ) )
+#*    *##else
+#*      *##set ( $downloaded = $locator.getResourceAsFile( "licenses/${spdx}.txt", "licenses/${licFile}" ) )
+#*    *##end
+
+#*    *### add dependency info to output
+
+- $directory/${project.artifact.artifactId}-${project.artifact.version}.jar: $project.artifact.toString().replace( ':eclipse-plugin:', ':jar:' )
+    Project: $project.name
+    #if ( $project.url )Project URL: ${project.url}#end
+
+    License: $license.name#if ( $spdx ) ($spdx)#end
+
+    License URL: $license.url ($licFile)
+
+#*  *##end
+#**##end
+#end
diff --git a/apache-maven/src/main/appended-resources/META-INF/NOTICE.vm b/apache-maven/src/main/appended-resources/META-INF/NOTICE.vm
new file mode 100644
index 0000000..acf7ba4
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/META-INF/NOTICE.vm
@@ -0,0 +1,116 @@
+##
+## 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.
+##
+This software bundles the following NOTICE files from third party library providers:
+
+META-INF/NOTICE in archive lib/guice-4.2.1-no_aop.jar
+Google Guice - Core Library
+Copyright 2006-2018 Google, Inc.
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+META-INF/NOTICE in archive lib/plexus-utils-3.2.1.jar
+This product includes software developed by the Indiana University
+ Extreme! Lab (http://www.extreme.indiana.edu/).
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+This product includes software developed by
+ThoughtWorks (http://www.thoughtworks.com).
+This product includes software developed by
+javolution (http://javolution.org/).
+This product includes software developed by
+Rome (https://rome.dev.java.net/).
+
+about.html in archive lib/org.eclipse.sisu.inject-0.3.4.jar
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About org.eclipse.sisu.inject</title>
+</head>
+<body lang="EN-US">
+<h2>About org.eclipse.sisu.inject</h2>
+ 
+<p>November 5, 2013</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+<h3>Third Party Content</h3>
+<p>The Content includes items that have been sourced from third parties as set 
+out below. If you did not receive this Content directly from the Eclipse Foundation, 
+the following is provided for informational purposes only, and you should look 
+to the Redistributor's license for terms and conditions of use.</p>
+
+<h4>ASM 4.1</h4>
+<p>The plug-in includes software developed by the ObjectWeb consortium as part
+of the ASM project at <a href="http://asm.ow2.org/">http://asm.ow2.org/</a>.</p>
+
+<p>A subset of ASM is re-packaged within the source and binary of the plug-in (org.eclipse.sisu.space.asm.*)
+to avoid version collisions with other usage and is also available from the plug-in's github repository.</p>
+
+<p>Your use of the ASM code is subject to the terms and conditions of the ASM License
+below which is also available at <a href="http://asm.ow2.org/license.html">http://asm.ow2.org/license.html</a>.</p>
+
+<blockquote><pre>
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+</pre></blockquote>
+
+</body>
+</html>
diff --git a/apache-maven/src/main/appended-resources/licenses/Apache-2.0.txt b/apache-maven/src/main/appended-resources/licenses/Apache-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/licenses/Apache-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
diff --git a/apache-maven/src/main/appended-resources/licenses/CDDL-1.0.txt b/apache-maven/src/main/appended-resources/licenses/CDDL-1.0.txt
new file mode 100644
index 0000000..9bc6342
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/licenses/CDDL-1.0.txt
@@ -0,0 +1,384 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+
+      1. Definitions.
+
+            1.1. "Contributor" means each individual or entity that
+            creates or contributes to the creation of Modifications.
+
+            1.2. "Contributor Version" means the combination of the
+            Original Software, prior Modifications used by a
+            Contributor (if any), and the Modifications made by that
+            particular Contributor.
+
+            1.3. "Covered Software" means (a) the Original Software, or
+            (b) Modifications, or (c) the combination of files
+            containing Original Software with files containing
+            Modifications, in each case including portions thereof.
+
+            1.4. "Executable" means the Covered Software in any form
+            other than Source Code. 
+
+            1.5. "Initial Developer" means the individual or entity
+            that first makes Original Software available under this
+            License. 
+            
+            1.6. "Larger Work" means a work which combines Covered
+            Software or portions thereof with code not governed by the
+            terms of this License.
+
+            1.7. "License" means this document.
+
+            1.8. "Licensable" means having the right to grant, to the
+            maximum extent possible, whether at the time of the initial
+            grant or subsequently acquired, any and all of the rights
+            conveyed herein.
+            
+            1.9. "Modifications" means the Source Code and Executable
+            form of any of the following: 
+
+                  A. Any file that results from an addition to,
+                  deletion from or modification of the contents of a
+                  file containing Original Software or previous
+                  Modifications; 
+
+                  B. Any new file that contains any part of the
+                  Original Software or previous Modification; or 
+
+                  C. Any new file that is contributed or otherwise made
+                  available under the terms of this License.
+
+            1.10. "Original Software" means the Source Code and
+            Executable form of computer software code that is
+            originally released under this License. 
+
+            1.11. "Patent Claims" means any patent claim(s), now owned
+            or hereafter acquired, including without limitation,
+            method, process, and apparatus claims, in any patent
+            Licensable by grantor. 
+
+            1.12. "Source Code" means (a) the common form of computer
+            software code in which modifications are made and (b)
+            associated documentation included in or with such code.
+
+            1.13. "You" (or "Your") means an individual or a legal
+            entity exercising rights under, and complying with all of
+            the terms of, this License. For legal entities, "You"
+            includes any entity which controls, is controlled by, or is
+            under common control with You. For purposes of this
+            definition, "control" means (a) the power, direct or
+            indirect, to cause the direction or management of such
+            entity, whether by contract or otherwise, or (b) ownership
+            of more than fifty percent (50%) of the outstanding shares
+            or beneficial ownership of such entity.
+
+      2. License Grants. 
+
+            2.1. The Initial Developer Grant.
+
+            Conditioned upon Your compliance with Section 3.1 below and
+            subject to third party intellectual property claims, the
+            Initial Developer hereby grants You a world-wide,
+            royalty-free, non-exclusive license: 
+
+                  (a) under intellectual property rights (other than
+                  patent or trademark) Licensable by Initial Developer,
+                  to use, reproduce, modify, display, perform,
+                  sublicense and distribute the Original Software (or
+                  portions thereof), with or without Modifications,
+                  and/or as part of a Larger Work; and 
+
+                  (b) under Patent Claims infringed by the making,
+                  using or selling of Original Software, to make, have
+                  made, use, practice, sell, and offer for sale, and/or
+                  otherwise dispose of the Original Software (or
+                  portions thereof). 
+
+                  (c) The licenses granted in Sections 2.1(a) and (b)
+                  are effective on the date Initial Developer first
+                  distributes or otherwise makes the Original Software
+                  available to a third party under the terms of this
+                  License. 
+
+                  (d) Notwithstanding Section 2.1(b) above, no patent
+                  license is granted: (1) for code that You delete from
+                  the Original Software, or (2) for infringements
+                  caused by: (i) the modification of the Original
+                  Software, or (ii) the combination of the Original
+                  Software with other software or devices. 
+
+            2.2. Contributor Grant.
+
+            Conditioned upon Your compliance with Section 3.1 below and
+            subject to third party intellectual property claims, each
+            Contributor hereby grants You a world-wide, royalty-free,
+            non-exclusive license:
+
+                  (a) under intellectual property rights (other than
+                  patent or trademark) Licensable by Contributor to
+                  use, reproduce, modify, display, perform, sublicense
+                  and distribute the Modifications created by such
+                  Contributor (or portions thereof), either on an
+                  unmodified basis, with other Modifications, as
+                  Covered Software and/or as part of a Larger Work; and
+                  
+
+                  (b) under Patent Claims infringed by the making,
+                  using, or selling of Modifications made by that
+                  Contributor either alone and/or in combination with
+                  its Contributor Version (or portions of such
+                  combination), to make, use, sell, offer for sale,
+                  have made, and/or otherwise dispose of: (1)
+                  Modifications made by that Contributor (or portions
+                  thereof); and (2) the combination of Modifications
+                  made by that Contributor with its Contributor Version
+                  (or portions of such combination). 
+
+                  (c) The licenses granted in Sections 2.2(a) and
+                  2.2(b) are effective on the date Contributor first
+                  distributes or otherwise makes the Modifications
+                  available to a third party. 
+
+                  (d) Notwithstanding Section 2.2(b) above, no patent
+                  license is granted: (1) for any code that Contributor
+                  has deleted from the Contributor Version; (2) for
+                  infringements caused by: (i) third party
+                  modifications of Contributor Version, or (ii) the
+                  combination of Modifications made by that Contributor
+                  with other software (except as part of the
+                  Contributor Version) or other devices; or (3) under
+                  Patent Claims infringed by Covered Software in the
+                  absence of Modifications made by that Contributor. 
+
+      3. Distribution Obligations.
+
+            3.1. Availability of Source Code.
+
+            Any Covered Software that You distribute or otherwise make
+            available in Executable form must also be made available in
+            Source Code form and that Source Code form must be
+            distributed only under the terms of this License. You must
+            include a copy of this License with every copy of the
+            Source Code form of the Covered Software You distribute or
+            otherwise make available. You must inform recipients of any
+            such Covered Software in Executable form as to how they can
+            obtain such Covered Software in Source Code form in a
+            reasonable manner on or through a medium customarily used
+            for software exchange.
+
+            3.2. Modifications.
+
+            The Modifications that You create or to which You
+            contribute are governed by the terms of this License. You
+            represent that You believe Your Modifications are Your
+            original creation(s) and/or You have sufficient rights to
+            grant the rights conveyed by this License.
+
+            3.3. Required Notices.
+
+            You must include a notice in each of Your Modifications
+            that identifies You as the Contributor of the Modification.
+            You may not remove or alter any copyright, patent or
+            trademark notices contained within the Covered Software, or
+            any notices of licensing or any descriptive text giving
+            attribution to any Contributor or the Initial Developer.
+
+            3.4. Application of Additional Terms.
+
+            You may not offer or impose any terms on any Covered
+            Software in Source Code form that alters or restricts the
+            applicable version of this License or the recipients"
+            rights hereunder. You may choose to offer, and to charge a
+            fee for, warranty, support, indemnity or liability
+            obligations to one or more recipients of Covered Software.
+            However, you may do so only on Your own behalf, and not on
+            behalf of the Initial Developer or any Contributor. You
+            must make it absolutely clear that any such warranty,
+            support, indemnity or liability obligation is offered by
+            You alone, and You hereby agree to indemnify the Initial
+            Developer and every Contributor for any liability incurred
+            by the Initial Developer or such Contributor as a result of
+            warranty, support, indemnity or liability terms You offer.
+          
+
+            3.5. Distribution of Executable Versions.
+
+            You may distribute the Executable form of the Covered
+            Software under the terms of this License or under the terms
+            of a license of Your choice, which may contain terms
+            different from this License, provided that You are in
+            compliance with the terms of this License and that the
+            license for the Executable form does not attempt to limit
+            or alter the recipient"s rights in the Source Code form
+            from the rights set forth in this License. If You
+            distribute the Covered Software in Executable form under a
+            different license, You must make it absolutely clear that
+            any terms which differ from this License are offered by You
+            alone, not by the Initial Developer or Contributor. You
+            hereby agree to indemnify the Initial Developer and every
+            Contributor for any liability incurred by the Initial
+            Developer or such Contributor as a result of any such terms
+            You offer.
+
+            3.6. Larger Works.
+
+            You may create a Larger Work by combining Covered Software
+            with other code not governed by the terms of this License
+            and distribute the Larger Work as a single product. In such
+            a case, You must make sure the requirements of this License
+            are fulfilled for the Covered Software. 
+            
+      4. Versions of the License. 
+
+            4.1. New Versions.
+
+            Sun Microsystems, Inc. is the initial license steward and
+            may publish revised and/or new versions of this License
+            from time to time. Each version will be given a
+            distinguishing version number. Except as provided in
+            Section 4.3, no one other than the license steward has the
+            right to modify this License. 
+
+            4.2. Effect of New Versions.
+
+            You may always continue to use, distribute or otherwise
+            make the Covered Software available under the terms of the
+            version of the License under which You originally received
+            the Covered Software. If the Initial Developer includes a
+            notice in the Original Software prohibiting it from being
+            distributed or otherwise made available under any
+            subsequent version of the License, You must distribute and
+            make the Covered Software available under the terms of the
+            version of the License under which You originally received
+            the Covered Software. Otherwise, You may also choose to
+            use, distribute or otherwise make the Covered Software
+            available under the terms of any subsequent version of the
+            License published by the license steward. 
+
+            4.3. Modified Versions.
+
+            When You are an Initial Developer and You want to create a
+            new license for Your Original Software, You may create and
+            use a modified version of this License if You: (a) rename
+            the license and remove any references to the name of the
+            license steward (except to note that the license differs
+            from this License); and (b) otherwise make it clear that
+            the license contains terms which differ from this License.
+            
+
+      5. DISCLAIMER OF WARRANTY.
+
+      COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
+      BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+      INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
+      SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+      PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+      PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
+      COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+      INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
+      ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
+      WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+      ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+      DISCLAIMER. 
+
+      6. TERMINATION. 
+
+            6.1. This License and the rights granted hereunder will
+            terminate automatically if You fail to comply with terms
+            herein and fail to cure such breach within 30 days of
+            becoming aware of the breach. Provisions which, by their
+            nature, must remain in effect beyond the termination of
+            this License shall survive.
+
+            6.2. If You assert a patent infringement claim (excluding
+            declaratory judgment actions) against Initial Developer or
+            a Contributor (the Initial Developer or Contributor against
+            whom You assert such claim is referred to as "Participant")
+            alleging that the Participant Software (meaning the
+            Contributor Version where the Participant is a Contributor
+            or the Original Software where the Participant is the
+            Initial Developer) directly or indirectly infringes any
+            patent, then any and all rights granted directly or
+            indirectly to You by such Participant, the Initial
+            Developer (if the Initial Developer is not the Participant)
+            and all Contributors under Sections 2.1 and/or 2.2 of this
+            License shall, upon 60 days notice from Participant
+            terminate prospectively and automatically at the expiration
+            of such 60 day notice period, unless if within such 60 day
+            period You withdraw Your claim with respect to the
+            Participant Software against such Participant either
+            unilaterally or pursuant to a written agreement with
+            Participant.
+
+            6.3. In the event of termination under Sections 6.1 or 6.2
+            above, all end user licenses that have been validly granted
+            by You or any distributor hereunder prior to termination
+            (excluding licenses granted to You by any distributor)
+            shall survive termination.
+
+      7. LIMITATION OF LIABILITY.
+
+      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+      (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+      INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+      COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
+      LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+      CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+      LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
+      STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+      COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+      INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+      LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
+      INJURY RESULTING FROM SUCH PARTY"S NEGLIGENCE TO THE EXTENT
+      APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+      NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
+      CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
+      APPLY TO YOU.
+
+      8. U.S. GOVERNMENT END USERS.
+
+      The Covered Software is a "commercial item," as that term is
+      defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
+      computer software" (as that term is defined at 48 C.F.R. "
+      252.227-7014(a)(1)) and "commercial computer software
+      documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
+      1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
+      through 227.7202-4 (June 1995), all U.S. Government End Users
+      acquire Covered Software with only those rights set forth herein.
+      This U.S. Government Rights clause is in lieu of, and supersedes,
+      any other FAR, DFAR, or other clause or provision that addresses
+      Government rights in computer software under this License.
+
+      9. MISCELLANEOUS.
+
+      This License represents the complete agreement concerning subject
+      matter hereof. If any provision of this License is held to be
+      unenforceable, such provision shall be reformed only to the
+      extent necessary to make it enforceable. This License shall be
+      governed by the law of the jurisdiction specified in a notice
+      contained within the Original Software (except to the extent
+      applicable law, if any, provides otherwise), excluding such
+      jurisdiction"s conflict-of-law provisions. Any litigation
+      relating to this License shall be subject to the jurisdiction of
+      the courts located in the jurisdiction and venue specified in a
+      notice contained within the Original Software, with the losing
+      party responsible for costs, including, without limitation, court
+      costs and reasonable attorneys" fees and expenses. The
+      application of the United Nations Convention on Contracts for the
+      International Sale of Goods is expressly excluded. Any law or
+      regulation which provides that the language of a contract shall
+      be construed against the drafter shall not apply to this License.
+      You agree that You alone are responsible for compliance with the
+      United States export administration regulations (and the export
+      control laws and regulation of any other countries) when You use,
+      distribute or otherwise make available any Covered Software.
+
+      10. RESPONSIBILITY FOR CLAIMS.
+
+      As between Initial Developer and the Contributors, each party is
+      responsible for claims and damages arising, directly or
+      indirectly, out of its utilization of rights under this License
+      and You agree to work with Initial Developer and Contributors to
+      distribute such responsibility on an equitable basis. Nothing
+      herein is intended or shall be deemed to constitute any admission
+      of liability.
diff --git a/apache-maven/src/main/appended-resources/licenses/EPL-1.0.txt b/apache-maven/src/main/appended-resources/licenses/EPL-1.0.txt
new file mode 100644
index 0000000..6a200a1
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/licenses/EPL-1.0.txt
@@ -0,0 +1,210 @@
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+   1. DEFINITIONS
+
+   "Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and
+
+      b) in the case of each subsequent Contributor:
+
+         i) changes to the Program, and
+
+         ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are
+distributed by that particular Contributor. A Contribution 'originates' from
+a Contributor if it was added to the Program by such Contributor itself or
+anyone acting on such Contributor's behalf. Contributions do not include additions
+to the Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii) are
+not derivative works of the Program.
+
+   "Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are
+necessarily infringed by the use or sale of its Contribution alone or when
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including
+all Contributors.
+
+   2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce,
+prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative
+works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed
+Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form.
+This patent license shall apply to the combination of the Contribution and
+the Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered by
+the Licensed Patents. The patent license shall not apply to any other combinations
+which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses
+to its Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth
+in this Agreement.
+
+   3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under
+its own license agreement, provided that:
+
+      a) it complies with the terms and conditions of this Agreement; and
+
+      b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages,
+such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered
+by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor,
+and informs licensees how to obtain it in a reasonable manner on or through
+a medium customarily used for software exchange.
+
+   When the Program is made available in source code form:
+
+      a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution,
+if any, in a manner that reasonably allows subsequent Recipients to identify
+the originator of the Contribution.
+
+   4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with
+respect to end users, business partners and the like. While this license is
+intended to facilitate the commercial use of the Program, the Contributor
+who includes the Program in a commercial product offering should do so in
+a manner which does not create potential liability for other Contributors.
+Therefore, if a Contributor includes the Program in a commercial product offering,
+such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify
+every other Contributor ("Indemnified Contributor") against any losses, damages
+and costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor
+to the extent caused by the acts or omissions of such Commercial Contributor
+in connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense
+and any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product
+offering, Product X. That Contributor is then a Commercial Contributor. If
+that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial
+Contributor's responsibility alone. Under this section, the Commercial Contributor
+would have to defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other Contributor
+to pay any damages as a result, the Commercial Contributor must pay those
+damages.
+
+   5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON
+AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS
+OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+Each Recipient is solely responsible for determining the appropriateness of
+using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement, including but not limited to the
+risks and costs of program errors, compliance with applicable laws, damage
+to or loss of data, programs or equipment, and unavailability or interruption
+of operations.
+
+   6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS
+GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+   7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable
+law, it shall not affect the validity or enforceability of the remainder of
+the terms of this Agreement, and without further action by the parties hereto,
+such provision shall be reformed to the minimum extent necessary to make such
+provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself
+(excluding combinations of the Program with other software or hardware) infringes
+such Recipient's patent(s), then such Recipient's rights granted under Section
+2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to
+comply with any of the material terms or conditions of this Agreement and
+does not cure such failure in a reasonable period of time after becoming aware
+of such noncompliance. If all Recipient's rights under this Agreement terminate,
+Recipient agrees to cease use and distribution of the Program as soon as reasonably
+practicable. However, Recipient's obligations under this Agreement and any
+licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but
+in order to avoid inconsistency the Agreement is copyrighted and may only
+be modified in the following manner. The Agreement Steward reserves the right
+to publish new versions (including revisions) of this Agreement from time
+to time. No one other than the Agreement Steward has the right to modify this
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse
+Foundation may assign the responsibility to serve as the Agreement Steward
+to a suitable separate entity. Each new version of the Agreement will be given
+a distinguishing version number. The Program (including Contributions) may
+always be distributed subject to the version of the Agreement under which
+it was received. In addition, after a new version of the Agreement is published,
+Contributor may elect to distribute the Program (including its Contributions)
+under the new version. Except as expressly stated in Sections 2(a) and 2(b)
+above, Recipient receives no rights or licenses to the intellectual property
+of any Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted under
+this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual
+property laws of the United States of America. No party to this Agreement
+will bring a legal action under this Agreement more than one year after the
+cause of action arose. Each party waives its rights to a jury trial in any
+resulting litigation.
diff --git a/apache-maven/src/main/appended-resources/licenses/MIT-jsoup-1.12.1.txt b/apache-maven/src/main/appended-resources/licenses/MIT-jsoup-1.12.1.txt
new file mode 100644
index 0000000..fa8a44e
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/licenses/MIT-jsoup-1.12.1.txt
@@ -0,0 +1,23 @@
+https://raw.githubusercontent.com/jhy/jsoup/jsoup-1.12.1/LICENSE
+
+The MIT License
+
+Copyright (c) 2009-2019 Jonathan Hedley <jo...@hedley.net>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/apache-maven/src/main/appended-resources/licenses/MIT-slf4j-api-1.7.29.txt b/apache-maven/src/main/appended-resources/licenses/MIT-slf4j-api-1.7.29.txt
new file mode 100644
index 0000000..5a09409
--- /dev/null
+++ b/apache-maven/src/main/appended-resources/licenses/MIT-slf4j-api-1.7.29.txt
@@ -0,0 +1,23 @@
+https://raw.githubusercontent.com/qos-ch/slf4j/v_1.7.29/LICENSE.txt
+
+Copyright (c) 2004-2017 QOS.ch
+All rights reserved.
+
+Permission is hereby granted, free  of charge, to any person obtaining
+a  copy  of this  software  and  associated  documentation files  (the
+"Software"), to  deal in  the Software without  restriction, including
+without limitation  the rights to  use, copy, modify,  merge, publish,
+distribute,  sublicense, and/or sell  copies of  the Software,  and to
+permit persons to whom the Software  is furnished to do so, subject to
+the following conditions:
+
+The  above  copyright  notice  and  this permission  notice  shall  be
+included in all copies or substantial portions of the Software.
+
+THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/apache-maven/src/main/assembly/bin.xml b/apache-maven/src/main/assembly/bin.xml
new file mode 100644
index 0000000..a04557d
--- /dev/null
+++ b/apache-maven/src/main/assembly/bin.xml
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+  <id>bin</id>
+  <formats>
+    <format>zip</format>
+    <format>tar.gz</format>
+  </formats>
+  <componentDescriptors>
+    <componentDescriptor>src/main/assembly/component.xml</componentDescriptor>
+  </componentDescriptors>
+</assembly>
diff --git a/apache-maven/src/main/assembly/component.xml b/apache-maven/src/main/assembly/component.xml
new file mode 100644
index 0000000..14a297e
--- /dev/null
+++ b/apache-maven/src/main/assembly/component.xml
@@ -0,0 +1,104 @@
+<!--
+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.
+-->
+<component xmlns="http://maven.apache.org/ASSEMBLY-COMPONENT/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY-COMPONENT/2.0.0 http://maven.apache.org/xsd/assembly-component-2.0.0.xsd">
+  <dependencySets>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <outputDirectory>boot</outputDirectory>
+      <includes>
+        <include>org.codehaus.plexus:plexus-classworlds</include>
+      </includes>
+    </dependencySet>
+    <dependencySet>
+      <useProjectArtifact>false</useProjectArtifact>
+      <outputDirectory>lib</outputDirectory>
+      <excludes>
+        <exclude>org.codehaus.plexus:plexus-classworlds</exclude>
+        <exclude>org.jsoup:jsoup</exclude>
+      </excludes>
+    </dependencySet>
+  </dependencySets>
+  <fileSets>
+    <fileSet>
+      <includes>
+        <include>README*</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>target/maven-shared-archive-resources/META-INF</directory>
+      <outputDirectory>./</outputDirectory>
+      <includes>
+        <include>LICENSE</include>
+        <include>NOTICE</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>target/licenses/lib</directory>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>**</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>target/licenses/boot</directory>
+      <outputDirectory>boot</outputDirectory>
+      <includes>
+        <include>**</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>target/dependency/META-INF/native</directory>
+      <outputDirectory>lib/jansi-native</outputDirectory>
+      <includes>
+        <include>**</include>
+      </includes>
+      <fileMode>0755</fileMode>
+    </fileSet>
+    <fileSet>
+      <directory>src/bin</directory>
+      <outputDirectory>bin</outputDirectory>
+      <includes>
+        <include>*.cmd</include>
+        <include>*.conf</include>
+      </includes>
+      <lineEnding>dos</lineEnding>
+    </fileSet>
+    <fileSet>
+      <directory>src/bin</directory>
+      <outputDirectory>bin</outputDirectory>
+      <includes>
+        <include>mvn</include>
+        <include>mvnDebug</include>
+        <!-- This is so that CI systems can periodically run the profiler -->
+        <include>mvnyjp</include>
+      </includes>
+      <lineEnding>unix</lineEnding>
+      <fileMode>0755</fileMode>
+    </fileSet>
+    <fileSet>
+      <directory>src/conf</directory>
+      <outputDirectory>conf</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/lib</directory>
+      <outputDirectory>lib</outputDirectory>
+    </fileSet>
+  </fileSets>
+</component>
diff --git a/apache-maven/src/main/assembly/dir.xml b/apache-maven/src/main/assembly/dir.xml
new file mode 100644
index 0000000..580b209
--- /dev/null
+++ b/apache-maven/src/main/assembly/dir.xml
@@ -0,0 +1,30 @@
+<!--
+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.
+-->
+
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+  <id>dir</id>
+  <formats>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <componentDescriptors>
+    <componentDescriptor>src/main/assembly/component.xml</componentDescriptor>
+  </componentDescriptors>
+</assembly>
diff --git a/apache-maven/src/main/assembly/src.xml b/apache-maven/src/main/assembly/src.xml
new file mode 100644
index 0000000..9f43a0a
--- /dev/null
+++ b/apache-maven/src/main/assembly/src.xml
@@ -0,0 +1,58 @@
+<!--
+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.
+-->
+
+<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
+  <id>src</id>
+  <formats>
+    <format>zip</format>
+    <format>tar.gz</format>
+  </formats>
+  <fileSets>
+    <fileSet>
+      <directory>${project.basedir}/..</directory>
+      <outputDirectory>/</outputDirectory>
+      <excludes>
+        <exclude>%regex[(?!((?!target/)[^/]+/)*src/).*target.*]</exclude>
+        <exclude>**/*.log</exclude>
+        <exclude>**/.gitignore</exclude>
+        <exclude>**/.gitattributes</exclude>
+        <exclude>init-git-svn.sh</exclude>
+        <exclude>**/.repository/**</exclude>
+        <exclude>**/.classpath</exclude>
+        <exclude>**/.project</exclude>
+        <exclude>**/.settings/**</exclude>
+        <exclude>**/*.iml</exclude>
+        <exclude>**/*.ipr</exclude>
+        <exclude>**/.idea/**</exclude>
+        <exclude>**/.DS_Store</exclude>
+        <exclude>**/build/**</exclude>
+      </excludes>
+    </fileSet>
+    <fileSet>
+      <directory>${project.build.directory}/maven-shared-archive-resources/META-INF</directory>
+      <outputDirectory>/</outputDirectory>
+      <includes>
+        <include>DEPENDENCIES</include>
+        <!-- exclude the license and notice as they are not as accurate as the ones from above -->
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
+
diff --git a/apache-maven/src/site/site.xml b/apache-maven/src/site/site.xml
new file mode 100644
index 0000000..cd7807c
--- /dev/null
+++ b/apache-maven/src/site/site.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/DECORATION/1.8.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/DECORATION/1.8.0 http://maven.apache.org/xsd/decoration-1.8.0.xsd">
+
+  <edit>${project.scm.url}</edit>
+
+  <body>
+    <menu ref="parent"/>
+    <menu ref="reports"/>
+  </body>
+</project>
\ No newline at end of file
diff --git a/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java b/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java
new file mode 100644
index 0000000..257350c
--- /dev/null
+++ b/apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java
@@ -0,0 +1,54 @@
+package org.apache.maven.settings;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * Tests that the global settings.xml shipped with the distribution is in good state.
+ *
+ * @author Benjamin Bentmann
+ */
+public class GlobalSettingsTest
+    extends TestCase
+{
+
+    public void testValidGlobalSettings()
+        throws Exception
+    {
+        String basedir = System.getProperty( "basedir", System.getProperty( "user.dir" ) );
+
+        File globalSettingsFile = new File( basedir, "src/conf/settings.xml" );
+        assertTrue( globalSettingsFile.getAbsolutePath(), globalSettingsFile.isFile() );
+
+        try ( Reader reader = new InputStreamReader( new FileInputStream( globalSettingsFile ), StandardCharsets.UTF_8) )
+        {
+            new SettingsXpp3Reader().read( reader );
+        }
+    }
+
+}
diff --git a/deploySite.sh b/deploySite.sh
new file mode 100644
index 0000000..d7a5c5f
--- /dev/null
+++ b/deploySite.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+#
+# 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.
+#
+
+mvn -Preporting site site:stage "$@"
+mvn scm-publish:publish-scm "$@"
diff --git a/doap_Maven.rdf b/doap_Maven.rdf
new file mode 100644
index 0000000..1eb1216
--- /dev/null
+++ b/doap_Maven.rdf
@@ -0,0 +1,301 @@
+<!--
+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.
+-->
+<rdf:RDF xml:lang="en" xmlns="http://usefulinc.com/ns/doap#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:asfext="http://projects.apache.org/ns/asfext#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
+  <Project rdf:about="http://Maven.rdf.apache.org/">
+    <created>2001</created>
+    <license rdf:resource="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
+    <name>Apache Maven</name>
+    <homepage rdf:resource="https://maven.apache.org/"/>
+    <asfext:pmc rdf:resource="https://maven.apache.org/"/>
+    <shortdesc>Maven is a project development management and comprehension tool.</shortdesc>
+    <description>Maven is a project development management and comprehension tool. Based on the concept of a project object model: builds, dependency management, documentation creation, site publication, and distribution publication are all controlled from the declarative file. Maven can be extended by plugins to utilise a number of other development tools for reporting or the build process.</description>
+    <bug-database rdf:resource="https://issues.apache.org/jira/browse/MNG"/>
+    <mailing-list rdf:resource="https://maven.apache.org/mailing-lists.html"/>
+    <download-page rdf:resource="https://maven.apache.org/download.html"/>
+    <programming-language>Java</programming-language>
+    <category rdf:resource="http://projects.apache.org/category/build-management"/>
+    <release>
+      <Version>
+        <name>Latest stable release</name>
+        <created>2019-11-19</created>
+        <revision>3.6.3</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.3/source/apache-maven-3.6.3-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.3/source/apache-maven-3.6.3-src.tar.gz</file-release>
+      </Version>
+      <Version>
+        <name>Apache Maven 3.6.2</name>
+        <created>2019-08-27</created>
+        <revision>3.6.2</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.2/source/apache-maven-3.6.2-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.2/source/apache-maven-3.6.2-src.tar.gz</file-release>
+      </Version>
+      <Version>
+        <name>Apache Maven 3.6.1</name>
+        <created>2019-04-04</created>
+        <revision>3.6.1</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.1/source/apache-maven-3.6.1-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.1/source/apache-maven-3.6.1-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.6.0</name>
+        <created>2018-10-23</created>
+        <revision>3.6.0</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.0/source/apache-maven-3.6.0-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.6.0/source/apache-maven-3.6.0-src.tar.gz</file-release>
+      </Version>
+    </release>
+     <release>
+      <Version>
+        <name>Apache Maven 3.5.4</name>
+        <created>2018-06-21</created>
+        <revision>3.5.4</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.4/source/apache-maven-3.5.4-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.4/source/apache-maven-3.5.4-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.5.3</name>
+        <created>2018-03-08</created>
+        <revision>3.5.3</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.3/source/apache-maven-3.5.3-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.3/source/apache-maven-3.5.3-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.5.2</name>
+        <created>2017-10-24</created>
+        <revision>3.5.2</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.2/source/apache-maven-3.5.2-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.2/source/apache-maven-3.5.2-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.5.0</name>
+        <created>2017-04-07</created>
+        <revision>3.5.0</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.0/source/apache-maven-3.5.0-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.5.0/source/apache-maven-3.5.0-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.3.9</name>
+        <created>2015-11-14</created>
+        <revision>3.3.9</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.9/source/apache-maven-3.3.9-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.9/source/apache-maven-3.3.9-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.3.3</name>
+        <created>2015-04-28</created>
+        <revision>3.3.3</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.3/source/apache-maven-3.3.3-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.3/source/apache-maven-3.3.3-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.3.1</name>
+        <created>2015-03-18</created>
+        <revision>3.3.1</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.1/binaries/apache-maven-3.3.1-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.1/binaries/apache-maven-3.3.1-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.1/source/apache-maven-3.3.1-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.3.1/source/apache-maven-3.3.1-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.2.5</name>
+        <created>2014-12-20</created>
+        <revision>3.2.5</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/source/apache-maven-3.2.5-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.5/source/apache-maven-3.2.5-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.2.3</name>
+        <created>2014-08-17</created>
+        <revision>3.2.3</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/source/apache-maven-3.2.3-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.3/source/apache-maven-3.2.3-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.2.2</name>
+        <created>2014-06-25</created>
+        <revision>3.2.2</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/source/apache-maven-3.2.2-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.2/source/apache-maven-3.2.2-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.2.1</name>
+        <created>2014-02-21</created>
+        <revision>3.2.1</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/source/apache-maven-3.2.1-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.2.1/source/apache-maven-3.2.1-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.1.1</name>
+        <created>2013-10-04</created>
+        <revision>3.1.1</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/source/apache-maven-3.1.1-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.1/source/apache-maven-3.1.1-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.1.0</name>
+        <created>2013-07-15</created>
+        <revision>3.1.0</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/binaries/apache-maven-3.1.0-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/binaries/apache-maven-3.1.0-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/source/apache-maven-3.1.0-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.1.0/source/apache-maven-3.1.0-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0.5</name>
+        <created>2013-02-23</created>
+        <revision>3.0.5</revision>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/source/apache-maven-3.0.5-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/maven-3/3.0.5/source/apache-maven-3.0.5-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0.4</name>
+        <created>2012-01-20</created>
+        <revision>3.0.4</revision>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.4-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.4-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.4-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.4-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0.3</name>
+        <created>2011-03-03</created>
+        <revision>3.0.3</revision>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.3-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.3-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.3-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.3-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0.2</name>
+        <created>2011-01-12</created>
+        <revision>3.0.2</revision>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.2-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.2-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.2-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.2-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0.1</name>
+        <created>2010-11-23</created>
+        <revision>3.0.1</revision>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.1-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0.1-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.1-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0.1-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <release>
+      <Version>
+        <name>Apache Maven 3.0</name>
+        <created>2010-10-04</created>
+        <revision>3.0</revision>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0-bin.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/binaries/apache-maven-3.0-bin.tar.gz</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0-src.zip</file-release>
+        <file-release>http://archive.apache.org/dist/maven/source/apache-maven-3.0-src.tar.gz</file-release>
+      </Version>
+    </release>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://gitbox.apache.org/repos/asf/maven.git"/>
+        <browse rdf:resource="https://gitbox.apache.org/repos/asf/maven.git"/>
+      </GitRepository>
+    </repository>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://gitbox.apache.org/repos/asf/maven-integration-testing.git"/>
+        <browse rdf:resource="https://gitbox.apache.org/repos/asf/maven-integration-testing.git"/>
+      </GitRepository>
+    </repository>
+    <maintainer>
+      <foaf:Person>
+        <foaf:name>Apache Maven PMC</foaf:name>
+          <foaf:mbox rdf:resource="mailto:dev@maven.apache.org"/>
+      </foaf:Person>
+    </maintainer>
+  </Project>
+</rdf:RDF>
diff --git a/maven-artifact/pom.xml b/maven-artifact/pom.xml
new file mode 100644
index 0000000..336505b
--- /dev/null
+++ b/maven-artifact/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven</groupId>
+    <artifactId>maven</artifactId>
+    <version>3.7.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>maven-artifact</artifactId>
+
+  <name>Maven Artifact</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <configuration>
+          <archive>
+            <manifestEntries>
+              <Main-Class>org.apache.maven.artifact.versioning.ComparableVersion</Main-Class>
+            </manifestEntries>
+          </archive>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>integration-test</goal>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java b/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
new file mode 100644
index 0000000..377935d
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
@@ -0,0 +1,161 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * Maven Artifact interface. Notice that it mixes artifact definition concepts (groupId, artifactId, version)
+ * with dependency information (version range, scope).
+ */
+public interface Artifact
+    extends Comparable<Artifact>
+{
+
+    String RELEASE_VERSION = "RELEASE";
+
+    String LATEST_VERSION = "LATEST";
+
+    String SNAPSHOT_VERSION = "SNAPSHOT";
+
+    Pattern VERSION_FILE_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}\\.[0-9]{6})-([0-9]+)$" );
+
+    // TODO into artifactScope handler
+
+    String SCOPE_COMPILE = "compile";
+
+    String SCOPE_COMPILE_PLUS_RUNTIME = "compile+runtime";
+
+    String SCOPE_TEST = "test";
+
+    String SCOPE_RUNTIME = "runtime";
+
+    String SCOPE_RUNTIME_PLUS_SYSTEM = "runtime+system";
+
+    String SCOPE_PROVIDED = "provided";
+
+    String SCOPE_SYSTEM = "system";
+
+    String SCOPE_IMPORT = "import";   // Used to import dependencyManagement dependencies
+
+    String getGroupId();
+
+    String getArtifactId();
+
+    String getVersion();
+
+    void setVersion( String version );
+
+    String getScope();
+
+    String getType();
+
+    String getClassifier();
+
+    boolean hasClassifier();
+
+    File getFile();
+
+    void setFile( File destination );
+
+    String getBaseVersion();
+
+    void setBaseVersion( String baseVersion );
+
+    String getId();
+
+    String getDependencyConflictId();
+
+    void addMetadata( ArtifactMetadata metadata );
+
+    Collection<ArtifactMetadata> getMetadataList();
+
+    void setRepository( ArtifactRepository remoteRepository );
+
+    ArtifactRepository getRepository();
+
+    void updateVersion( String version, ArtifactRepository localRepository );
+
+    String getDownloadUrl();
+
+    void setDownloadUrl( String downloadUrl );
+
+    ArtifactFilter getDependencyFilter();
+
+    void setDependencyFilter( ArtifactFilter artifactFilter );
+
+    ArtifactHandler getArtifactHandler();
+
+    List<String> getDependencyTrail();
+
+    void setDependencyTrail( List<String> dependencyTrail );
+
+    void setScope( String scope );
+
+    VersionRange getVersionRange();
+
+    void setVersionRange( VersionRange newRange );
+
+    void selectVersion( String version );
+
+    void setGroupId( String groupId );
+
+    void setArtifactId( String artifactId );
+
+    boolean isSnapshot();
+
+    void setResolved( boolean resolved );
+
+    boolean isResolved();
+
+    void setResolvedVersion( String version );
+
+    void setArtifactHandler( ArtifactHandler handler );
+
+    boolean isRelease();
+
+    void setRelease( boolean release );
+
+    List<ArtifactVersion> getAvailableVersions();
+
+    void setAvailableVersions( List<ArtifactVersion> versions );
+
+    boolean isOptional();
+
+    void setOptional( boolean optional );
+
+    ArtifactVersion getSelectedVersion()
+        throws OverConstrainedVersionException;
+
+    boolean isSelectedVersionKnown()
+        throws OverConstrainedVersionException;
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
new file mode 100644
index 0000000..bd76edd
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/ArtifactUtils.java
@@ -0,0 +1,216 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+
+import org.apache.commons.lang3.Validate;
+import org.apache.maven.artifact.versioning.VersionRange;
+
+/**
+ * ArtifactUtils
+ */
+public final class ArtifactUtils
+{
+
+    public static boolean isSnapshot( String version )
+    {
+        if ( version != null )
+        {
+            if ( version.regionMatches( true, version.length() - Artifact.SNAPSHOT_VERSION.length(),
+                                        Artifact.SNAPSHOT_VERSION, 0, Artifact.SNAPSHOT_VERSION.length() ) )
+            {
+                return true;
+            }
+            else if ( Artifact.VERSION_FILE_PATTERN.matcher( version ).matches() )
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static String toSnapshotVersion( String version )
+    {
+        notBlank( version, "version can neither be null, empty nor blank" );
+
+        int lastHyphen = version.lastIndexOf( '-' );
+        if ( lastHyphen > 0 )
+        {
+            int prevHyphen = version.lastIndexOf( '-', lastHyphen - 1 );
+            if ( prevHyphen > 0 )
+            {
+                Matcher m = Artifact.VERSION_FILE_PATTERN.matcher( version );
+                if ( m.matches() )
+                {
+                    return m.group( 1 ) + "-" + Artifact.SNAPSHOT_VERSION;
+                }
+            }
+        }
+        return version;
+    }
+
+    public static String versionlessKey( Artifact artifact )
+    {
+        return versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
+    }
+
+    public static String versionlessKey( String groupId, String artifactId )
+    {
+        notBlank( groupId, "groupId can neither be null, empty nor blank" );
+        notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
+
+        return groupId + ":" + artifactId;
+    }
+
+    public static String key( Artifact artifact )
+    {
+        return key( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
+    }
+
+    public static String key( String groupId, String artifactId, String version )
+    {
+        notBlank( groupId, "groupId can neither be null, empty nor blank" );
+        notBlank( artifactId, "artifactId can neither be null, empty nor blank" );
+        notBlank( version, "version can neither be null, empty nor blank" );
+
+        return groupId + ":" + artifactId + ":" + version;
+    }
+
+    private static void notBlank( String str, String message )
+    {
+        int c = str != null && str.length() > 0 ? str.charAt( 0 ) : 0;
+        if ( ( c < '0' || c > '9' ) && ( c < 'a' || c > 'z' ) )
+        {
+            Validate.notBlank( str, message );
+        }
+    }
+
+    public static Map<String, Artifact> artifactMapByVersionlessId( Collection<Artifact> artifacts )
+    {
+        Map<String, Artifact> artifactMap = new LinkedHashMap<>();
+
+        if ( artifacts != null )
+        {
+            for ( Artifact artifact : artifacts )
+            {
+                artifactMap.put( versionlessKey( artifact ), artifact );
+            }
+        }
+
+        return artifactMap;
+    }
+
+    public static Artifact copyArtifactSafe( Artifact artifact )
+    {
+        return ( artifact != null ) ? copyArtifact( artifact ) : null;
+    }
+
+    public static Artifact copyArtifact( Artifact artifact )
+    {
+        VersionRange range = artifact.getVersionRange();
+
+        // For some reason with the introduction of MNG-1577 we have the case in Yoko where a depMan section has
+        // something like the following:
+        //
+        // <dependencyManagement>
+        //     <dependencies>
+        //         <!--  Yoko modules -->
+        //         <dependency>
+        //             <groupId>org.apache.yoko</groupId>
+        //             <artifactId>yoko-core</artifactId>
+        //             <version>${version}</version>
+        //         </dependency>
+        // ...
+        //
+        // And the range is not set so we'll check here and set it. jvz.
+
+        if ( range == null )
+        {
+            range = VersionRange.createFromVersion( artifact.getVersion() );
+        }
+
+        DefaultArtifact clone = new DefaultArtifact( artifact.getGroupId(), artifact.getArtifactId(), range,
+            artifact.getScope(), artifact.getType(), artifact.getClassifier(),
+            artifact.getArtifactHandler(), artifact.isOptional() );
+        clone.setRelease( artifact.isRelease() );
+        clone.setResolvedVersion( artifact.getVersion() );
+        clone.setResolved( artifact.isResolved() );
+        clone.setFile( artifact.getFile() );
+
+        clone.setAvailableVersions( copyList( artifact.getAvailableVersions() ) );
+        if ( artifact.getVersion() != null )
+        {
+            clone.setBaseVersion( artifact.getBaseVersion() );
+        }
+        clone.setDependencyFilter( artifact.getDependencyFilter() );
+        clone.setDependencyTrail( copyList( artifact.getDependencyTrail() ) );
+        clone.setDownloadUrl( artifact.getDownloadUrl() );
+        clone.setRepository( artifact.getRepository() );
+
+        return clone;
+    }
+
+    /** Returns <code>to</code> collection */
+    public static <T extends Collection<Artifact>> T copyArtifacts( Collection<Artifact> from, T to )
+    {
+        for ( Artifact artifact : from )
+        {
+            to.add( ArtifactUtils.copyArtifact( artifact ) );
+        }
+        return to;
+    }
+
+    public static <K, T extends Map<K, Artifact>> T copyArtifacts( Map<K, ? extends Artifact> from, T to )
+    {
+        if ( from != null )
+        {
+            for ( Map.Entry<K, ? extends Artifact> entry : from.entrySet() )
+            {
+                to.put( entry.getKey(), ArtifactUtils.copyArtifact( entry.getValue() ) );
+            }
+        }
+
+        return to;
+    }
+
+    private static <T> List<T> copyList( List<T> original )
+    {
+        List<T> copy = null;
+
+        if ( original != null )
+        {
+            copy = new ArrayList<>();
+
+            if ( !original.isEmpty() )
+            {
+                copy.addAll( original );
+            }
+        }
+
+        return copy;
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
new file mode 100644
index 0000000..d63d6c9
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
@@ -0,0 +1,588 @@
+package org.apache.maven.artifact;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author Jason van Zyl
+ */
+public class DefaultArtifact
+    implements Artifact
+{
+    private String groupId;
+
+    private String artifactId;
+
+    private String baseVersion;
+
+    private final String type;
+
+    private final String classifier;
+
+    private volatile String scope;
+
+    private volatile File file;
+
+    private ArtifactRepository repository;
+
+    private String downloadUrl;
+
+    private ArtifactFilter dependencyFilter;
+
+    private ArtifactHandler artifactHandler;
+
+    private List<String> dependencyTrail;
+
+    private volatile String version;
+
+    private VersionRange versionRange;
+
+    private volatile boolean resolved;
+
+    private boolean release;
+
+    private List<ArtifactVersion> availableVersions;
+
+    private Map<Object, ArtifactMetadata> metadataMap;
+
+    private boolean optional;
+
+    public DefaultArtifact( String groupId, String artifactId, String version, String scope, String type,
+                            String classifier, ArtifactHandler artifactHandler )
+    {
+        this( groupId, artifactId, VersionRange.createFromVersion( version ), scope, type, classifier, artifactHandler,
+              false );
+    }
+
+    public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type,
+                            String classifier, ArtifactHandler artifactHandler )
+    {
+        this( groupId, artifactId, versionRange, scope, type, classifier, artifactHandler, false );
+    }
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    public DefaultArtifact( String groupId, String artifactId, VersionRange versionRange, String scope, String type,
+                            String classifier, ArtifactHandler artifactHandler, boolean optional )
+    {
+        this.groupId = groupId;
+
+        this.artifactId = artifactId;
+
+        this.versionRange = versionRange;
+
+        selectVersionFromNewRangeIfAvailable();
+
+        this.artifactHandler = artifactHandler;
+
+        this.scope = scope;
+
+        this.type = type;
+
+        if ( classifier == null )
+        {
+            classifier = artifactHandler.getClassifier();
+        }
+
+        this.classifier = classifier;
+
+        this.optional = optional;
+
+        validateIdentity();
+    }
+
+    private void validateIdentity()
+    {
+        if ( empty( groupId ) )
+        {
+            throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+                "The groupId cannot be empty." );
+        }
+
+        if ( artifactId == null )
+        {
+            throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+                "The artifactId cannot be empty." );
+        }
+
+        if ( type == null )
+        {
+            throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+                "The type cannot be empty." );
+        }
+
+        if ( ( version == null ) && ( versionRange == null ) )
+        {
+            throw new InvalidArtifactRTException( groupId, artifactId, getVersion(), type,
+                "The version cannot be empty." );
+        }
+    }
+
+    private boolean empty( String value )
+    {
+        return ( value == null ) || ( value.trim().length() < 1 );
+    }
+
+    public String getClassifier()
+    {
+        return classifier;
+    }
+
+    public boolean hasClassifier()
+    {
+        return StringUtils.isNotEmpty( classifier );
+    }
+
+    public String getScope()
+    {
+        return scope;
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+        setBaseVersionInternal( version );
+        versionRange = null;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    public void setFile( File file )
+    {
+        this.file = file;
+    }
+
+    public File getFile()
+    {
+        return file;
+    }
+
+    public ArtifactRepository getRepository()
+    {
+        return repository;
+    }
+
+    public void setRepository( ArtifactRepository repository )
+    {
+        this.repository = repository;
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    public String getId()
+    {
+        return getDependencyConflictId() + ":" + getBaseVersion();
+    }
+
+    public String getDependencyConflictId()
+    {
+        StringBuilder sb = new StringBuilder( 128 );
+        sb.append( getGroupId() );
+        sb.append( ':' );
+        appendArtifactTypeClassifierString( sb );
+        return sb.toString();
+    }
+
+    private void appendArtifactTypeClassifierString( StringBuilder sb )
+    {
+        sb.append( getArtifactId() );
+        sb.append( ':' );
+        sb.append( getType() );
+        if ( hasClassifier() )
+        {
+            sb.append( ':' );
+            sb.append( getClassifier() );
+        }
+    }
+
+    public void addMetadata( ArtifactMetadata metadata )
+    {
+        if ( metadataMap == null )
+        {
+            metadataMap = new HashMap<>();
+        }
+
+        ArtifactMetadata m = metadataMap.get( metadata.getKey() );
+        if ( m != null )
+        {
+            m.merge( metadata );
+        }
+        else
+        {
+            metadataMap.put( metadata.getKey(), metadata );
+        }
+    }
+
+    public Collection<ArtifactMetadata> getMetadataList()
+    {
+        if ( metadataMap == null )
+        {
+            return Collections.emptyList();
+        }
+
+        return Collections.unmodifiableCollection( metadataMap.values() );
+    }
+
+    // ----------------------------------------------------------------------
+    // Object overrides
+    // ----------------------------------------------------------------------
+
+    public String toString()
+    {
+        StringBuilder sb = new StringBuilder();
+        if ( getGroupId() != null )
+        {
+            sb.append( getGroupId() );
+            sb.append( ':' );
+        }
+        appendArtifactTypeClassifierString( sb );
+        sb.append( ':' );
+        if ( getBaseVersionInternal() != null )
+        {
+            sb.append( getBaseVersionInternal() );
+        }
+        else
+        {
+            sb.append( versionRange.toString() );
+        }
+        if ( scope != null )
+        {
+            sb.append( ':' );
+            sb.append( scope );
+        }
+        return sb.toString();
+    }
+
+    public int hashCode()
+    {
+        int result = 17;
+        result = 37 * result + groupId.hashCode();
+        result = 37 * result + artifactId.hashCode();
+        result = 37 * result + type.hashCode();
+        if ( version != null )
+        {
+            result = 37 * result + version.hashCode();
+        }
+        result = 37 * result + ( classifier != null ? classifier.hashCode() : 0 );
+        return result;
+    }
+
+    public boolean equals( Object o )
+    {
+        if ( o == this )
+        {
+            return true;
+        }
+
+        if ( !( o instanceof Artifact ) )
+        {
+            return false;
+        }
+
+        Artifact a = (Artifact) o;
+
+        if ( !a.getGroupId().equals( groupId ) )
+        {
+            return false;
+        }
+        else if ( !a.getArtifactId().equals( artifactId ) )
+        {
+            return false;
+        }
+        else if ( !a.getVersion().equals( version ) )
+        {
+            return false;
+        }
+        else if ( !a.getType().equals( type ) )
+        {
+            return false;
+        }
+        else if ( a.getClassifier() == null ? classifier != null : !a.getClassifier().equals( classifier ) )
+        {
+            return false;
+        }
+
+        // We don't consider the version range in the comparison, just the resolved version
+
+        return true;
+    }
+
+    public String getBaseVersion()
+    {
+        if ( baseVersion == null && version != null )
+        {
+            setBaseVersionInternal( version );
+        }
+
+        return baseVersion;
+    }
+
+    protected String getBaseVersionInternal()
+    {
+        if ( ( baseVersion == null ) && ( version != null ) )
+        {
+            setBaseVersionInternal( version );
+        }
+
+        return baseVersion;
+    }
+
+    public void setBaseVersion( String baseVersion )
+    {
+        setBaseVersionInternal( baseVersion );
+    }
+
+    protected void setBaseVersionInternal( String baseVersion )
+    {
+        this.baseVersion = ArtifactUtils.toSnapshotVersion( baseVersion );
+    }
+
+    public int compareTo( Artifact a )
+    {
+        int result = groupId.compareTo( a.getGroupId() );
+        if ( result == 0 )
+        {
+            result = artifactId.compareTo( a.getArtifactId() );
+            if ( result == 0 )
+            {
+                result = type.compareTo( a.getType() );
+                if ( result == 0 )
+                {
+                    if ( classifier == null )
+                    {
+                        if ( a.getClassifier() != null )
+                        {
+                            result = 1;
+                        }
+                    }
+                    else
+                    {
+                        if ( a.getClassifier() != null )
+                        {
+                            result = classifier.compareTo( a.getClassifier() );
+                        }
+                        else
+                        {
+                            result = -1;
+                        }
+                    }
+                    if ( result == 0 )
+                    {
+                        // We don't consider the version range in the comparison, just the resolved version
+                        result = new DefaultArtifactVersion( version ).compareTo(
+                            new DefaultArtifactVersion( a.getVersion() ) );
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    public void updateVersion( String version, ArtifactRepository localRepository )
+    {
+        setResolvedVersion( version );
+        setFile( new File( localRepository.getBasedir(), localRepository.pathOf( this ) ) );
+    }
+
+    public String getDownloadUrl()
+    {
+        return downloadUrl;
+    }
+
+    public void setDownloadUrl( String downloadUrl )
+    {
+        this.downloadUrl = downloadUrl;
+    }
+
+    public ArtifactFilter getDependencyFilter()
+    {
+        return dependencyFilter;
+    }
+
+    public void setDependencyFilter( ArtifactFilter artifactFilter )
+    {
+        dependencyFilter = artifactFilter;
+    }
+
+    public ArtifactHandler getArtifactHandler()
+    {
+        return artifactHandler;
+    }
+
+    public List<String> getDependencyTrail()
+    {
+        return dependencyTrail;
+    }
+
+    public void setDependencyTrail( List<String> dependencyTrail )
+    {
+        this.dependencyTrail = dependencyTrail;
+    }
+
+    public void setScope( String scope )
+    {
+        this.scope = scope;
+    }
+
+    public VersionRange getVersionRange()
+    {
+        return versionRange;
+    }
+
+    public void setVersionRange( VersionRange versionRange )
+    {
+        this.versionRange = versionRange;
+        selectVersionFromNewRangeIfAvailable();
+    }
+
+    private void selectVersionFromNewRangeIfAvailable()
+    {
+        if ( ( versionRange != null ) && ( versionRange.getRecommendedVersion() != null ) )
+        {
+            selectVersion( versionRange.getRecommendedVersion().toString() );
+        }
+        else
+        {
+            version = null;
+            baseVersion = null;
+        }
+    }
+
+    public void selectVersion( String version )
+    {
+        this.version = version;
+        setBaseVersionInternal( version );
+    }
+
+    public void setGroupId( String groupId )
+    {
+        this.groupId = groupId;
+    }
+
+    public void setArtifactId( String artifactId )
+    {
+        this.artifactId = artifactId;
+    }
+
+    public boolean isSnapshot()
+    {
+        return getBaseVersion() != null
+            && ( getBaseVersion().endsWith( SNAPSHOT_VERSION ) || getBaseVersion().equals( LATEST_VERSION ) );
+    }
+
+    public void setResolved( boolean resolved )
+    {
+        this.resolved = resolved;
+    }
+
+    public boolean isResolved()
+    {
+        return resolved;
+    }
+
+    public void setResolvedVersion( String version )
+    {
+        this.version = version;
+        // retain baseVersion
+    }
+
+    public void setArtifactHandler( ArtifactHandler artifactHandler )
+    {
+        this.artifactHandler = artifactHandler;
+    }
+
+    public void setRelease( boolean release )
+    {
+        this.release = release;
+    }
+
+    public boolean isRelease()
+    {
+        return release;
+    }
+
+    public List<ArtifactVersion> getAvailableVersions()
+    {
+        return availableVersions;
+    }
+
+    public void setAvailableVersions( List<ArtifactVersion> availableVersions )
+    {
+        this.availableVersions = availableVersions;
+    }
+
+    public boolean isOptional()
+    {
+        return optional;
+    }
+
+    public ArtifactVersion getSelectedVersion()
+        throws OverConstrainedVersionException
+    {
+        return versionRange.getSelectedVersion( this );
+    }
+
+    public boolean isSelectedVersionKnown()
+        throws OverConstrainedVersionException
+    {
+        return versionRange.isSelectedVersionKnown( this );
+    }
+
+    public void setOptional( boolean optional )
+    {
+        this.optional = optional;
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java
new file mode 100644
index 0000000..adf656d
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/InvalidArtifactRTException.java
@@ -0,0 +1,100 @@
+package org.apache.maven.artifact;
+
+/*
+ * 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.
+ */
+
+/**
+ * Exception thrown when the identity of an artifact can not be established,
+ * eg. one of groupId, artifactId, version or type is null.
+ */
+public class InvalidArtifactRTException
+    extends RuntimeException
+{
+
+    private final String groupId;
+    private final String artifactId;
+    private final String version;
+    private final String type;
+    private final String baseMessage;
+
+    public InvalidArtifactRTException( String groupId,
+                                       String artifactId,
+                                       String version,
+                                       String type,
+                                       String message )
+    {
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+        this.type = type;
+        this.baseMessage = message;
+    }
+
+    public InvalidArtifactRTException( String groupId,
+                                       String artifactId,
+                                       String version,
+                                       String type,
+                                       String message,
+                                       Throwable cause )
+    {
+        super( cause );
+
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.version = version;
+        this.type = type;
+        this.baseMessage = message;
+    }
+
+    public String getMessage()
+    {
+        return "For artifact {" + getArtifactKey() + "}: " + getBaseMessage();
+    }
+
+    public String getBaseMessage()
+    {
+        return baseMessage;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public String getArtifactKey()
+    {
+        return groupId + ":" + artifactId + ":" + version + ":" + type;
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java b/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java
new file mode 100644
index 0000000..cd07d8a
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/handler/ArtifactHandler.java
@@ -0,0 +1,58 @@
+package org.apache.maven.artifact.handler;
+
+/*
+ * 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.
+ */
+
+/**
+ * An artifact handler defines for a dependency type, defined as Plexus role:<ul>
+ * <li>extension and classifier, to be able to download the file,</li>
+ * <li>information on how to use the artifact: whether to add it to the classpath, or to take into account its
+ * dependencies.</li>
+ * </ul>
+ * 
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public interface ArtifactHandler
+{
+    String ROLE = ArtifactHandler.class.getName();
+
+    /**
+     * Get the file extension associated to the file represented by the dependency type.
+     *
+     * @return the file extension
+     */
+    String getExtension();
+
+    String getDirectory();
+
+    /**
+     * Get the classifier associated to the dependency type.
+     * 
+     * @return the classifier
+     */
+    String getClassifier();
+
+    String getPackaging();
+
+    boolean isIncludesDependencies();
+
+    String getLanguage();
+
+    boolean isAddedToClasspath();
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
new file mode 100644
index 0000000..7bf8c61
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadata.java
@@ -0,0 +1,30 @@
+package org.apache.maven.artifact.metadata;
+
+/*
+ * 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.
+ */
+
+/**
+ * Contains metadata about an artifact, and methods to retrieve/store it from an artifact repository.
+ */
+@Deprecated
+public interface ArtifactMetadata
+    extends org.apache.maven.repository.legacy.metadata.ArtifactMetadata
+{
+    void merge( ArtifactMetadata metadata );
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
new file mode 100644
index 0000000..0b33345
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepository.java
@@ -0,0 +1,134 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.repository.Proxy;
+
+/**
+ * Abstraction of an artifact repository. Artifact repositories can be remote, local, or even build reactor or
+ * IDE workspace.
+ */
+public interface ArtifactRepository
+{
+    String pathOf( Artifact artifact );
+
+    String pathOfRemoteRepositoryMetadata( ArtifactMetadata artifactMetadata );
+
+    String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository );
+
+    String getUrl();
+
+    void setUrl( String url );
+
+    String getBasedir();
+
+    String getProtocol();
+
+    String getId();
+
+    void setId( String id );
+
+    ArtifactRepositoryPolicy getSnapshots();
+
+    void setSnapshotUpdatePolicy( ArtifactRepositoryPolicy policy );
+
+    ArtifactRepositoryPolicy getReleases();
+
+    void setReleaseUpdatePolicy( ArtifactRepositoryPolicy policy );
+
+    ArtifactRepositoryLayout getLayout();
+
+    void setLayout( ArtifactRepositoryLayout layout );
+
+    String getKey();
+
+    @Deprecated
+    boolean isUniqueVersion();
+
+    @Deprecated
+    boolean isBlacklisted();
+
+    @Deprecated
+    void setBlacklisted( boolean blackListed );
+
+    //
+    // New interface methods for the repository system.
+    //
+    /**
+     *
+     * @param artifact
+     * @since 3.0-alpha-3
+     */
+    Artifact find( Artifact artifact );
+
+    /**
+     * Finds the versions of the specified artifact that are available in this repository.
+     *
+     * @param artifact The artifact whose available versions should be determined, must not be {@code null}.
+     * @return The available versions of the artifact or an empty list if none, never {@code null}.
+     * @since 3.0-alpha-3
+     */
+    List<String> findVersions( Artifact artifact );
+
+    /**
+     * Indicates whether this repository is backed by actual projects. For instance, the build reactor or IDE workspace
+     * are examples of such repositories.
+     *
+     * @return {@code true} if the repository is backed by actual projects, {@code false} otherwise.
+     * @since 3.0-beta-1
+     */
+    boolean isProjectAware();
+
+    /**
+     * @since 3.0-alpha-3
+     */
+    void setAuthentication( Authentication authentication );
+    /**
+     * @since 3.0-alpha-3
+     */
+    Authentication getAuthentication();
+
+    /**
+     * @since 3.0-alpha-3
+     */
+    void setProxy( Proxy proxy );
+    /**
+     * @since 3.0-alpha-3
+     */
+    Proxy getProxy();
+
+    /**
+     * @since 3.0.3
+     * @return the repositories mirrored by the actual one
+     */
+    List<ArtifactRepository> getMirroredRepositories();
+
+    /**
+     * @since 3.0.3
+     * @param mirroredRepositories the repositories that the actual one mirrors
+     */
+    void setMirroredRepositories( List<ArtifactRepository> mirroredRepositories );
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
new file mode 100644
index 0000000..5ce317f
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/ArtifactRepositoryPolicy.java
@@ -0,0 +1,223 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * Describes a set of policies for a repository to use under certain conditions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ArtifactRepositoryPolicy
+{
+    public static final String UPDATE_POLICY_NEVER = "never";
+
+    public static final String UPDATE_POLICY_ALWAYS = "always";
+
+    public static final String UPDATE_POLICY_DAILY = "daily";
+
+    public static final String UPDATE_POLICY_INTERVAL = "interval";
+
+    public static final String CHECKSUM_POLICY_FAIL = "fail";
+
+    public static final String CHECKSUM_POLICY_WARN = "warn";
+
+    public static final String CHECKSUM_POLICY_IGNORE = "ignore";
+
+    private boolean enabled;
+
+    private String updatePolicy;
+
+    private String checksumPolicy;
+
+    public ArtifactRepositoryPolicy()
+    {
+        this( true, null, null );
+    }
+
+    public ArtifactRepositoryPolicy( ArtifactRepositoryPolicy policy )
+    {
+        this( policy.isEnabled(), policy.getUpdatePolicy(), policy.getChecksumPolicy() );
+    }
+
+    public ArtifactRepositoryPolicy( boolean enabled, String updatePolicy, String checksumPolicy )
+    {
+        this.enabled = enabled;
+
+        if ( updatePolicy == null )
+        {
+            updatePolicy = UPDATE_POLICY_DAILY;
+        }
+        this.updatePolicy = updatePolicy;
+
+        if ( checksumPolicy == null )
+        {
+            checksumPolicy = CHECKSUM_POLICY_WARN;
+        }
+        this.checksumPolicy = checksumPolicy;
+    }
+
+    public void setEnabled( boolean enabled )
+    {
+        this.enabled = enabled;
+    }
+
+    public void setUpdatePolicy( String updatePolicy )
+    {
+        if ( updatePolicy != null )
+        {
+            this.updatePolicy = updatePolicy;
+        }
+    }
+
+    public void setChecksumPolicy( String checksumPolicy )
+    {
+        if ( checksumPolicy != null )
+        {
+            this.checksumPolicy = checksumPolicy;
+        }
+    }
+
+    public boolean isEnabled()
+    {
+        return enabled;
+    }
+
+    public String getUpdatePolicy()
+    {
+        return updatePolicy;
+    }
+
+    public String getChecksumPolicy()
+    {
+        return checksumPolicy;
+    }
+
+    public boolean checkOutOfDate( Date lastModified )
+    {
+        boolean checkForUpdates = false;
+
+        if ( UPDATE_POLICY_ALWAYS.equals( updatePolicy ) )
+        {
+            checkForUpdates = true;
+        }
+        else if ( UPDATE_POLICY_DAILY.equals( updatePolicy ) )
+        {
+            // Get local midnight boundary
+            Calendar cal = Calendar.getInstance();
+
+            cal.set( Calendar.HOUR_OF_DAY, 0 );
+            cal.set( Calendar.MINUTE, 0 );
+            cal.set( Calendar.SECOND, 0 );
+            cal.set( Calendar.MILLISECOND, 0 );
+
+            if ( cal.getTime().after( lastModified ) )
+            {
+                checkForUpdates = true;
+            }
+        }
+        else if ( updatePolicy.startsWith( UPDATE_POLICY_INTERVAL ) )
+        {
+            String s = updatePolicy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+            int minutes = Integer.parseInt( s );
+            Calendar cal = Calendar.getInstance();
+            cal.add( Calendar.MINUTE, -minutes );
+            if ( cal.getTime().after( lastModified ) )
+            {
+                checkForUpdates = true;
+            }
+        }
+        // else assume "never"
+        return checkForUpdates;
+    }
+
+    @Override
+    public String toString()
+    {
+        StringBuilder buffer = new StringBuilder( 64 );
+        buffer.append( "{enabled=" );
+        buffer.append( enabled );
+        buffer.append( ", checksums=" );
+        buffer.append( checksumPolicy );
+        buffer.append( ", updates=" );
+        buffer.append( updatePolicy );
+        buffer.append( '}' );
+        return buffer.toString();
+    }
+
+    public void merge( ArtifactRepositoryPolicy policy )
+    {
+        if ( policy != null && policy.isEnabled() )
+        {
+            setEnabled( true );
+
+            if ( ordinalOfCksumPolicy( policy.getChecksumPolicy() ) < ordinalOfCksumPolicy( getChecksumPolicy() ) )
+            {
+                setChecksumPolicy( policy.getChecksumPolicy() );
+            }
+
+            if ( ordinalOfUpdatePolicy( policy.getUpdatePolicy() ) < ordinalOfUpdatePolicy( getUpdatePolicy() ) )
+            {
+                setUpdatePolicy( policy.getUpdatePolicy() );
+            }
+        }
+    }
+
+    private int ordinalOfCksumPolicy( String policy )
+    {
+        if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL.equals( policy ) )
+        {
+            return 2;
+        }
+        else if ( ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE.equals( policy ) )
+        {
+            return 0;
+        }
+        else
+        {
+            return 1;
+        }
+    }
+
+    @SuppressWarnings( "checkstyle:magicnumber" )
+    private int ordinalOfUpdatePolicy( String policy )
+    {
+        if ( ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
+        {
+            return 1440;
+        }
+        else if ( ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
+        {
+            return 0;
+        }
+        else if ( policy != null && policy.startsWith( ArtifactRepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
+        {
+            String s = policy.substring( UPDATE_POLICY_INTERVAL.length() + 1 );
+            return Integer.parseInt( s );
+        }
+        else
+        {
+            return Integer.MAX_VALUE;
+        }
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java
new file mode 100644
index 0000000..f02d1c5
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/Authentication.java
@@ -0,0 +1,129 @@
+package org.apache.maven.artifact.repository;
+
+/*
+ * 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.
+ */
+
+/**
+ * Authentication
+ */
+public class Authentication
+{
+
+    private String privateKey;
+
+    private String passphrase;
+
+    public Authentication( String userName, String password )
+    {
+        this.username = userName;
+        this.password = password;
+    }
+
+    /**
+     * Username used to login to the host
+     */
+    private String username;
+
+    /**
+     * Password associated with the login
+     */
+    private String password;
+
+    /**
+     * Get the user's password which is used when connecting to the repository.
+     *
+     * @return password of user
+     */
+    public String getPassword()
+    {
+        return password;
+    }
+
+    /**
+     * Set the user's password which is used when connecting to the repository.
+     *
+     * @param password password of the user
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+    /**
+     * Get the username used to access the repository.
+     *
+     * @return username at repository
+     */
+    public String getUsername()
+    {
+        return username;
+    }
+
+    /**
+     * Set username used to access the repository.
+     *
+     * @param userName the username used to access repository
+     */
+    public void setUsername( final String userName )
+    {
+        this.username = userName;
+    }
+
+    /**
+     * Get the passphrase of the private key file. The passphrase is used only when host/protocol supports
+     * authentication via exchange of private/public keys and private key was used for authentication.
+     *
+     * @return passphrase of the private key file
+     */
+    public String getPassphrase()
+    {
+        return passphrase;
+    }
+
+    /**
+     * Set the passphrase of the private key file.
+     *
+     * @param passphrase passphrase of the private key file
+     */
+    public void setPassphrase( final String passphrase )
+    {
+        this.passphrase = passphrase;
+    }
+
+    /**
+     * Get the absolute path to the private key file.
+     *
+     * @return absolute path to private key
+     */
+    public String getPrivateKey()
+    {
+        return privateKey;
+    }
+
+    /**
+     * Set the absolute path to private key file.
+     *
+     * @param privateKey path to private key in local file system
+     */
+    public void setPrivateKey( final String privateKey )
+    {
+        this.privateKey = privateKey;
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java
new file mode 100644
index 0000000..2a18c86
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout.java
@@ -0,0 +1,38 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/** @author jdcasey */
+public interface ArtifactRepositoryLayout
+{
+    String ROLE = ArtifactRepositoryLayout.class.getName();
+
+    String getId();
+
+    String pathOf( Artifact artifact );
+
+    String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository );
+
+    String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata );
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java
new file mode 100644
index 0000000..f6bc573
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/ArtifactRepositoryLayout2.java
@@ -0,0 +1,34 @@
+package org.apache.maven.artifact.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+/**
+ * ArtifactRepositoryLayout2
+ */
+public interface ArtifactRepositoryLayout2
+    extends ArtifactRepositoryLayout
+{
+
+    ArtifactRepository newMavenArtifactRepository( String id, String url, ArtifactRepositoryPolicy snapshots,
+                                                   ArtifactRepositoryPolicy releases );
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java
new file mode 100644
index 0000000..3848852
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadataStoreException.java
@@ -0,0 +1,40 @@
+package org.apache.maven.artifact.repository.metadata;
+
+/*
+ * 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.
+ */
+
+/**
+ * Problem storing the repository metadata in the local repository.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class RepositoryMetadataStoreException
+    extends Exception
+{
+    public RepositoryMetadataStoreException( String message )
+    {
+        super( message );
+    }
+
+    public RepositoryMetadataStoreException( String message,
+                                             Exception e )
+    {
+        super( message, e );
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
new file mode 100644
index 0000000..a2917b5
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
@@ -0,0 +1,347 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
+/**
+ * Base class for artifact resolution exceptions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class AbstractArtifactResolutionException
+    extends Exception
+{
+    private String groupId;
+
+    private String artifactId;
+
+    private String version;
+
+    private String type;
+
+    private String classifier;
+
+    private Artifact artifact;
+
+    private List<ArtifactRepository> remoteRepositories;
+
+    private final String originalMessage;
+
+    private final String path;
+
+    static final String LS = System.lineSeparator();
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    protected AbstractArtifactResolutionException( String message,
+                                                   String groupId,
+                                                   String artifactId,
+                                                   String version,
+                                                   String type,
+                                                   String classifier,
+                                                   List<ArtifactRepository> remoteRepositories,
+                                                   List<String> path )
+    {
+        this( message, groupId, artifactId, version, type, classifier, remoteRepositories, path, null );
+    }
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    protected AbstractArtifactResolutionException( String message,
+                                                   String groupId,
+                                                   String artifactId,
+                                                   String version,
+                                                   String type,
+                                                   String classifier,
+                                                   List<ArtifactRepository> remoteRepositories,
+                                                   List<String> path,
+                                                   Throwable t )
+    {
+        super( constructMessageBase( message, groupId, artifactId, version, type, remoteRepositories, path ), t );
+
+        this.originalMessage = message;
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.type = type;
+        this.classifier = classifier;
+        this.version = version;
+        this.remoteRepositories = remoteRepositories;
+        this.path = constructArtifactPath( path, "" );
+    }
+
+    protected AbstractArtifactResolutionException( String message,
+                                                   Artifact artifact )
+    {
+        this( message, artifact, null );
+    }
+
+    protected AbstractArtifactResolutionException( String message,
+                                                   Artifact artifact,
+                                                   List<ArtifactRepository> remoteRepositories )
+    {
+        this( message, artifact, remoteRepositories, null );
+    }
+
+    protected AbstractArtifactResolutionException( String message,
+                                                   Artifact artifact,
+                                                   List<ArtifactRepository> remoteRepositories,
+                                                   Throwable t )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+            artifact.getClassifier(), remoteRepositories, artifact.getDependencyTrail(), t );
+        this.artifact = artifact;
+    }
+
+    public Artifact getArtifact()
+    {
+        return artifact;
+    }
+
+    public String getGroupId()
+    {
+        return groupId;
+    }
+
+    public String getArtifactId()
+    {
+        return artifactId;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public String getType()
+    {
+        return type;
+    }
+
+    /** @return the classifier */
+    public String getClassifier()
+    {
+        return this.classifier;
+    }
+
+    /** @return the path */
+    public String getPath()
+    {
+        return this.path;
+    }
+
+    public List<ArtifactRepository> getRemoteRepositories()
+    {
+        return remoteRepositories;
+    }
+
+    public String getOriginalMessage()
+    {
+        return originalMessage;
+    }
+
+    protected static String constructArtifactPath( List<String> path,
+                                                   String indentation )
+    {
+        StringBuilder sb = new StringBuilder();
+
+        if ( path != null )
+        {
+            sb.append( LS );
+            sb.append( indentation );
+            sb.append( "Path to dependency: " );
+            sb.append( LS );
+            int num = 1;
+            for ( Iterator<String> i = path.iterator(); i.hasNext(); num++ )
+            {
+                sb.append( indentation );
+                sb.append( '\t' );
+                sb.append( num );
+                sb.append( ") " );
+                sb.append( i.next() );
+                sb.append( LS );
+            }
+        }
+
+        return sb.toString();
+    }
+
+    private static String constructMessageBase( String message,
+                                                String groupId,
+                                                String artifactId,
+                                                String version,
+                                                String type,
+                                                List<ArtifactRepository> remoteRepositories,
+                                                List<String> path )
+    {
+        StringBuilder sb = new StringBuilder();
+
+        sb.append( message );
+
+        if ( message == null || !message.contains( "from the specified remote repositories:" ) )
+        {
+            sb.append( LS );
+            sb.append( "  " ).append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( type ).append(
+                ':' ).append( version );
+            sb.append( LS );
+            if ( remoteRepositories != null )
+            {
+                sb.append( LS );
+                sb.append( "from the specified remote repositories:" );
+                sb.append( LS ).append( "  " );
+
+                if ( remoteRepositories.isEmpty() )
+                {
+                    sb.append( "(none)" );
+                }
+
+                for ( Iterator<ArtifactRepository> i = remoteRepositories.iterator(); i.hasNext(); )
+                {
+                    ArtifactRepository remoteRepository = i.next();
+
+                    sb.append( remoteRepository.getId() );
+                    sb.append( " (" );
+                    sb.append( remoteRepository.getUrl() );
+
+                    ArtifactRepositoryPolicy releases = remoteRepository.getReleases();
+                    if ( releases != null )
+                    {
+                        sb.append( ", releases=" ).append( releases.isEnabled() );
+                    }
+
+                    ArtifactRepositoryPolicy snapshots = remoteRepository.getSnapshots();
+                    if ( snapshots != null )
+                    {
+                        sb.append( ", snapshots=" ).append( snapshots.isEnabled() );
+                    }
+
+                    sb.append( ')' );
+                    if ( i.hasNext() )
+                    {
+                        sb.append( ',' ).append( LS ).append( "  " );
+                    }
+                }
+            }
+
+            sb.append( constructArtifactPath( path, "" ) );
+            sb.append( LS );
+        }
+
+        return sb.toString();
+    }
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    protected static String constructMissingArtifactMessage( String message,
+                                                             String indentation,
+                                                             String groupId,
+                                                             String artifactId,
+                                                             String version,
+                                                             String type,
+                                                             String classifier,
+                                                             String downloadUrl,
+                                                             List<String> path )
+    {
+        StringBuilder sb = new StringBuilder( message );
+
+        if ( !"pom".equals( type ) )
+        {
+            if ( downloadUrl != null )
+            {
+                sb.append( LS );
+                sb.append( LS );
+                sb.append( indentation );
+                sb.append( "Try downloading the file manually from: " );
+                sb.append( LS );
+                sb.append( indentation );
+                sb.append( "    " );
+                sb.append( downloadUrl );
+            }
+            else
+            {
+                sb.append( LS );
+                sb.append( LS );
+                sb.append( indentation );
+                sb.append( "Try downloading the file manually from the project website." );
+            }
+
+            sb.append( LS );
+            sb.append( LS );
+            sb.append( indentation );
+            sb.append( "Then, install it using the command: " );
+            sb.append( LS );
+            sb.append( indentation );
+            sb.append( "    mvn install:install-file -DgroupId=" );
+            sb.append( groupId );
+            sb.append( " -DartifactId=" );
+            sb.append( artifactId );
+            sb.append( " -Dversion=" );
+            sb.append( version );
+
+            //insert classifier only if it was used in the artifact
+            if ( classifier != null && !classifier.equals( "" ) )
+            {
+                sb.append( " -Dclassifier=" );
+                sb.append( classifier );
+            }
+            sb.append( " -Dpackaging=" );
+            sb.append( type );
+            sb.append( " -Dfile=/path/to/file" );
+            sb.append( LS );
+
+            // If people want to deploy it
+            sb.append( LS );
+            sb.append( indentation );
+            sb.append( "Alternatively, if you host your own repository you can deploy the file there: " );
+            sb.append( LS );
+            sb.append( indentation );
+            sb.append( "    mvn deploy:deploy-file -DgroupId=" );
+            sb.append( groupId );
+            sb.append( " -DartifactId=" );
+            sb.append( artifactId );
+            sb.append( " -Dversion=" );
+            sb.append( version );
+
+            //insert classifier only if it was used in the artifact
+            if ( classifier != null && !classifier.equals( "" ) )
+            {
+                sb.append( " -Dclassifier=" );
+                sb.append( classifier );
+            }
+            sb.append( " -Dpackaging=" );
+            sb.append( type );
+            sb.append( " -Dfile=/path/to/file" );
+            sb.append( " -Durl=[url] -DrepositoryId=[id]" );
+            sb.append( LS );
+        }
+
+        sb.append( constructArtifactPath( path, indentation ) );
+        sb.append( LS );
+
+        return sb.toString();
+    }
+
+    public String getArtifactPath()
+    {
+        return path;
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
new file mode 100644
index 0000000..76f7b58
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactNotFoundException.java
@@ -0,0 +1,85 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactNotFoundException
+    extends AbstractArtifactResolutionException
+{
+    private String downloadUrl;
+
+    protected ArtifactNotFoundException( String message, Artifact artifact,
+                                         List<ArtifactRepository> remoteRepositories )
+    {
+        super( message, artifact, remoteRepositories );
+    }
+
+    public ArtifactNotFoundException( String message, Artifact artifact )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+              artifact.getClassifier(), null, artifact.getDownloadUrl(), artifact.getDependencyTrail() );
+    }
+
+    protected ArtifactNotFoundException( String message, Artifact artifact,
+                                         List<ArtifactRepository> remoteRepositories, Throwable cause )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getType(),
+              artifact.getClassifier(), remoteRepositories, artifact.getDownloadUrl(), artifact.getDependencyTrail(),
+              cause );
+    }
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    public ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+                                      String classifier, List<ArtifactRepository> remoteRepositories,
+                                      String downloadUrl, List<String> path, Throwable cause )
+    {
+        super( constructMissingArtifactMessage( message, "", groupId, artifactId, version, type, classifier,
+                                                downloadUrl, path ), groupId, artifactId, version, type, classifier,
+               remoteRepositories, null, cause );
+
+        this.downloadUrl = downloadUrl;
+    }
+
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    private ArtifactNotFoundException( String message, String groupId, String artifactId, String version, String type,
+                                       String classifier, List<ArtifactRepository> remoteRepositories,
+                                       String downloadUrl, List<String> path )
+    {
+        super( constructMissingArtifactMessage( message, "", groupId, artifactId, version, type, classifier,
+                                                downloadUrl, path ), groupId, artifactId, version, type, classifier,
+               remoteRepositories, null );
+
+        this.downloadUrl = downloadUrl;
+    }
+
+    public String getDownloadUrl()
+    {
+        return downloadUrl;
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
new file mode 100644
index 0000000..074d812
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
@@ -0,0 +1,68 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * @author Jason van Zyl
+ */
+public class ArtifactResolutionException
+    extends AbstractArtifactResolutionException
+{
+    @SuppressWarnings( "checkstyle:parameternumber" )
+    public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
+                                        String classifier, List<ArtifactRepository> remoteRepositories,
+                                        List<String> path, Throwable t )
+    {
+        super( message, groupId, artifactId, version, type, classifier, remoteRepositories, path, t );
+    }
+
+    public ArtifactResolutionException( String message, String groupId, String artifactId, String version, String type,
+                                        String classifier, Throwable t )
+    {
+        super( message, groupId, artifactId, version, type, classifier, null, null, t );
+    }
+
+    public ArtifactResolutionException( String message, Artifact artifact )
+    {
+        super( message, artifact );
+    }
+
+    public ArtifactResolutionException( String message, Artifact artifact, List<ArtifactRepository> remoteRepositories )
+    {
+        super( message, artifact, remoteRepositories );
+    }
+
+    public ArtifactResolutionException( String message, Artifact artifact, Throwable cause )
+    {
+        super( message, artifact, null, cause );
+    }
+
+    public ArtifactResolutionException( String message, Artifact artifact, List<ArtifactRepository> remoteRepositories,
+                                        Throwable cause )
+    {
+        super( message, artifact, remoteRepositories, cause );
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
new file mode 100644
index 0000000..bbc6733
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
@@ -0,0 +1,45 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Indicates a cycle in the dependency graph.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class CyclicDependencyException
+    extends ArtifactResolutionException
+{
+    private Artifact artifact;
+
+    public CyclicDependencyException( String message,
+                                      Artifact artifact )
+    {
+        super( message, artifact );
+        this.artifact = artifact;
+    }
+
+    public Artifact getArtifact()
+    {
+        return artifact;
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java
new file mode 100644
index 0000000..d08dfd5
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/MultipleArtifactsNotFoundException.java
@@ -0,0 +1,123 @@
+package org.apache.maven.artifact.resolver;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+/**
+ * Exception caused when one or more artifacts can not be resolved because they are not found in the
+ * local or remote repositories.
+ */
+public class MultipleArtifactsNotFoundException
+    extends ArtifactResolutionException
+{
+    private final List<Artifact> resolvedArtifacts;
+    private final List<Artifact> missingArtifacts;
+
+    /** @deprecated use {@link #MultipleArtifactsNotFoundException(Artifact, List, List, List)} */
+    @Deprecated
+    public MultipleArtifactsNotFoundException( Artifact originatingArtifact,
+                                               List<Artifact> missingArtifacts,
+                                               List<ArtifactRepository> remoteRepositories )
+    {
+        this( originatingArtifact, new ArrayList<>(), missingArtifacts, remoteRepositories );
+    }
+
+    /**
+     * Create an instance of the exception with allrequired information.
+     *
+     * @param originatingArtifact the artifact that was being resolved
+     * @param resolvedArtifacts   artifacts that could be resolved
+     * @param missingArtifacts    artifacts that could not be resolved
+     * @param remoteRepositories  remote repositories where the missing artifacts were not found
+     */
+    public MultipleArtifactsNotFoundException( Artifact originatingArtifact,
+                                               List<Artifact> resolvedArtifacts,
+                                               List<Artifact> missingArtifacts,
+                                               List<ArtifactRepository> remoteRepositories )
+    {
+        super( constructMessage( missingArtifacts ), originatingArtifact, remoteRepositories );
+        this.resolvedArtifacts = resolvedArtifacts;
+        this.missingArtifacts = missingArtifacts;
+    }
+
+    /**
+     * artifacts that could be resolved
+     *
+     * @return {@link List} of {@link Artifact}
+     */
+    public List<Artifact> getResolvedArtifacts()
+    {
+        return resolvedArtifacts;
+    }
+
+    /**
+     * artifacts that could NOT be resolved
+     *
+     * @return {@link List} of {@link Artifact}
+     */
+    public List<Artifact> getMissingArtifacts()
+    {
+        return missingArtifacts;
+    }
+
+    private static String constructMessage( List<Artifact> artifacts )
+    {
+        StringBuilder buffer = new StringBuilder( 256 );
+
+        buffer.append( "Missing:\n" );
+        buffer.append( "----------\n" );
+
+        int counter = 0;
+
+        for ( Artifact artifact : artifacts )
+        {
+            String message = ( ++counter ) + ") " + artifact.getId();
+
+            buffer.append( constructMissingArtifactMessage( message, "  ", artifact.getGroupId(),
+                    artifact.getArtifactId(), artifact.getVersion(), artifact.getType(), artifact.getClassifier(),
+                    artifact.getDownloadUrl(), artifact.getDependencyTrail() ) );
+        }
+
+        buffer.append( "----------\n" );
+
+        int size = artifacts.size();
+
+        buffer.append( size ).append( " required artifact" );
+
+        if ( size > 1 )
+        {
+            buffer.append( "s are" );
+        }
+        else
+        {
+            buffer.append( " is" );
+        }
+
+        buffer.append( " missing.\n\nfor artifact: " );
+
+        return buffer.toString();
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java
new file mode 100644
index 0000000..27b08a8
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/filter/ArtifactFilter.java
@@ -0,0 +1,30 @@
+package org.apache.maven.artifact.resolver.filter;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
+ */
+public interface ArtifactFilter
+{
+    boolean include( Artifact artifact );
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
new file mode 100644
index 0000000..5b516a9
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ArtifactVersion.java
@@ -0,0 +1,42 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * 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.
+ */
+
+/**
+ * Describes an artifact version in terms of its components, converts it to/from a string and
+ * compares two versions.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public interface ArtifactVersion
+    extends Comparable<ArtifactVersion>
+{
+    int getMajorVersion();
+
+    int getMinorVersion();
+
+    int getIncrementalVersion();
+
+    int getBuildNumber();
+
+    String getQualifier();
+
+    void parseVersion( String version );
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
new file mode 100644
index 0000000..987be48
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
@@ -0,0 +1,795 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.math.BigInteger;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Deque;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+
+/**
+ * <p>
+ * Generic implementation of version comparison.
+ * </p>
+ *
+ * Features:
+ * <ul>
+ * <li>mixing of '<code>-</code>' (hyphen) and '<code>.</code>' (dot) separators,</li>
+ * <li>transition between characters and digits also constitutes a separator:
+ *     <code>1.0alpha1 =&gt; [1, 0, alpha, 1]</code></li>
+ * <li>unlimited number of version components,</li>
+ * <li>version components in the text can be digits or strings,</li>
+ * <li>strings are checked for well-known qualifiers and the qualifier ordering is used for version ordering.
+ *     Well-known qualifiers (case insensitive) are:<ul>
+ *     <li><code>alpha</code> or <code>a</code></li>
+ *     <li><code>beta</code> or <code>b</code></li>
+ *     <li><code>milestone</code> or <code>m</code></li>
+ *     <li><code>rc</code> or <code>cr</code></li>
+ *     <li><code>snapshot</code></li>
+ *     <li><code>(the empty string)</code> or <code>ga</code> or <code>final</code></li>
+ *     <li><code>sp</code></li>
+ *     </ul>
+ *     Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
+ *   </li>
+ * <li>a hyphen usually precedes a qualifier, and is always less important than something preceded with a dot.</li>
+ * </ul>
+ *
+ * @see <a href="https://cwiki.apache.org/confluence/display/MAVENOLD/Versioning">"Versioning" on Maven Wiki</a>
+ * @author <a href="mailto:kenney@apache.org">Kenney Westerhof</a>
+ * @author <a href="mailto:hboutemy@apache.org">Hervé Boutemy</a>
+ */
+public class ComparableVersion
+    implements Comparable<ComparableVersion>
+{
+    private static final int MAX_INTITEM_LENGTH = 9;
+
+    private static final int MAX_LONGITEM_LENGTH = 18;
+
+    private String value;
+
+    private String canonical;
+
+    private ListItem items;
+
+    private interface Item
+    {
+        int INT_ITEM = 3;
+        int LONG_ITEM = 4;
+        int BIGINTEGER_ITEM = 0;
+        int STRING_ITEM = 1;
+        int LIST_ITEM = 2;
+
+        int compareTo( Item item );
+
+        int getType();
+
+        boolean isNull();
+    }
+
+    /**
+     * Represents a numeric item in the version item list that can be represented with an int.
+     */
+    private static class IntItem
+        implements Item
+    {
+        private final int value;
+
+        public static final IntItem ZERO = new IntItem();
+
+        private IntItem()
+        {
+            this.value = 0;
+        }
+
+        IntItem( String str )
+        {
+            this.value = Integer.parseInt( str );
+        }
+
+        @Override
+        public int getType()
+        {
+            return INT_ITEM;
+        }
+
+        @Override
+        public boolean isNull()
+        {
+            return value == 0;
+        }
+
+        @Override
+        public int compareTo( Item item )
+        {
+            if ( item == null )
+            {
+                return ( value == 0 ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
+            }
+
+            switch ( item.getType() )
+            {
+                case INT_ITEM:
+                    int itemValue = ( (IntItem) item ).value;
+                    return Integer.compare( value, itemValue );
+                case LONG_ITEM:
+                case BIGINTEGER_ITEM:
+                    return -1;
+
+                case STRING_ITEM:
+                    return 1; // 1.1 > 1-sp
+
+                case LIST_ITEM:
+                    return 1; // 1.1 > 1-1
+
+                default:
+                    throw new IllegalStateException( "invalid item: " + item.getClass() );
+            }
+        }
+
+        @Override
+        public boolean equals( Object o )
+        {
+            if ( this == o )
+            {
+                return true;
+            }
+            if ( o == null || getClass() != o.getClass() )
+            {
+                return false;
+            }
+
+            IntItem intItem = (IntItem) o;
+
+            return value == intItem.value;
+
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return value;
+        }
+
+        @Override
+        public String toString()
+        {
+            return Integer.toString( value );
+        }
+    }
+
+    /**
+     * Represents a numeric item in the version item list that can be represented with a long.
+     */
+    private static class LongItem
+        implements Item
+    {
+        private final long value;
+
+        LongItem( String str )
+        {
+            this.value = Long.parseLong( str );
+        }
+
+        @Override
+        public int getType()
+        {
+            return LONG_ITEM;
+        }
+
+        @Override
+        public boolean isNull()
+        {
+            return value == 0;
+        }
+
+        @Override
+        public int compareTo( Item item )
+        {
+            if ( item == null )
+            {
+                return ( value == 0 ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
+            }
+
+            switch ( item.getType() )
+            {
+                case INT_ITEM:
+                    return 1;
+                case LONG_ITEM:
+                    long itemValue = ( (LongItem) item ).value;
+                    return Long.compare( value, itemValue );
+                case BIGINTEGER_ITEM:
+                    return -1;
+
+                case STRING_ITEM:
+                    return 1; // 1.1 > 1-sp
+
+                case LIST_ITEM:
+                    return 1; // 1.1 > 1-1
+
+                default:
+                    throw new IllegalStateException( "invalid item: " + item.getClass() );
+            }
+        }
+
+        @Override
+        public boolean equals( Object o )
+        {
+            if ( this == o )
+            {
+                return true;
+            }
+            if ( o == null || getClass() != o.getClass() )
+            {
+                return false;
+            }
+
+            LongItem longItem = (LongItem) o;
+
+            return value == longItem.value;
+
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return (int) ( value ^ ( value >>> 32 ) );
+        }
+
+        @Override
+        public String toString()
+        {
+            return Long.toString( value );
+        }
+    }
+
+    /**
+     * Represents a numeric item in the version item list.
+     */
+    private static class BigIntegerItem
+        implements Item
+    {
+        private final BigInteger value;
+
+        BigIntegerItem( String str )
+        {
+            this.value = new BigInteger( str );
+        }
+
+        @Override
+        public int getType()
+        {
+            return BIGINTEGER_ITEM;
+        }
+
+        @Override
+        public boolean isNull()
+        {
+            return BigInteger.ZERO.equals( value );
+        }
+
+        @Override
+        public int compareTo( Item item )
+        {
+            if ( item == null )
+            {
+                return BigInteger.ZERO.equals( value ) ? 0 : 1; // 1.0 == 1, 1.1 > 1
+            }
+
+            switch ( item.getType() )
+            {
+                case INT_ITEM:
+                case LONG_ITEM:
+                    return 1;
+
+                case BIGINTEGER_ITEM:
+                    return value.compareTo( ( (BigIntegerItem) item ).value );
+
+                case STRING_ITEM:
+                    return 1; // 1.1 > 1-sp
+
+                case LIST_ITEM:
+                    return 1; // 1.1 > 1-1
+
+                default:
+                    throw new IllegalStateException( "invalid item: " + item.getClass() );
+            }
+        }
+
+        @Override
+        public boolean equals( Object o )
+        {
+            if ( this == o )
+            {
+                return true;
+            }
+            if ( o == null || getClass() != o.getClass() )
+            {
+                return false;
+            }
+
+            BigIntegerItem that = (BigIntegerItem) o;
+
+            return value.equals( that.value );
+
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return value.hashCode();
+        }
+
+        public String toString()
+        {
+            return value.toString();
+        }
+    }
+
+    /**
+     * Represents a string in the version item list, usually a qualifier.
+     */
+    private static class StringItem
+        implements Item
+    {
+        private static final List<String> QUALIFIERS =
+                Arrays.asList( "alpha", "beta", "milestone", "rc", "snapshot", "", "sp"  );
+
+        private static final Properties ALIASES = new Properties();
+        static
+        {
+            ALIASES.put( "ga", "" );
+            ALIASES.put( "final", "" );
+            ALIASES.put( "release", "" );
+            ALIASES.put( "cr", "rc" );
+        }
+
+        /**
+         * A comparable value for the empty-string qualifier. This one is used to determine if a given qualifier makes
+         * the version older than one without a qualifier, or more recent.
+         */
+        private static final String RELEASE_VERSION_INDEX = String.valueOf( QUALIFIERS.indexOf( "" ) );
+
+        private final String value;
+
+        StringItem( String value, boolean followedByDigit )
+        {
+            if ( followedByDigit && value.length() == 1 )
+            {
+                // a1 = alpha-1, b1 = beta-1, m1 = milestone-1
+                switch ( value.charAt( 0 ) )
+                {
+                    case 'a':
+                        value = "alpha";
+                        break;
+                    case 'b':
+                        value = "beta";
+                        break;
+                    case 'm':
+                        value = "milestone";
+                        break;
+                    default:
+                }
+            }
+            this.value = ALIASES.getProperty( value , value );
+        }
+
+        @Override
+        public int getType()
+        {
+            return STRING_ITEM;
+        }
+
+        @Override
+        public boolean isNull()
+        {
+            return ( comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX ) == 0 );
+        }
+
+        /**
+         * Returns a comparable value for a qualifier.
+         *
+         * This method takes into account the ordering of known qualifiers then unknown qualifiers with lexical
+         * ordering.
+         *
+         * just returning an Integer with the index here is faster, but requires a lot of if/then/else to check for -1
+         * or QUALIFIERS.size and then resort to lexical ordering. Most comparisons are decided by the first character,
+         * so this is still fast. If more characters are needed then it requires a lexical sort anyway.
+         *
+         * @param qualifier
+         * @return an equivalent value that can be used with lexical comparison
+         */
+        public static String comparableQualifier( String qualifier )
+        {
+            int i = QUALIFIERS.indexOf( qualifier );
+
+            return i == -1 ? ( QUALIFIERS.size() + "-" + qualifier ) : String.valueOf( i );
+        }
+
+        @Override
+        public int compareTo( Item item )
+        {
+            if ( item == null )
+            {
+                // 1-rc < 1, 1-ga > 1
+                return comparableQualifier( value ).compareTo( RELEASE_VERSION_INDEX );
+            }
+            switch ( item.getType() )
+            {
+                case INT_ITEM:
+                case LONG_ITEM:
+                case BIGINTEGER_ITEM:
+                    return -1; // 1.any < 1.1 ?
+
+                case STRING_ITEM:
+                    return comparableQualifier( value ).compareTo( comparableQualifier( ( (StringItem) item ).value ) );
+
+                case LIST_ITEM:
+                    return -1; // 1.any < 1-1
+
+                default:
+                    throw new IllegalStateException( "invalid item: " + item.getClass() );
+            }
+        }
+
+        @Override
+        public boolean equals( Object o )
+        {
+            if ( this == o )
+            {
+                return true;
+            }
+            if ( o == null || getClass() != o.getClass() )
+            {
+                return false;
+            }
+
+            StringItem that = (StringItem) o;
+
+            return value.equals( that.value );
+
+        }
+
+        @Override
+        public int hashCode()
+        {
+            return value.hashCode();
+        }
+
+        public String toString()
+        {
+            return value;
+        }
+    }
+
+    /**
+     * Represents a version list item. This class is used both for the global item list and for sub-lists (which start
+     * with '-(number)' in the version specification).
+     */
+    private static class ListItem
+        extends ArrayList<Item>
+        implements Item
+    {
+        @Override
+        public int getType()
+        {
+            return LIST_ITEM;
+        }
+
+        @Override
+        public boolean isNull()
+        {
+            return ( size() == 0 );
+        }
+
+        void normalize()
+        {
+            for ( int i = size() - 1; i >= 0; i-- )
+            {
+                Item lastItem = get( i );
+
+                if ( lastItem.isNull() )
+                {
+                    // remove null trailing items: 0, "", empty list
+                    remove( i );
+                }
+                else if ( !( lastItem instanceof ListItem ) )
+                {
+                    break;
+                }
+            }
+        }
+
+        @Override
+        public int compareTo( Item item )
+        {
+            if ( item == null )
+            {
+                if ( size() == 0 )
+                {
+                    return 0; // 1-0 = 1- (normalize) = 1
+                }
+                Item first = get( 0 );
+                return first.compareTo( null );
+            }
+            switch ( item.getType() )
+            {
+                case INT_ITEM:
+                case LONG_ITEM:
+                case BIGINTEGER_ITEM:
+                    return -1; // 1-1 < 1.0.x
+
+                case STRING_ITEM:
+                    return 1; // 1-1 > 1-sp
+
+                case LIST_ITEM:
+                    Iterator<Item> left = iterator();
+                    Iterator<Item> right = ( (ListItem) item ).iterator();
+
+                    while ( left.hasNext() || right.hasNext() )
+                    {
+                        Item l = left.hasNext() ? left.next() : null;
+                        Item r = right.hasNext() ? right.next() : null;
+
+                        // if this is shorter, then invert the compare and mul with -1
+                        int result = l == null ? ( r == null ? 0 : -1 * r.compareTo( l ) ) : l.compareTo( r );
+
+                        if ( result != 0 )
+                        {
+                            return result;
+                        }
+                    }
+
+                    return 0;
+
+                default:
+                    throw new IllegalStateException( "invalid item: " + item.getClass() );
+            }
+        }
+
+        @Override
+        public String toString()
+        {
+            StringBuilder buffer = new StringBuilder();
+            for ( Item item : this )
+            {
+                if ( buffer.length() > 0 )
+                {
+                    buffer.append( ( item instanceof ListItem ) ? '-' : '.' );
+                }
+                buffer.append( item );
+            }
+            return buffer.toString();
+        }
+    }
+
+    public ComparableVersion( String version )
+    {
+        parseVersion( version );
+    }
+
+    @SuppressWarnings( "checkstyle:innerassignment" )
+    public final void parseVersion( String version )
+    {
+        this.value = version;
+
+        items = new ListItem();
+
+        version = version.toLowerCase( Locale.ENGLISH );
+
+        ListItem list = items;
+
+        Deque<Item> stack = new ArrayDeque<>();
+        stack.push( list );
+
+        boolean isDigit = false;
+
+        int startIndex = 0;
+
+        for ( int i = 0; i < version.length(); i++ )
+        {
+            char c = version.charAt( i );
+
+            if ( c == '.' )
+            {
+                if ( i == startIndex )
+                {
+                    list.add( IntItem.ZERO );
+                }
+                else
+                {
+                    list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+                }
+                startIndex = i + 1;
+            }
+            else if ( c == '-' )
+            {
+                if ( i == startIndex )
+                {
+                    list.add( IntItem.ZERO );
+                }
+                else
+                {
+                    list.add( parseItem( isDigit, version.substring( startIndex, i ) ) );
+                }
+                startIndex = i + 1;
+
+                list.add( list = new ListItem() );
+                stack.push( list );
+            }
+            else if ( Character.isDigit( c ) )
+            {
+                if ( !isDigit && i > startIndex )
+                {
+                    list.add( new StringItem( version.substring( startIndex, i ), true ) );
+                    startIndex = i;
+
+                    list.add( list = new ListItem() );
+                    stack.push( list );
+                }
+
+                isDigit = true;
+            }
+            else
+            {
+                if ( isDigit && i > startIndex )
+                {
+                    list.add( parseItem( true, version.substring( startIndex, i ) ) );
+                    startIndex = i;
+
+                    list.add( list = new ListItem() );
+                    stack.push( list );
+                }
+
+                isDigit = false;
+            }
+        }
+
+        if ( version.length() > startIndex )
+        {
+            list.add( parseItem( isDigit, version.substring( startIndex ) ) );
+        }
+
+        while ( !stack.isEmpty() )
+        {
+            list = (ListItem) stack.pop();
+            list.normalize();
+        }
+    }
+
+    private static Item parseItem( boolean isDigit, String buf )
+    {
+        if ( isDigit )
+        {
+            buf = stripLeadingZeroes( buf );
+            if ( buf.length() <= MAX_INTITEM_LENGTH )
+            {
+                // lower than 2^31
+                return new IntItem( buf );
+            }
+            else if ( buf.length() <= MAX_LONGITEM_LENGTH )
+            {
+                // lower than 2^63
+                return new LongItem( buf );
+            }
+            return new BigIntegerItem( buf );
+        }
+        return new StringItem( buf, false );
+    }
+
+    private static String stripLeadingZeroes( String buf )
+    {
+        if ( buf == null || buf.isEmpty() )
+        {
+            return "0";
+        }
+        for ( int i = 0; i < buf.length(); ++i )
+        {
+            char c = buf.charAt( i );
+            if ( c != '0' )
+            {
+                return buf.substring( i );
+            }
+        }
+        return buf;
+    }
+
+    @Override
+    public int compareTo( ComparableVersion o )
+    {
+        return items.compareTo( o.items );
+    }
+
+    @Override
+    public String toString()
+    {
+        return value;
+    }
+
+    public String getCanonical()
+    {
+        if ( canonical == null )
+        {
+            canonical = items.toString();
+        }
+        return canonical;
+    }
+
+    @Override
+    public boolean equals( Object o )
+    {
+        return ( o instanceof ComparableVersion ) && items.equals( ( (ComparableVersion) o ).items );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return items.hashCode();
+    }
+
+    // CHECKSTYLE_OFF: LineLength
+    /**
+     * Main to test version parsing and comparison.
+     * <p>
+     * To check how "1.2.7" compares to "1.2-SNAPSHOT", for example, you can issue
+     * <pre>java -jar ${maven.repo.local}/org/apache/maven/maven-artifact/${maven.version}/maven-artifact-${maven.version}.jar "1.2.7" "1.2-SNAPSHOT"</pre>
+     * command to command line. Result of given command will be something like this:
+     * <pre>
+     * Display parameters as parsed by Maven (in canonical form) and comparison result:
+     * 1. 1.2.7 == 1.2.7
+     *    1.2.7 &gt; 1.2-SNAPSHOT
+     * 2. 1.2-SNAPSHOT == 1.2-snapshot
+     * </pre>
+     *
+     * @param args the version strings to parse and compare. You can pass arbitrary number of version strings and always
+     * two adjacent will be compared
+     */
+    // CHECKSTYLE_ON: LineLength
+    public static void main( String... args )
+    {
+        System.out.println( "Display parameters as parsed by Maven (in canonical form) and comparison result:" );
+        if ( args.length == 0 )
+        {
+            return;
+        }
+
+        ComparableVersion prev = null;
+        int i = 1;
+        for ( String version : args )
+        {
+            ComparableVersion c = new ComparableVersion( version );
+
+            if ( prev != null )
+            {
+                int compare = prev.compareTo( c );
+                System.out.println( "   " + prev.toString() + ' '
+                    + ( ( compare == 0 ) ? "==" : ( ( compare < 0 ) ? "<" : ">" ) ) + ' ' + version );
+            }
+
+            System.out.println( ( i++ ) + ". " + version + " == " + c.getCanonical() );
+
+            prev = c;
+        }
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
new file mode 100644
index 0000000..75b19fa
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
@@ -0,0 +1,251 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.StringTokenizer;
+
+import static org.apache.commons.lang3.math.NumberUtils.isDigits;
+
+/**
+ * Default implementation of artifact versioning.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class DefaultArtifactVersion
+    implements ArtifactVersion
+{
+    private Integer majorVersion;
+
+    private Integer minorVersion;
+
+    private Integer incrementalVersion;
+
+    private Integer buildNumber;
+
+    private String qualifier;
+
+    private ComparableVersion comparable;
+
+    public DefaultArtifactVersion( String version )
+    {
+        parseVersion( version );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return 11 + comparable.hashCode();
+    }
+
+    @Override
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof ArtifactVersion ) )
+        {
+            return false;
+        }
+
+        return compareTo( (ArtifactVersion) other ) == 0;
+    }
+
+    public int compareTo( ArtifactVersion otherVersion )
+    {
+        if ( otherVersion instanceof DefaultArtifactVersion )
+        {
+            return this.comparable.compareTo( ( (DefaultArtifactVersion) otherVersion ).comparable );
+        }
+        else
+        {
+            return compareTo( new DefaultArtifactVersion( otherVersion.toString() ) );
+        }
+    }
+
+    public int getMajorVersion()
+    {
+        return majorVersion != null ? majorVersion : 0;
+    }
+
+    public int getMinorVersion()
+    {
+        return minorVersion != null ? minorVersion : 0;
+    }
+
+    public int getIncrementalVersion()
+    {
+        return incrementalVersion != null ? incrementalVersion : 0;
+    }
+
+    public int getBuildNumber()
+    {
+        return buildNumber != null ? buildNumber : 0;
+    }
+
+    public String getQualifier()
+    {
+        return qualifier;
+    }
+
+    public final void parseVersion( String version )
+    {
+        comparable = new ComparableVersion( version );
+
+        int index = version.indexOf( '-' );
+
+        String part1;
+        String part2 = null;
+
+        if ( index < 0 )
+        {
+            part1 = version;
+        }
+        else
+        {
+            part1 = version.substring( 0, index );
+            part2 = version.substring( index + 1 );
+        }
+
+        if ( part2 != null )
+        {
+            if ( part2.length() == 1  || !part2.startsWith( "0" ) )
+            {
+                buildNumber = tryParseInt( part2 );
+                if ( buildNumber == null )
+                {
+                    qualifier = part2;
+                }
+            }
+            else
+            {
+                qualifier = part2;
+            }
+        }
+
+        if ( ( !part1.contains( "." ) ) && !part1.startsWith( "0" ) )
+        {
+            majorVersion = tryParseInt( part1 );
+            if ( majorVersion == null )
+            {
+                // qualifier is the whole version, including "-"
+                qualifier = version;
+                buildNumber = null;
+            }
+        }
+        else
+        {
+            boolean fallback = false;
+
+            StringTokenizer tok = new StringTokenizer( part1, "." );
+            if ( tok.hasMoreTokens() )
+            {
+                majorVersion = getNextIntegerToken( tok );
+                if ( majorVersion == null )
+                {
+                    fallback = true;
+                }
+            }
+            else
+            {
+                fallback = true;
+            }
+            if ( tok.hasMoreTokens() )
+            {
+                minorVersion = getNextIntegerToken( tok );
+                if ( minorVersion == null )
+                {
+                    fallback = true;
+                }
+            }
+            if ( tok.hasMoreTokens() )
+            {
+                incrementalVersion = getNextIntegerToken( tok );
+                if ( incrementalVersion == null )
+                {
+                    fallback = true;
+                }
+            }
+            if ( tok.hasMoreTokens() )
+            {
+                qualifier = tok.nextToken();
+                fallback = isDigits( qualifier );
+            }
+
+            // string tokenizer won't detect these and ignores them
+            if ( part1.contains( ".." ) || part1.startsWith( "." ) || part1.endsWith( "." ) )
+            {
+                fallback = true;
+            }
+
+            if ( fallback )
+            {
+                // qualifier is the whole version, including "-"
+                qualifier = version;
+                majorVersion = null;
+                minorVersion = null;
+                incrementalVersion = null;
+                buildNumber = null;
+            }
+        }
+    }
+
+    private static Integer getNextIntegerToken( StringTokenizer tok )
+    {
+        String s = tok.nextToken();
+        if ( ( s.length() > 1 ) && s.startsWith( "0" ) )
+        {
+            return null;
+        }
+        return tryParseInt( s );
+    }
+
+    private static Integer tryParseInt( String s )
+    {
+        // for performance, check digits instead of relying later on catching NumberFormatException
+        if ( !isDigits( s ) )
+        {
+            return null;
+        }
+
+        try
+        {
+            long longValue = Long.parseLong( s );
+            if ( longValue > Integer.MAX_VALUE )
+            {
+                return null;
+            }
+            return (int) longValue;
+        }
+        catch ( NumberFormatException e )
+        {
+            // should never happen since checked isDigits(s) before 
+            return null;
+        }
+    }
+
+    @Override
+    public String toString()
+    {
+        return comparable.toString();
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java
new file mode 100644
index 0000000..adc48b9
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/InvalidVersionSpecificationException.java
@@ -0,0 +1,34 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * 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.
+ */
+
+/**
+ * Occurs when a version is invalid.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class InvalidVersionSpecificationException
+    extends Exception
+{
+    public InvalidVersionSpecificationException( String message )
+    {
+        super( message );
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
new file mode 100644
index 0000000..bd8f383
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/OverConstrainedVersionException.java
@@ -0,0 +1,49 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.resolver.ArtifactResolutionException;
+
+/**
+ * Occurs when ranges exclude each other and no valid value remains.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class OverConstrainedVersionException
+    extends ArtifactResolutionException
+{
+    public OverConstrainedVersionException( String msg,
+                                            Artifact artifact )
+    {
+        super( msg, artifact );
+    }
+
+    public OverConstrainedVersionException( String msg,
+                                            Artifact artifact,
+                                            List<ArtifactRepository> remoteRepositories )
+    {
+        super( msg, artifact, remoteRepositories );
+    }
+
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
new file mode 100644
index 0000000..c728e9f
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
@@ -0,0 +1,195 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * 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.
+ */
+
+/**
+ * Describes a restriction in versioning.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class Restriction
+{
+    private final ArtifactVersion lowerBound;
+
+    private final boolean lowerBoundInclusive;
+
+    private final ArtifactVersion upperBound;
+
+    private final boolean upperBoundInclusive;
+
+    public static final Restriction EVERYTHING = new Restriction( null, false, null, false );
+
+    public Restriction( ArtifactVersion lowerBound, boolean lowerBoundInclusive, ArtifactVersion upperBound,
+                        boolean upperBoundInclusive )
+    {
+        this.lowerBound = lowerBound;
+        this.lowerBoundInclusive = lowerBoundInclusive;
+        this.upperBound = upperBound;
+        this.upperBoundInclusive = upperBoundInclusive;
+    }
+
+    public ArtifactVersion getLowerBound()
+    {
+        return lowerBound;
+    }
+
+    public boolean isLowerBoundInclusive()
+    {
+        return lowerBoundInclusive;
+    }
+
+    public ArtifactVersion getUpperBound()
+    {
+        return upperBound;
+    }
+
+    public boolean isUpperBoundInclusive()
+    {
+        return upperBoundInclusive;
+    }
+
+    public boolean containsVersion( ArtifactVersion version )
+    {
+        if ( lowerBound != null )
+        {
+            int comparison = lowerBound.compareTo( version );
+
+            if ( ( comparison == 0 ) && !lowerBoundInclusive )
+            {
+                return false;
+            }
+            if ( comparison > 0 )
+            {
+                return false;
+            }
+        }
+        if ( upperBound != null )
+        {
+            int comparison = upperBound.compareTo( version );
+
+            if ( ( comparison == 0 ) && !upperBoundInclusive )
+            {
+                return false;
+            }
+            if ( comparison < 0 )
+            {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = 13;
+
+        if ( lowerBound == null )
+        {
+            result += 1;
+        }
+        else
+        {
+            result += lowerBound.hashCode();
+        }
+
+        result *= lowerBoundInclusive ? 1 : 2;
+
+        if ( upperBound == null )
+        {
+            result -= 3;
+        }
+        else
+        {
+            result -= upperBound.hashCode();
+        }
+
+        result *= upperBoundInclusive ? 2 : 3;
+
+        return result;
+    }
+
+    @Override
+    public boolean equals( Object other )
+    {
+        if ( this == other )
+        {
+            return true;
+        }
+
+        if ( !( other instanceof Restriction ) )
+        {
+            return false;
+        }
+
+        Restriction restriction = (Restriction) other;
+        if ( lowerBound != null )
+        {
+            if ( !lowerBound.equals( restriction.lowerBound ) )
+            {
+                return false;
+            }
+        }
+        else if ( restriction.lowerBound != null )
+        {
+            return false;
+        }
+
+        if ( lowerBoundInclusive != restriction.lowerBoundInclusive )
+        {
+            return false;
+        }
+
+        if ( upperBound != null )
+        {
+            if ( !upperBound.equals( restriction.upperBound ) )
+            {
+                return false;
+            }
+        }
+        else if ( restriction.upperBound != null )
+        {
+            return false;
+        }
+
+        return upperBoundInclusive == restriction.upperBoundInclusive;
+
+    }
+
+    public String toString()
+    {
+        StringBuilder buf = new StringBuilder();
+
+        buf.append( isLowerBoundInclusive() ? '[' : '(' );
+        if ( getLowerBound() != null )
+        {
+            buf.append( getLowerBound().toString() );
+        }
+        buf.append( ',' );
+        if ( getUpperBound() != null )
+        {
+            buf.append( getUpperBound().toString() );
+        }
+        buf.append( isUpperBoundInclusive() ? ']' : ')' );
+
+        return buf.toString();
+    }
+}
diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
new file mode 100644
index 0000000..d2409dd
--- /dev/null
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
@@ -0,0 +1,607 @@
+package org.apache.maven.artifact.versioning;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.Objects;
+
+import org.apache.maven.artifact.Artifact;
+
+/**
+ * Construct a version range from a specification.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class VersionRange
+{
+    private static final Map<String, VersionRange> CACHE_SPEC =
+        Collections.synchronizedMap( new WeakHashMap<>() );
+
+    private static final Map<String, VersionRange> CACHE_VERSION =
+                    Collections.synchronizedMap( new WeakHashMap<>() );
+
+    private final ArtifactVersion recommendedVersion;
+
+    private final List<Restriction> restrictions;
+
+    private VersionRange( ArtifactVersion recommendedVersion,
+                          List<Restriction> restrictions )
+    {
+        this.recommendedVersion = recommendedVersion;
+        this.restrictions = restrictions;
+    }
+
+    public ArtifactVersion getRecommendedVersion()
+    {
+        return recommendedVersion;
+    }
+
+    public List<Restriction> getRestrictions()
+    {
+        return restrictions;
+    }
+
+    /**
+     * @deprecated VersionRange is immutable, cloning is not useful and even more an issue against the cache 
+     * @return a clone
+     */
+    @Deprecated
+    public VersionRange cloneOf()
+    {
+        List<Restriction> copiedRestrictions = null;
+
+        if ( restrictions != null )
+        {
+            copiedRestrictions = new ArrayList<>();
+
+            if ( !restrictions.isEmpty() )
+            {
+                copiedRestrictions.addAll( restrictions );
+            }
+        }
+
+        return new VersionRange( recommendedVersion, copiedRestrictions );
+    }
+
+    /**
+     * <p>
+     * Create a version range from a string representation
+     * </p>
+     * Some spec examples are:
+     * <ul>
+     * <li><code>1.0</code> Version 1.0</li>
+     * <li><code>[1.0,2.0)</code> Versions 1.0 (included) to 2.0 (not included)</li>
+     * <li><code>[1.0,2.0]</code> Versions 1.0 to 2.0 (both included)</li>
+     * <li><code>[1.5,)</code> Versions 1.5 and higher</li>
+     * <li><code>(,1.0],[1.2,)</code> Versions up to 1.0 (included) and 1.2 or higher</li>
+     * </ul>
+     *
+     * @param spec string representation of a version or version range
+     * @return a new {@link VersionRange} object that represents the spec
+     * @throws InvalidVersionSpecificationException
+     *
+     */
+    public static VersionRange createFromVersionSpec( String spec )
+        throws InvalidVersionSpecificationException
+    {
+        if ( spec == null )
+        {
+            return null;
+        }
+
+        VersionRange cached = CACHE_SPEC.get( spec );
+        if ( cached != null )
+        {
+            return cached;
+        }
+
+        List<Restriction> restrictions = new ArrayList<>();
+        String process = spec;
+        ArtifactVersion version = null;
+        ArtifactVersion upperBound = null;
+        ArtifactVersion lowerBound = null;
+
+        while ( process.startsWith( "[" ) || process.startsWith( "(" ) )
+        {
+            int index1 = process.indexOf( ')' );
+            int index2 = process.indexOf( ']' );
+
+            int index = index2;
+            if ( index2 < 0 || index1 < index2 )
+            {
+                if ( index1 >= 0 )
+                {
+                    index = index1;
+                }
+            }
+
+            if ( index < 0 )
+            {
+                throw new InvalidVersionSpecificationException( "Unbounded range: " + spec );
+            }
+
+            Restriction restriction = parseRestriction( process.substring( 0, index + 1 ) );
+            if ( lowerBound == null )
+            {
+                lowerBound = restriction.getLowerBound();
+            }
+            if ( upperBound != null )
+            {
+                if ( restriction.getLowerBound() == null || restriction.getLowerBound().compareTo( upperBound ) < 0 )
+                {
+                    throw new InvalidVersionSpecificationException( "Ranges overlap: " + spec );
+                }
+            }
+            restrictions.add( restriction );
+            upperBound = restriction.getUpperBound();
+
+            process = process.substring( index + 1 ).trim();
+
+            if ( process.length() > 0 && process.startsWith( "," ) )
+            {
+                process = process.substring( 1 ).trim();
+            }
+        }
+
+        if ( process.length() > 0 )
+        {
+            if ( restrictions.size() > 0 )
+            {
+                throw new InvalidVersionSpecificationException(
+                    "Only fully-qualified sets allowed in multiple set scenario: " + spec );
+            }
+            else
+            {
+                version = new DefaultArtifactVersion( process );
+                restrictions.add( Restriction.EVERYTHING );
+            }
+        }
+
+        cached = new VersionRange( version, restrictions );
+        CACHE_SPEC.put( spec, cached );
+        return cached;
+    }
+
+    private static Restriction parseRestriction( String spec )
+        throws InvalidVersionSpecificationException
+    {
+        boolean lowerBoundInclusive = spec.startsWith( "[" );
+        boolean upperBoundInclusive = spec.endsWith( "]" );
+
+        String process = spec.substring( 1, spec.length() - 1 ).trim();
+
+        Restriction restriction;
+
+        int index = process.indexOf( ',' );
+
+        if ( index < 0 )
+        {
+            if ( !lowerBoundInclusive || !upperBoundInclusive )
+            {
+                throw new InvalidVersionSpecificationException( "Single version must be surrounded by []: " + spec );
+            }
+
+            ArtifactVersion version = new DefaultArtifactVersion( process );
+
+            restriction = new Restriction( version, lowerBoundInclusive, version, upperBoundInclusive );
+        }
+        else
+        {
+            String lowerBound = process.substring( 0, index ).trim();
+            String upperBound = process.substring( index + 1 ).trim();
+            if ( lowerBound.equals( upperBound ) )
+            {
+                throw new InvalidVersionSpecificationException( "Range cannot have identical boundaries: " + spec );
+            }
+
+            ArtifactVersion lowerVersion = null;
+            if ( lowerBound.length() > 0 )
+            {
+                lowerVersion = new DefaultArtifactVersion( lowerBound );
+            }
+            ArtifactVersion upperVersion = null;
+            if ( upperBound.length() > 0 )
+            {
+                upperVersion = new DefaultArtifactVersion( upperBound );
+            }
+
+            if ( upperVersion != null && lowerVersion != null && upperVersion.compareTo( lowerVersion ) < 0 )
+            {
+                throw new InvalidVersionSpecificationException( "Range defies version ordering: " + spec );
+            }
+
+            restriction = new Restriction( lowerVersion, lowerBoundInclusive, upperVersion, upperBoundInclusive );
+        }
+
+        return restriction;
+    }
+
+    public static VersionRange createFromVersion( String version )
+    {
+        VersionRange cached = CACHE_VERSION.get( version );
+        if ( cached == null )
+        {
+            List<Restriction> restrictions = Collections.emptyList();
+            cached = new VersionRange( new DefaultArtifactVersion( version ), restrictions );
+            CACHE_VERSION.put( version, cached );
+        }
+        return cached;
+    }
+
+    /**
+     * Creates and returns a new <code>VersionRange</code> that is a restriction of this
+     * version range and the specified version range.
+     * <p>
+     * Note: Precedence is given to the recommended version from this version range over the
+     * recommended version from the specified version range.
+     * </p>
+     *
+     * @param restriction the <code>VersionRange</code> that will be used to restrict this version
+     *                    range.
+     * @return the <code>VersionRange</code> that is a restriction of this version range and the
+     *         specified version range.
+     *         <p>
+     *         The restrictions of the returned version range will be an intersection of the restrictions
+     *         of this version range and the specified version range if both version ranges have
+     *         restrictions. Otherwise, the restrictions on the returned range will be empty.
+     *         </p>
+     *         <p>
+     *         The recommended version of the returned version range will be the recommended version of
+     *         this version range, provided that ranges falls within the intersected restrictions. If
+     *         the restrictions are empty, this version range's recommended version is used if it is not
+     *         <code>null</code>. If it is <code>null</code>, the specified version range's recommended
+     *         version is used (provided it is non-<code>null</code>). If no recommended version can be
+     *         obtained, the returned version range's recommended version is set to <code>null</code>.
+     *         </p>
+     * @throws NullPointerException if the specified <code>VersionRange</code> is
+     *                              <code>null</code>.
+     */
+    public VersionRange restrict( VersionRange restriction )
+    {
+        List<Restriction> r1 = this.restrictions;
+        List<Restriction> r2 = restriction.restrictions;
+        List<Restriction> restrictions;
+
+        if ( r1.isEmpty() || r2.isEmpty() )
+        {
+            restrictions = Collections.emptyList();
+        }
+        else
+        {
+            restrictions = Collections.unmodifiableList( intersection( r1, r2 ) );
+        }
+
+        ArtifactVersion version = null;
+        if ( restrictions.size() > 0 )
+        {
+            for ( Restriction r : restrictions )
+            {
+                if ( recommendedVersion != null && r.containsVersion( recommendedVersion ) )
+                {
... 190263 lines suppressed ...