[maven] 05/24: New upstream version 3.5.0

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Tue May 23 21:54:57 UTC 2017


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to branch maven-3.5
in repository maven.

commit 5cab7ac058ceb827286d81eca4dcb1080a0eef02
Author: Emmanuel Bourg <ebourg at apache.org>
Date:   Tue May 16 00:15:38 2017 +0200

    New upstream version 3.5.0
---
 Jenkinsfile                                        | 162 +++++++++++
 README.md                                          |  12 +-
 apache-maven/README.txt                            |  24 +-
 apache-maven/pom.xml                               | 136 +++++++--
 apache-maven/src/bin/m2.conf                       |   4 +-
 apache-maven/src/bin/mvn                           | 227 ++++++---------
 apache-maven/src/bin/mvn.cmd                       | 196 +++++++------
 apache-maven/src/bin/mvnDebug                      |  27 +-
 apache-maven/src/bin/mvnDebug.cmd                  |  16 +-
 apache-maven/src/bin/mvnyjp                        |  25 +-
 .../src/conf/logging/simplelogger.properties       |   8 +-
 apache-maven/src/conf/settings.xml                 |   2 +-
 apache-maven/src/conf/toolchains.xml               |   4 +-
 apache-maven/src/lib/jansi-native/README.txt       |   7 +
 .../main/appended-resources/META-INF/LICENSE.vm    |   2 -
 apache-maven/src/main/assembly/bin.xml             |  74 +----
 .../src/main/assembly/{bin.xml => component.xml}   |  22 +-
 .../src/main/assembly/dir.xml                      |  24 +-
 apache-maven/src/main/assembly/src.xml             |   3 +-
 build.xml                                          | 307 --------------------
 doap_Maven.rdf                                     |  17 ++
 maven-artifact/pom.xml                             |  29 +-
 .../java/org/apache/maven/artifact/Artifact.java   |   2 +-
 .../org/apache/maven/artifact/DefaultArtifact.java |  12 +-
 .../artifact/repository/ArtifactRepository.java    |   1 -
 .../repository/ArtifactRepositoryPolicy.java       |   2 +-
 .../AbstractArtifactResolutionException.java       |  10 +-
 .../resolver/CyclicDependencyException.java        |   2 +-
 .../MultipleArtifactsNotFoundException.java        |   3 +-
 .../artifact/versioning/ComparableVersion.java     |  12 +-
 .../versioning/DefaultArtifactVersion.java         |   4 +-
 .../maven/artifact/versioning/Restriction.java     |   6 +-
 .../maven/artifact/versioning/VersionRange.java    |  15 +-
 .../java/org/apache/maven/repository/Proxy.java    |   6 +-
 .../legacy/metadata/ArtifactMetadata.java          |   8 +-
 .../artifact/versioning/ComparableVersionTest.java |   2 +-
 .../artifact/versioning/VersionRangeTest.java      |   4 +-
 maven-builder-support/pom.xml                      |   2 +-
 .../org/apache/maven/building/DefaultProblem.java  |   2 +-
 maven-compat/pom.xml                               |  56 +++-
 .../apache/maven/artifact/ArtifactScopeEnum.java   |   4 +-
 .../artifact/UnknownRepositoryLayoutException.java |   2 +-
 .../artifact/installer/ArtifactInstaller.java      |   2 +-
 .../artifact/manager/DefaultWagonManager.java      |   2 +-
 .../maven/artifact/manager/WagonManager.java       |   2 +-
 .../repository/DefaultArtifactRepository.java      |   8 +-
 .../DefaultArtifactRepositoryFactory.java          |   4 +-
 .../repository/layout/FlatRepositoryLayout.java    |   6 +-
 .../metadata/DefaultRepositoryMetadataManager.java |  10 +-
 .../SnapshotArtifactRepositoryMetadata.java        |   2 +-
 .../maven/artifact/resolver/ArtifactResolver.java  |  62 ++--
 .../artifact/resolver/DebugResolutionListener.java |   6 +-
 .../artifact/resolver/DefaultArtifactResolver.java |  17 +-
 .../resolver/ResolutionListenerForDepMgmt.java     |   6 +-
 .../artifact/versioning/ManagedVersionMap.java     |   4 +-
 .../maven/profiles/DefaultProfileManager.java      |   2 +-
 .../profiles/activation/ProfileActivator.java      |   4 +-
 .../apache/maven/project/MavenProjectBuilder.java  |   5 +-
 .../java/org/apache/maven/project/ModelUtils.java  |  15 +-
 .../org/apache/maven/project/ProjectUtils.java     |  15 +-
 .../DefaultModelInheritanceAssembler.java          |  14 +-
 .../inheritance/ModelInheritanceAssembler.java     |   2 +-
 .../AbstractStringBasedModelInterpolator.java      |  34 ++-
 .../interpolation/ModelInterpolationException.java |   4 +-
 .../project/interpolation/ModelInterpolator.java   |   2 -
 .../interpolation/RegexBasedModelInterpolator.java |   2 +-
 .../StringSearchModelInterpolator.java             |  14 +-
 .../maven/project/path/DefaultPathTranslator.java  |  10 +-
 .../project/validation/ModelValidationResult.java  |   2 +-
 .../org/apache/maven/repository/MetadataGraph.java |   5 -
 .../repository/MetadataResolutionRequest.java      |  18 ++
 .../maven/repository/MetadataResolutionResult.java |  34 ++-
 .../legacy/DefaultUpdateCheckManager.java          |  61 ++--
 .../repository/legacy/DefaultWagonManager.java     |  97 ++++---
 .../repository/legacy/LegacyRepositorySystem.java  |  57 ++--
 .../maven/repository/legacy/WagonManager.java      |   6 +-
 .../repository/ArtifactRepositoryFactory.java      |   6 +-
 .../DefaultArtifactRepositoryFactory.java          |   2 +-
 .../resolver/DefaultLegacyArtifactCollector.java   | 102 ++++---
 .../legacy/resolver/LegacyArtifactCollector.java   |   9 +-
 .../conflict/DefaultConflictResolverFactory.java   |   2 +-
 .../resolver/conflict/NewestConflictResolver.java  |   2 +-
 .../resolver/conflict/OldestConflictResolver.java  |   2 +-
 .../transform/AbstractVersionTransformation.java   |   6 +-
 .../maven/repository/metadata/MetadataGraph.java   |  11 +-
 .../repository/metadata/MetadataGraphEdge.java     |   3 +-
 .../MetadataGraphTransformationException.java      |   4 +-
 .../repository/metadata/MetadataGraphVertex.java   |  10 +-
 .../metadata/MetadataResolutionResult.java         |   4 -
 .../usability/plugin/ExpressionDocumenter.java     |  18 +-
 maven-compat/src/main/mdo/profiles.mdo             |   4 +-
 .../src/site/apt/index.apt                         |  13 +-
 .../project/LegacyLocalRepositoryManager.java      |   2 +-
 .../org/apache/maven/project/ModelUtilsTest.java   |  18 +-
 .../AbstractProjectInheritanceTestCase.java        |   2 +-
 .../inheritance/t00/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t01/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t02/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t03/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t04/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t05/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t06/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t07/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t08/ProjectInheritanceTest.java    |   2 +-
 .../inheritance/t09/ProjectInheritanceTest.java    |  10 +-
 .../inheritance/t10/ProjectInheritanceTest.java    |   4 +-
 .../inheritance/t11/ProjectInheritanceTest.java    |   4 +-
 .../inheritance/t12scm/ProjectInheritanceTest.java |   2 +-
 .../repository/DefaultMirrorSelectorTest.java      |   2 +-
 .../repository/LegacyRepositorySystemTest.java     |   1 +
 .../repository/legacy/DefaultWagonManagerTest.java |   2 +-
 .../resolver/DefaultArtifactCollectorTest.java     |   4 +-
 .../conflict/FarthestConflictResolverTest.java     |   4 +-
 .../conflict/NearestConflictResolverTest.java      |   4 +-
 .../conflict/NewestConflictResolverTest.java       |   4 +-
 .../conflict/OldestConflictResolverTest.java       |   4 +-
 maven-core/lifecycle-executor.txt                  |   2 +-
 maven-core/plugin-manager.txt                      |   2 +-
 maven-core/pom.xml                                 |  52 ++--
 maven-core/project-builder.txt                     |   1 -
 .../maven/AbstractMavenLifecycleParticipant.java   |   4 +-
 .../apache/maven/DefaultArtifactFilterManager.java |   2 +-
 .../main/java/org/apache/maven/DefaultMaven.java   |  64 +++--
 .../src/main/java/org/apache/maven/Maven.java      |   3 +
 .../main/java/org/apache/maven/SessionScoped.java  |   4 +-
 .../DependencyResolutionRequiredException.java     |   2 +-
 .../repository/MavenArtifactRepository.java        |  20 +-
 .../metadata/AbstractRepositoryMetadata.java       |   6 +-
 .../repository/metadata/RepositoryMetadata.java    |   2 +-
 .../metadata/io/DefaultMetadataReader.java         |  19 +-
 .../resolver/ArtifactResolutionResult.java         |  27 +-
 .../maven/artifact/resolver/ResolutionNode.java    |   4 +-
 .../resolver/filter/ExcludesArtifactFilter.java    |   2 +-
 .../resolver/filter/IncludesArtifactFilter.java    |   2 +-
 .../DefaultBeanConfigurationRequest.java           |   6 +-
 .../java/org/apache/maven/eventspy/EventSpy.java   |   2 +-
 .../execution/DefaultMavenExecutionRequest.java    |   6 +-
 .../maven/execution/MavenExecutionRequest.java     |  26 +-
 .../org/apache/maven/execution/MavenSession.java   |   2 +
 .../apache/maven/execution/MojoExecutionEvent.java |   4 +-
 .../maven/execution/MojoExecutionListener.java     |   4 +-
 .../maven/execution/ProjectDependencyGraph.java    |  10 +
 .../maven/execution/ProjectExecutionEvent.java     |   4 +-
 .../maven/execution/ProjectExecutionListener.java  |   4 +-
 .../execution/scope/WeakMojoExecutionListener.java |   8 +-
 .../apache/maven/graph/DefaultGraphBuilder.java    | 109 +++----
 .../maven/graph/DefaultProjectDependencyGraph.java |  32 +++
 .../graph/FilteredProjectDependencyGraph.java      |   8 +
 .../java/org/apache/maven/graph/GraphBuilder.java  |   5 +
 .../DefaultRepositorySystemSessionFactory.java     |  14 +-
 .../maven/lifecycle/DefaultLifecycleExecutor.java  |   4 +-
 .../apache/maven/lifecycle/DefaultLifecycles.java  |   2 +-
 .../lifecycle/LifecycleExecutionException.java     |  28 +-
 .../apache/maven/lifecycle/MavenExecutionPlan.java |  12 +-
 .../maven/lifecycle/MojoExecutionConfigurator.java |   5 +-
 .../lifecycle/internal/BuildListCalculator.java    |   3 +-
 .../DefaultLifecycleExecutionPlanCalculator.java   |   8 +-
 .../internal/DefaultLifecycleMappingDelegate.java  |   4 +-
 .../internal/DefaultLifecyclePluginAnalyzer.java   |   8 +-
 .../DefaultLifecycleTaskSegmentCalculator.java     |   6 +-
 .../lifecycle/internal/DependencyContext.java      |   9 +-
 .../lifecycle/internal/ExecutionPlanItem.java      |   5 +-
 .../apache/maven/lifecycle/internal/GoalTask.java  |   5 +-
 .../lifecycle/internal/LifecycleDebugLogger.java   |   5 +-
 .../internal/LifecycleDependencyResolver.java      |   6 +-
 .../internal/LifecycleExecutionPlanCalculator.java |   1 -
 .../lifecycle/internal/LifecycleModuleBuilder.java |   7 +-
 .../internal/LifecyclePluginResolver.java          |  15 +-
 .../maven/lifecycle/internal/LifecycleTask.java    |   5 +-
 .../internal/LifecycleTaskSegmentCalculator.java   |   6 +-
 .../lifecycle/internal/MojoDescriptorCreator.java  |   9 +-
 .../maven/lifecycle/internal/MojoExecutor.java     |   5 +-
 .../maven/lifecycle/internal/PhaseRecorder.java    |   3 +-
 .../lifecycle/internal/ProjectArtifactFactory.java |   4 +-
 .../maven/lifecycle/internal/ProjectBuildList.java |   7 +-
 .../maven/lifecycle/internal/ProjectIndex.java     |   7 +-
 .../maven/lifecycle/internal/ProjectSegment.java   |  18 +-
 .../maven/lifecycle/internal/TaskSegment.java      |   6 +-
 .../maven/lifecycle/internal/builder/Builder.java  |   5 +-
 .../lifecycle/internal/builder/BuilderCommon.java  |   4 +-
 .../multithreaded/ConcurrencyDependencyGraph.java  |   5 +-
 .../multithreaded/MultiThreadedBuilder.java        |  47 ++--
 .../builder/multithreaded/ThreadOutputMuxer.java   |  12 +-
 .../apache/maven/lifecycle/mapping/Lifecycle.java  |  17 +-
 .../maven/lifecycle/mapping/LifecyclePhase.java    |   2 +-
 .../maven/plugin/DebugConfigurationListener.java   |   2 +-
 .../maven/plugin/DefaultBuildPluginManager.java    |   4 +-
 .../apache/maven/plugin/ExtensionRealmCache.java   |   4 +-
 .../org/apache/maven/plugin/MojoExecution.java     |   2 +-
 .../maven/plugin/PluginParameterException.java     |   6 +-
 .../plugin/PluginParameterExpressionEvaluator.java |  32 +--
 .../plugin/internal/DefaultMavenPluginManager.java |  12 +-
 .../maven/plugin/version/PluginVersionRequest.java |   2 +-
 .../internal/DefaultPluginVersionResolver.java     |   6 +-
 .../maven/project/DefaultProjectBuilder.java       | 132 +++++----
 .../project/DefaultProjectBuildingHelper.java      |   2 +-
 .../project/DefaultProjectBuildingRequest.java     |  22 +-
 .../project/DefaultProjectBuildingResult.java      |   4 +-
 .../DefaultProjectDependenciesResolver.java        |  93 +++---
 .../DuplicateArtifactAttachmentException.java      |   2 +-
 .../org/apache/maven/project/MavenProject.java     |  45 ++-
 .../apache/maven/project/MavenProjectHelper.java   |   2 +-
 .../maven/project/ProjectBuildingRequest.java      |  16 +-
 .../apache/maven/project/ProjectModelResolver.java |  85 ++++--
 .../org/apache/maven/project/ProjectSorter.java    |   2 +-
 .../maven/project/RepositorySessionDecorator.java  |   2 +-
 .../project/artifact/ActiveProjectArtifact.java    |   2 +-
 .../project/artifact/MavenMetadataSource.java      |  10 +-
 .../maven/project/artifact/ProjectArtifact.java    |   4 +-
 .../properties/internal/SystemProperties.java      |  32 ++-
 .../maven/repository/ArtifactTransferEvent.java    |  14 +-
 .../DelegatingLocalArtifactRepository.java         |   9 +
 .../legacy/metadata/AbstractArtifactMetadata.java  |   2 +-
 .../legacy/metadata/ArtifactMetadataSource.java    |   6 +-
 .../legacy/metadata/MetadataResolutionRequest.java |   2 +-
 .../settings/DefaultMavenSettingsBuilder.java      |   4 +-
 .../maven/toolchain/DefaultToolchainManager.java   |   2 +-
 .../apache/maven/toolchain/ToolchainManager.java   |   6 +-
 .../apache/maven/toolchain/ToolchainPrivate.java   |   2 +-
 .../toolchain/io/DefaultToolchainsReader.java      |  19 +-
 maven-core/src/main/mdo/toolchains.mdo             |   6 +-
 .../main/resources/META-INF/maven/extension.xml    |  23 +-
 .../META-INF/plexus/artifact-handlers.xml          |  25 --
 .../org/apache/maven/messages/messages.properties  |  34 ---
 .../apache/maven/messages/messages_de.properties   |  34 ---
 .../apache/maven/messages/messages_el.properties   |  33 ---
 .../apache/maven/messages/messages_en.properties   |  23 --
 .../apache/maven/messages/messages_es.properties   |  33 ---
 .../apache/maven/messages/messages_fr.properties   |  33 ---
 .../apache/maven/messages/messages_ja.properties   |  34 ---
 .../apache/maven/messages/messages_ko.properties   |  34 ---
 .../apache/maven/messages/messages_nl.properties   |  33 ---
 .../apache/maven/messages/messages_no.properties   |  33 ---
 .../apache/maven/messages/messages_pl.properties   |  33 ---
 .../maven/messages/messages_zh_CN.properties       |  34 ---
 maven-core/src/site/apt/artifact-handlers.apt      |   4 -
 .../src/site/apt/configuration-management.apt      |   8 +-
 .../src/site/apt/core-extensions.apt.vm            |  26 +-
 maven-core/src/site/apt/default-bindings.apt.vm    |   7 -
 maven-core/src/site/apt/index.apt                  |  23 +-
 maven-core/src/site/apt/offline-mode.apt           |   4 +-
 .../src/site/apt/plugin-execution-isolation.apt    |   4 +-
 .../apt/scripting-support/marmalade-support.apt    | 196 -------------
 .../design/2.1-lifecycle-refactor.graffle          |   2 +-
 maven-core/src/site/site.xml                       |   1 +
 .../maven/AbstractCoreMavenComponentTestCase.java  |   1 +
 .../graph/DefaultProjectDependencyGraphTest.java   |   8 +-
 .../lifecycle/LifecycleExecutorSubModulesTest.java |   2 +-
 .../maven/lifecycle/LifecycleExecutorTest.java     |   5 +
 .../LifecycleExecutionPlanCalculatorTest.java      |   2 +-
 .../lifecycle/internal/ProjectBuildListTest.java   |   2 +-
 .../lifecycle/internal/stub/AboutTheStubs.html     |   2 +-
 .../stub/LifecycleExecutionPlanCalculatorStub.java |  13 +-
 .../internal/stub/ProjectDependencyGraphStub.java  |  12 +-
 .../org/apache/maven/plugin/PluginManagerTest.java |   8 +-
 .../plugin/internal/DefaultLegacySupportTest.java  |   2 +-
 .../project/AbstractMavenProjectTestCase.java      |  11 +
 .../project/DefaultMavenProjectBuilderTest.java    | 132 ++++++++-
 .../maven/project/EmptyProjectBuildingHelper.java  |   2 +-
 .../project/LegacyLocalRepositoryManager.java      |   2 +-
 .../apache/maven/project/PomConstructionTest.java  |  52 ++--
 .../maven/project/ProjectModelResolverTest.java    | 246 ++++++++++++++++
 .../apache/maven/project/ProjectSorterTest.java    |  10 +-
 .../project/artifact/MavenMetadataSourceTest.java  |   2 +-
 .../maven/repository/TestRepositoryConnector.java  |  38 +++
 .../toolchain/merge/MavenToolchainMergerTest.java  |   4 +-
 .../org/apache/maven/lifecycle/test/AppTest.java   |   2 +-
 .../remote-repo/org/apache/apache/1/apache-1.pom   |  82 ++++++
 .../org/apache/apache/maven-metadata.xml           |  13 +
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../test/resources-project-builder/foo/sub/pom.xml |   4 -
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/sub/pom.xml   |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/sub/pom.xml |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/sub/pom.xml   |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/sub/pom.xml |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/sub/pom.xml   |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/sub/pom.xml |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/sub/pom.xml   |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/sub/pom.xml |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../{w-plugin-mngt => w-plugin-mgmt}/pom.xml       |   0
 .../{wo-plugin-mngt => wo-plugin-mgmt}/pom.xml     |   0
 .../plugin-inheritance-order/pom.xml               |   2 +-
 .../pom-inheritance/sub/pom.xml                    |   2 +-
 .../prerequisites-inheritance/child/pom.xml        |   2 +-
 .../repo-inheritance/pom.xml                       |   2 +-
 .../pom.xml                                        |   0
 .../pom.xml                                        |   0
 .../{dep-mngt => dep-mgmt}/pom.xml                 |   0
 .../xml-coalesce-text/pom.xml                      |   2 +-
 .../apache/maven/maven-parent/5/maven-parent-5.pom |   2 +-
 .../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 +
 maven-embedder/pom.xml                             |  41 ++-
 .../java/org/apache/maven/embedder/AppTest.java    |   2 +-
 .../main/java/org/apache/maven/cli/CLIManager.java |  10 +-
 .../org/apache/maven/cli/CLIReportingUtils.java    |  41 ++-
 .../java/org/apache/maven/cli/CleanArgument.java   |   2 +-
 .../main/java/org/apache/maven/cli/MavenCli.java   | 263 +++++++++++++----
 .../SettingsXmlConfigurationProcessor.java         |   4 +-
 .../maven/cli/event/ExecutionEventLogger.java      | 129 +++++----
 .../impl/UnsupportedSlf4jBindingConfiguration.java |   2 +-
 .../transfer/AbstractMavenTransferListener.java    | 209 ++++++++++++--
 .../cli/transfer/ConsoleMavenTransferListener.java | 112 +++++---
 .../cli/transfer/Slf4jMavenTransferListener.java   |  38 +--
 .../src/main/resources/META-INF/MANIFEST.MF        |   7 -
 .../META-INF/maven/slf4j-configuration.properties  |   3 +-
 maven-embedder/src/site/apt/index.apt.vm           |  12 +-
 maven-embedder/src/site/apt/logging.apt            |   8 +-
 .../src/test/java/org/apache/maven/AppTest.java    |   2 +-
 .../maven/test/error/mojoFailure/AppTest.java      |   2 +-
 .../child1/src/test/java/org/test/AppTest.java     |   2 +-
 .../src/main/java/org/plugin/TestPlugin.java       |   2 +-
 .../maven/test/error/mojoFailure/AppTest.java      |   2 +-
 .../maven/test/error/mojoFailure/AppTest.java      |   2 +-
 .../maven/cli/CLIManagerDocumentationTest.java     |   2 +-
 .../org/apache/maven/cli/CleanArgumentTest.java    |   2 +-
 .../java/org/apache/maven/cli/MavenCliTest.java    | 130 ++++++++-
 .../maven/cli/transfer/FileSizeFormatTest.java     | 313 +++++++++++++++++++++
 .../test/java/org/codehaus/m2eclipse/AppTest.java  |   2 +-
 .../mavenConfigProperties/.mvn/maven.config        |   3 +
 maven-model-builder/pom.xml                        |  31 +-
 .../maven/model/building/DefaultModelBuilder.java  | 117 +++++---
 .../building/DefaultModelBuildingRequest.java      |   5 +-
 .../maven/model/building/DefaultModelProblem.java  |   2 +-
 .../apache/maven/model/building/ModelBuilder.java  |   4 -
 .../model/building/ModelBuildingListener.java      |   2 +-
 .../maven/model/building/ModelBuildingRequest.java |   6 +-
 .../maven/model/building/ModelProblemUtils.java    |   2 +-
 .../org/apache/maven/model/building/Result.java    |  23 +-
 .../DefaultDependencyManagementImporter.java       |  12 +-
 .../inheritance/DefaultInheritanceAssembler.java   |  68 ++++-
 .../AbstractStringBasedModelInterpolator.java      |  20 ++
 .../model/interpolation/ModelInterpolator.java     |   2 -
 .../StringSearchModelInterpolator.java             |   2 +-
 .../apache/maven/model/io/DefaultModelReader.java  |  18 +-
 .../apache/maven/model/io/DefaultModelWriter.java  |  27 +-
 .../apache/maven/model/merge/MavenModelMerger.java |   6 +-
 .../model/plugin/DefaultReportingConverter.java    |  13 +-
 .../maven/model/plugin/ReportingConverter.java     |   5 +-
 .../maven/model/resolution/ModelResolver.java      |  32 +++
 .../model/validation/DefaultModelValidator.java    | 189 +++++++------
 maven-model-builder/src/main/mdo/profiles.mdo      |   4 +-
 maven-model-builder/src/site/apt/index.apt         |  33 ++-
 .../DefaultInheritanceAssemblerTest.java           |  43 ++-
 .../AbstractModelInterpolatorTest.java             |  18 +-
 .../validation/DefaultModelValidatorTest.java      |  73 ++++-
 .../module-path-not-artifactId-child.xml           |  40 ++-
 .../module-path-not-artifactId-expected.xml        |  58 ++++
 .../module-path-not-artifactId-parent.xml          |  51 ++--
 .../missing-artifactId-pluginManagement.xml        |  33 ++-
 .../raw-model/missing-ga-pluginManagement.xml      |  33 ++-
 .../raw-model/missing-groupId-pluginManagement.xml |  33 ++-
 .../missing-plugin-version-pluginManagement.xml    |  34 ++-
 maven-model/pom.xml                                |   2 +-
 .../apache/maven/model/io/xpp3/package-info.java   |   6 +-
 .../org/apache/maven/model/merge/ModelMerger.java  |   4 +-
 maven-model/src/main/mdo/maven.mdo                 |  52 ++--
 maven-model/src/site/xdoc/navigation.xml           |  35 ---
 maven-plugin-api/pom.xml                           |   2 +-
 .../java/org/apache/maven/plugin/AbstractMojo.java |  70 +++--
 .../org/apache/maven/plugin/ContextEnabled.java    |   3 +-
 .../main/java/org/apache/maven/plugin/Mojo.java    |  11 +-
 .../maven/plugin/MojoExecutionException.java       |   3 +-
 .../apache/maven/plugin/MojoFailureException.java  |   3 +-
 .../apache/maven/plugin/MojoNotFoundException.java |   2 +-
 .../maven/plugin/descriptor/MojoDescriptor.java    |  15 +-
 .../maven/plugin/descriptor/PluginDescriptor.java  |   4 +-
 .../plugin/descriptor/PluginDescriptorBuilder.java |   4 +-
 .../java/org/apache/maven/plugin/logging/Log.java  |  27 +-
 .../maven/plugin/logging/SystemStreamLog.java      |   2 +-
 maven-plugin-api/src/main/mdo/lifecycle.mdo        |   2 +-
 .../descriptor/PluginDescriptorBuilderTest.java    |   1 +
 maven-plugin-api/src/test/resources/plugin.xml     |   1 +
 maven-repository-metadata/pom.xml                  |   2 +-
 maven-repository-metadata/src/site/apt/index.apt   |   2 +-
 .../pom.xml                                        |  33 ++-
 .../internal/ArtifactDescriptorReaderDelegate.java |  14 +-
 .../internal/ArtifactDescriptorUtils.java          |   0
 .../internal/DefaultArtifactDescriptorReader.java  |  15 +-
 .../repository/internal/DefaultModelCache.java     |   0
 .../repository/internal/DefaultModelResolver.java  |  86 ++++--
 .../internal/DefaultVersionRangeResolver.java      |  18 +-
 .../internal/DefaultVersionResolver.java           |  42 ++-
 .../repository/internal/LocalSnapshotMetadata.java |   0
 .../internal/LocalSnapshotMetadataGenerator.java   |   0
 .../repository/internal/MavenAetherModule.java     |   4 +
 .../maven/repository/internal/MavenMetadata.java   |   0
 .../internal/MavenRepositorySystemUtils.java       |  14 +-
 .../repository/internal/MavenResolverModule.java   |  44 ++-
 .../repository/internal/MavenSnapshotMetadata.java |   0
 .../repository/internal/MavenWorkspaceReader.java  |   0
 .../repository/internal/RelocatedArtifact.java     |   0
 .../internal/RemoteSnapshotMetadata.java           |   0
 .../internal/RemoteSnapshotMetadataGenerator.java  |   0
 .../internal/SnapshotMetadataGeneratorFactory.java |   0
 .../repository/internal/VersionsMetadata.java      |   0
 .../internal/VersionsMetadataGenerator.java        |   0
 .../internal/VersionsMetadataGeneratorFactory.java |   0
 .../maven/repository/internal/package-info.java    |   6 +-
 .../src/site/apt/index.apt                         |   4 +-
 .../src/site/site.xml                              |   0
 .../internal/AbstractRepositoryTestCase.java       |   0
 .../DefaultArtifactDescriptorReaderTest.java       |   0
 .../internal/DefaultModelResolverTest.java         | 222 +++++++++++++++
 .../internal/DefaultVersionResolverTest.java       |   0
 .../internal/MavenRepositorySystemUtilsTest.java   |   0
 .../internal/RemoteSnapshotMetadataTest.java       |   0
 .../repository/internal/RepositorySystemTest.java  |   2 +-
 .../internal/util/ConsoleRepositoryListener.java   |   0
 .../internal/util/ConsoleTransferListener.java     |   0
 .../07.20.3-SNAPSHOT/maven-metadata.xml            |   0
 .../dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml  |   0
 .../artifact/1.0/artifact-1.0-classifier.zip       |   0
 .../repo/ut/simple/artifact/1.0/artifact-1.0.pom   |   0
 .../repo/ut/simple/artifact/1.0/artifact-1.0.zip   |   0
 .../repo/ut/simple/artifact/maven-metadata.xml     |   0
 .../ut/simple/dependency/1.0/dependency-1.0.pom    |   0
 .../repo/ut/simple/dependency/maven-metadata.xml   |   0
 .../repo/ut/simple/parent/1.0/parent-1.0.pom       |   0
 .../repo/ut/simple/parent/maven-metadata.xml       |   0
 maven-settings-builder/pom.xml                     |   2 +-
 .../building/DefaultSettingsBuildingRequest.java   |   7 +-
 .../settings/building/DefaultSettingsProblem.java  |   2 +-
 .../maven/settings/io/DefaultSettingsReader.java   |  19 +-
 .../maven/settings/io/DefaultSettingsWriter.java   |  27 +-
 maven-settings/pom.xml                             |   2 +-
 maven-settings/src/main/mdo/settings.mdo           |   8 +-
 maven-settings/src/site/apt/index.apt              |   2 +-
 maven-slf4j-provider/pom.xml                       | 116 ++++++++
 .../java/org/slf4j/impl/MavenSimpleLogger.java     | 115 ++++++++
 .../org/slf4j/impl/MavenSimpleLoggerFactory.java   |  30 +-
 .../src/main/script/patch-slf4j-simple.groovy      |  53 ++++
 .../src/site/site.xml                              |   0
 pom.xml                                            | 167 ++++++-----
 src/site/resources/images/maven-deps.png           | Bin 73105 -> 69010 bytes
 src/site/site.xml                                  |   8 +-
 src/site/xdoc/index.xml                            |  68 +++--
 src/site/xdoc/maven-deps.odg                       | Bin 0 -> 18600 bytes
 464 files changed, 5371 insertions(+), 3524 deletions(-)

diff --git a/Jenkinsfile b/Jenkinsfile
new file mode 100644
index 0000000..b6c7e19
--- /dev/null
+++ b/Jenkinsfile
@@ -0,0 +1,162 @@
+/*
+ * 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'?'10':'5'))])
+
+def tests
+def CORE_IT_PROFILES='run-its,embedded'
+
+try {
+
+node('ubuntu') {
+    dir('build') {
+        stage('Checkout') {
+            checkout scm
+        }
+
+        def WORK_DIR=pwd()
+
+        stage('Build / Unit Test') {
+            def MAVEN_BUILD=tool name: 'Maven 3.3.9', type: 'hudson.tasks.Maven$MavenInstallation'
+            echo "Driving build and unit tests using Maven $MAVEN_BUILD"
+            def JAVA7_HOME=tool name: 'JDK 1.7 (latest)', type: 'hudson.model.JDK'
+            echo "Running build and unit tests with Java $JAVA7_HOME"
+
+            withEnv(["PATH+MAVEN=$MAVEN_BUILD/bin","PATH+JDK=$JAVA7_HOME/bin"]) {
+                sh "mvn clean verify -B -U -e -fae -V -Dmaven.test.failure.ignore=true -Dmaven.repo.local=$WORK_DIR/.repository"
+            }
+
+            dir ('apache-maven/target') {
+                sh "mv apache-maven-*-bin.zip apache-maven-dist.zip"
+                stash includes: 'apache-maven-dist.zip', name: 'dist'
+            }
+            junit allowEmptyResults: true, testResults:'**/target/*-reports/*.xml'
+        }
+
+        tests = resolveScm source: [$class: 'GitSCMSource', credentialsId: '', excludes: '', gitTool: 'Default', id: '_', ignoreOnPushNotifications: false, includes: '*', remote: 'https://git-wip-us.apache.org/repos/asf/maven-integration-testing.git'], targets: [BRANCH_NAME, 'master']
+    }
+}
+
+stage 'Integration Test'
+parallel linuxJava7:{
+        node('ubuntu') {
+            def MAVEN_NIX_J7=tool name: 'Maven 3 (latest)', type: 'hudson.tasks.Maven$MavenInstallation'
+            echo "Driving integration tests using Maven $MAVEN_NIX_J7"
+            def JAVA_NIX_J7=tool name: 'JDK 1.7 (latest)', type: 'hudson.model.JDK'
+            echo "Running integration tests with Java $JAVA_NIX_J7"
+
+            dir('test') {
+                def WORK_DIR=pwd()
+                checkout tests
+                sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo"
+                unstash 'dist'
+                withEnv(["PATH+MAVEN=$MAVEN_NIX_J7/bin","PATH+JDK=$JAVA_NIX_J7/bin"]) {
+                    sh "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -Dmaven.repo.local=$WORK_DIR/it-local-repo -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
+                }
+                junit allowEmptyResults: true, testResults:'core-it-support/**/target/*-reports/*.xml,core-it-suite/target/*-reports/*.xml'
+                deleteDir() // clean up after ourselves to reduce disk space
+            }
+        }
+    },linuxJava8: {
+        node('ubuntu') {
+            def MAVEN_NIX_J8=tool name: 'Maven 3 (latest)', type: 'hudson.tasks.Maven$MavenInstallation'
+            echo "Driving integration tests using Maven $MAVEN_NIX_J8"
+            def JAVA_NIX_J8=tool name: 'JDK 1.8 (latest)', type: 'hudson.model.JDK'
+            echo "Running integration tests with Java $JAVA_NIX_J8"
+
+            dir('test') {
+                def WORK_DIR=pwd()
+                checkout tests
+                sh "rm -rvf $WORK_DIR/apache-maven-dist.zip $WORK_DIR/it-local-repo"
+                unstash 'dist'
+                withEnv(["PATH+MAVEN=$MAVEN_NIX_J8/bin","PATH+JDK=$JAVA_NIX_J8/bin"]) {
+                    sh "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -Dmaven.repo.local=$WORK_DIR/it-local-repo -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
+                }
+                junit allowEmptyResults: true, testResults:'core-it-support/**/target/*-reports/*.xml,core-it-suite/target/*-reports/*.xml'
+                deleteDir() // clean up after ourselves to reduce disk space
+            }
+        }
+    }, winJava7: {
+        node('Windows') {
+            def MAVEN_WIN_J7=tool name: 'Maven 3 (latest)', type: 'hudson.tasks.Maven$MavenInstallation'
+            dir(MAVEN_WIN_J7) {
+                MAVEN_WIN_J7=pwd()
+            }
+            echo "Driving integration tests using Maven $MAVEN_WIN_J7"
+            def JAVA_WIN_J7=tool name: 'JDK 1.7 (latest)', type: 'hudson.model.JDK'
+            dir(JAVA_WIN_J7) {
+                JAVA_WIN_J7=pwd()
+            }
+            echo "Running integration tests with Java $JAVA_WIN_J7"
+
+            // 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
+            dir("/mvn-it-${EXECUTOR_NUMBER}.tmp") {
+                def WORK_DIR=pwd()
+                checkout tests
+                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"
+                withEnv(["Path+MAVEN=$MAVEN_WIN_J7\\bin","Path+JDK=$JAVA_WIN_J7\\bin","JAVA_HOME=$JAVA_WIN_J7"]) {
+                    bat "set"
+                    unstash 'dist'
+                    bat "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -Dmaven.repo.local=$WORK_DIR/it-local-repo -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
+                }
+                junit allowEmptyResults: true, testResults:'core-it-support/**/target/*-reports/*.xml,core-it-suite/target/*-reports/*.xml'
+                deleteDir() // clean up after ourselves to reduce disk space
+            }
+        }
+    }, winJava8: {
+        node('Windows') {
+            def MAVEN_WIN_J8=tool name: 'Maven 3 (latest)', type: 'hudson.tasks.Maven$MavenInstallation'
+            dir(MAVEN_WIN_J8) {
+                MAVEN_WIN_J8=pwd()
+            }
+            echo "Driving integration tests using Maven $MAVEN_WIN_J8"
+            def JAVA_WIN_J8=tool name: 'JDK 1.8 (latest)', type: 'hudson.model.JDK'
+            dir(JAVA_WIN_J8) {
+                JAVA_WIN_J8=pwd()
+            }
+            echo "Running integration tests with Java $JAVA_WIN_J8"
+
+            // 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
+            dir("/mvn-it-${EXECUTOR_NUMBER}.tmp") {
+                def WORK_DIR=pwd()
+                checkout tests
+                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"
+                withEnv(["Path+MAVEN=$MAVEN_WIN_J8\\bin","Path+JDK=$JAVA_WIN_J8\\bin","JAVA_HOME=$JAVA_WIN_J8"]) {
+                    bat "set"
+                    unstash 'dist'
+                    bat "mvn clean install -P$CORE_IT_PROFILES -B -U -V -Dmaven.test.failure.ignore=true -Dmaven.repo.local=$WORK_DIR/it-local-repo -DmavenDistro=$WORK_DIR/apache-maven-dist.zip"
+                }
+                junit allowEmptyResults: true, testResults:'core-it-support/**/target/*-reports/*.xml,core-it-suite/target/*-reports/*.xml'
+                deleteDir() // clean up after ourselves to reduce disk space
+            }
+        }
+    }
+
+} finally {
+    node('ubuntu') {
+        emailext body: "See ${env.BUILD_URL}", recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'FailingTestSuspectsRecipientProvider'], [$class: 'FirstFailingBuildSuspectsRecipientProvider']], replyTo: 'dev at maven.apache.org', subject: "${env.JOB_NAME} - build ${env.BUILD_DISPLAY_NAME} - ${currentBuild.result}", to: 'notifications at maven.apache.org'
+    }
+}
+
diff --git a/README.md b/README.md
index a263dca..33a4be4 100644
--- a/README.md
+++ b/README.md
@@ -1,23 +1,23 @@
 # Maven
 
-Maven is available under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt)
+Maven is available under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt)
 
 - [Maven Issue Tracker](https://issues.apache.org/jira/browse/MNG)
 - [Maven Wiki](https://cwiki.apache.org/confluence/display/MAVEN/Index)
-- [Building Maven](http://maven.apache.org/guides/development/guide-building-maven.html)
-- [Running Core ITs](http://maven.apache.org/core-its/core-it-suite/)
+- [Building Maven](https://maven.apache.org/guides/development/guide-building-maven.html)
+- [Running Core ITs](https://maven.apache.org/core-its/core-it-suite/)
 
 ## Bootstrapping Basics
 
 If you want to bootstrap Maven, you'll need:
 
 - Java 1.7+
-- Ant 1.8 or later
+- Maven 3.0.5 or later
 
-Run Ant, specifying a location into which the completed Maven distro should be installed:
+Run Maven, specifying a location into which the completed Maven distro should be installed:
 
 ```
-ant -Dmaven.home="$HOME/apps/maven/apache-maven-3.3.x-SNAPSHOT"
+mvn -DdistributionTargetDir="$HOME/app/maven/apache-maven-3.5.x-SNAPSHOT" clean package
 ```
 
 Once the build completes, you should have a new Maven distro ready to roll in that directory!
diff --git a/apache-maven/README.txt b/apache-maven/README.txt
index b05080d..827fdb7 100644
--- a/apache-maven/README.txt
+++ b/apache-maven/README.txt
@@ -11,12 +11,12 @@
   Documentation
   -------------
 
-  The most up-to-date documentation can be found at http://maven.apache.org/.
+  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 http://maven.apache.org/release-notes.html.
+  The full list of changes can be found at https://maven.apache.org/docs/history.html.
 
   System Requirements
   -------------------
@@ -39,7 +39,7 @@
   Installing Maven
   ----------------
 
-  1) Unpack the archive where you would like to store the binaries, eg:
+  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
@@ -48,7 +48,7 @@
 
   2) A directory called "apache-maven-3.x.y" will be created.
 
-  3) Add the bin directory to your PATH, eg:
+  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
@@ -59,7 +59,7 @@
 
   5) Run "mvn --version" to verify that it is correctly installed.
 
-  For complete documentation, see http://maven.apache.org/download.html#Installation
+  For complete documentation, see https://maven.apache.org/download.html#Installation
 
   Licensing
   ---------
@@ -69,11 +69,11 @@
   Maven URLS
   ----------
 
-  Home Page:          http://maven.apache.org/
-  Downloads:          http://maven.apache.org/download.html
-  Release Notes:      http://maven.apache.org/release-notes.html
-  Mailing Lists:      http://maven.apache.org/mail-lists.html
-  Source Code:        https://git-wip-us.apache.org/repos/asf/maven.git/apache-maven
-  Issue Tracking:     http://jira.codehaus.org/browse/MNG
+  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/mail-lists.html
+  Source Code:        https://git-wip-us.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:  http://maven.apache.org/plugins/index.html
+  Available Plugins:  https://maven.apache.org/plugins/index.html
diff --git a/apache-maven/pom.xml b/apache-maven/pom.xml
index 3958883..8a72146 100644
--- a/apache-maven/pom.xml
+++ b/apache-maven/pom.xml
@@ -1,19 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -21,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>apache-maven</artifactId>
@@ -62,10 +66,6 @@
       <classifier>shaded</classifier>
       <exclusions>
         <exclusion>
-          <groupId>org.apache.maven.wagon</groupId>
-          <artifactId>wagon-http-shared4</artifactId>
-        </exclusion>
-        <exclusion>
           <groupId>org.apache.httpcomponents</groupId>
           <artifactId>httpclient</artifactId>
         </exclusion>
@@ -73,23 +73,37 @@
           <groupId>org.apache.httpcomponents</groupId>
           <artifactId>httpcore</artifactId>
         </exclusion>
+        <exclusion>
+          <groupId>org.apache.maven.wagon</groupId>
+          <artifactId>wagon-http-shared</artifactId>
+        </exclusion>
       </exclusions>
     </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.eclipse.aether</groupId>
-      <artifactId>aether-connector-basic</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-transport-wagon</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-wagon</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-slf4j-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.fusesource.jansi</groupId>
+      <artifactId>jansi</artifactId>
     </dependency>
   </dependencies>
 
@@ -116,6 +130,22 @@
     <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>
@@ -151,7 +181,7 @@
         <artifactId>maven-assembly-plugin</artifactId>
         <executions>
           <execution>
-            <id>create-distro</id>
+            <id>create-distro-packages</id>
             <phase>package</phase>
             <goals>
               <goal>single</goal>
@@ -182,6 +212,60 @@
 
   <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>
diff --git a/apache-maven/src/bin/m2.conf b/apache-maven/src/bin/m2.conf
index 2991e0b..2235f82 100644
--- a/apache-maven/src/bin/m2.conf
+++ b/apache-maven/src/bin/m2.conf
@@ -1,8 +1,8 @@
 main is org.apache.maven.cli.MavenCli from plexus.core
 
-set maven.home default ${user.home}/m2
+set maven.conf default ${maven.home}/conf
 
 [plexus.core]
+load       ${maven.conf}/logging
 optionally ${maven.home}/lib/ext/*.jar
 load       ${maven.home}/lib/*.jar
-load       ${maven.home}/conf/logging
diff --git a/apache-maven/src/bin/mvn b/apache-maven/src/bin/mvn
index 6875628..623b5f2 100755
--- a/apache-maven/src/bin/mvn
+++ b/apache-maven/src/bin/mvn
@@ -1,5 +1,5 @@
 #!/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
@@ -16,23 +16,16 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# ----------------------------------------------------------------------------
 
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
+# -----------------------------------------------------------------------------
+# Apache Maven Startup Script
 #
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
+# Environment Variable Prerequisites
 #
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
+#   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
 
@@ -46,184 +39,142 @@ if [ -z "$MAVEN_SKIP_RC" ] ; then
 
 fi
 
-# OS specific support.  $var _must_ be set to either true or false.
+# OS specific support. $var _must_ be set to either true or false.
 cygwin=false;
-darwin=false;
-mingw=false
+mingw=false;
 case "`uname`" in
-  CYGWIN*) cygwin=true ;;
+  CYGWIN*) cygwin=true;;
   MINGW*) mingw=true;;
-  Darwin*) darwin=true
-           #
-           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
-           # for the new JDKs provided by Oracle.
-           #
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
-             #
-             # Oracle JDKs
-             #
-             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
-           fi
-
-           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
-             #
-             # Apple JDKs
-             #
-             export JAVA_HOME=`/usr/libexec/java_home`
-           fi
-           ;;
 esac
 
-if [ -z "$JAVA_HOME" ] ; then
-  if [ -r /etc/gentoo-release ] ; then
-    JAVA_HOME=`java-config --jre-home`
-  fi
-fi
+## resolve links - $0 may be a link to Maven's home
+PRG="$0"
 
-if [ -z "$M2_HOME" ] ; then
-  ## 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
+# 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`
+saveddir=`pwd`
 
-  M2_HOME=`dirname "$PRG"`/..
+MAVEN_HOME=`dirname "$PRG"`/..
 
-  # make it fully qualified
-  M2_HOME=`cd "$M2_HOME" && pwd`
+# make it fully qualified
+MAVEN_HOME=`cd "$MAVEN_HOME" && pwd`
 
-  cd "$saveddir"
-  # echo Using m2 at $M2_HOME
-fi
+cd "$saveddir"
 
-# For Cygwin, ensure paths are in UNIX format before anything is touched
+# For Cygwin, ensure paths are in Unix format before anything is touched
 if $cygwin ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -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 Migwn, ensure paths are in UNIX format before anything is touched
+# For MinGW, ensure paths are in Unix format before anything is touched
 if $mingw ; then
-  [ -n "$M2_HOME" ] &&
-    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$MAVEN_HOME" ] &&
+    MAVEN_HOME=`(cd "$MAVEN_HOME"; pwd)`
   [ -n "$JAVA_HOME" ] &&
-    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+    JAVA_HOME=`(cd "$JAVA_HOME"; pwd)`
   # TODO classpath?
 fi
 
-if [ -z "$JAVA_HOME" ]; then
-  javaExecutable="`which javac`"
-  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
-    # readlink(1) is not available as standard on Solaris 10.
-    readLink=`which readlink`
-    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
-      if $darwin ; then
-        javaHome="`dirname \"$javaExecutable\"`"
-        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
-      else
-        javaExecutable="`readlink -f \"$javaExecutable\"`"
-      fi
-      javaHome="`dirname \"$javaExecutable\"`"
-      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
-      JAVA_HOME="$javaHome"
-      export JAVA_HOME
-    fi
-  fi
-fi
-
-if [ -z "$JAVACMD" ] ; then
-  if [ -n "$JAVA_HOME"  ] ; then
-    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
-      # IBM's JDK on AIX uses strange locations for the executables
-      JAVACMD="$JAVA_HOME/jre/sh/java"
-    else
-      JAVACMD="$JAVA_HOME/bin/java"
-    fi
-  else
-    JAVACMD="`which java`"
-  fi
+if [ -z "$JAVA_HOME" ] ; then
+  JAVACMD=`which java`
+else
+  JAVACMD="$JAVA_HOME/bin/java"
 fi
 
 if [ ! -x "$JAVACMD" ] ; then
-  echo "Error: JAVA_HOME is not defined correctly." >&2
-  echo "  We cannot execute $JAVACMD" >&2
+  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
 
-if [ -z "$JAVA_HOME" ] ; then
-  echo "Warning: JAVA_HOME environment variable is not set."
-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 "$M2_HOME" ] &&
-    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+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() {
-  local basedir
-  local wdir
-  basedir="$(pwd)"
-  wdir="$(pwd)"
+(
+  basedir=`find_file_argument_basedir "$@"`
+  wdir="${basedir}"
   while [ "$wdir" != '/' ] ; do
     if [ -d "$wdir"/.mvn ] ; then
       basedir=$wdir
       break
     fi
-    wdir="$(cd "$wdir/.."; pwd)"
+    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 [ -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 '\n' ' ' < "$1")"
+    echo "`tr -s '\n' ' ' < "$1"`"
   fi
 }
 
-MAVEN_PROJECTBASEDIR="${MAVEN_BASEDIR:-$(find_maven_basedir)}"
-MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+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
+# 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
@@ -238,7 +189,7 @@ export MAVEN_CMD_LINE_ARGS
 exec "$JAVACMD" \
   $MAVEN_OPTS \
   $MAVEN_DEBUG_OPTS \
-  -classpath "${M2_HOME}"/boot/plexus-classworlds-*.jar \
-  "-Dclassworlds.conf=${M2_HOME}/bin/m2.conf" \
-  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  -classpath "${CLASSWORLDS_JAR}" \
+  "-Dclassworlds.conf=${MAVEN_HOME}/bin/m2.conf" \
+  "-Dmaven.home=${MAVEN_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
   ${CLASSWORLDS_LAUNCHER} "$@"
diff --git a/apache-maven/src/bin/mvn.cmd b/apache-maven/src/bin/mvn.cmd
index d35c1d2..9d92279 100644
--- a/apache-maven/src/bin/mvn.cmd
+++ b/apache-maven/src/bin/mvn.cmd
@@ -1,4 +1,3 @@
- at REM ----------------------------------------------------------------------------
 @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
@@ -15,96 +14,65 @@
 @REM KIND, either express or implied.  See the License for the
 @REM specific language governing permissions and limitations
 @REM under the License.
- at REM ----------------------------------------------------------------------------
 
- at REM ----------------------------------------------------------------------------
- at REM Maven2 Start Up Batch script
+ at REM -----------------------------------------------------------------------------
+ at REM Apache Maven Startup Script
 @REM
- at REM Required ENV vars:
- at REM JAVA_HOME - location of a JDK home dir
+ at REM Environment Variable Prerequisites
 @REM
- at REM Optional ENV vars
- at REM M2_HOME - location of maven2's installed home dir
- at REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
- at REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
- at REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
- at REM     e.g. to debug Maven itself, use
- at REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
- at REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
- at REM ----------------------------------------------------------------------------
+ at REM   JAVA_HOME          Must point at your Java Development Kit installation.
+ at REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
+ at REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
+ at REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
+ at REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
+ at 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'
- at if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
-
- at REM set %HOME% to equivalent of $HOME
-if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+ at 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
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPre
 @REM check for pre script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
-if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+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
 
- at REM To isolate internal variables from possible post scripts, we use another setlocal
- at setlocal
-
 @REM ==== START VALIDATION ====
-if not "%JAVA_HOME%" == "" goto OkJHome
-
-echo.
-echo Error: JAVA_HOME not found in your environment. >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
+if not "%JAVA_HOME%"=="" goto OkJHome
+for %%i in (java.exe) do set "JAVACMD=%%~$PATH:i"
+goto checkJCmd
 
 :OkJHome
-if exist "%JAVA_HOME%\bin\java.exe" goto chkMHome
-
-echo.
-echo Error: JAVA_HOME is set to an invalid directory. >&2
-echo JAVA_HOME = "%JAVA_HOME%" >&2
-echo Please set the JAVA_HOME variable in your environment to match the >&2
-echo location of your Java installation. >&2
-echo.
-goto error
+set "JAVACMD=%JAVA_HOME%\bin\java.exe"
 
-:chkMHome
-if not "%M2_HOME%"=="" goto valMHome
+:checkJCmd
+if exist "%JAVACMD%" goto chkMHome
 
-SET "M2_HOME=%~dp0.."
-if not "%M2_HOME%"=="" goto valMHome
+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
 
-echo.
-echo Error: M2_HOME not found in your environment. >&2
-echo Please set the M2_HOME variable in your environment to match the >&2
-echo location of the Maven installation. >&2
-echo.
+:chkMHome
+set "MAVEN_HOME=%~dp0.."
+if not "%MAVEN_HOME%"=="" goto valMHome
 goto error
 
 :valMHome
 
 :stripMHome
-if not "_%M2_HOME:~-1%"=="_\" goto checkMCmd
-set "M2_HOME=%M2_HOME:~0,-1%"
+if not "_%MAVEN_HOME:~-1%"=="_\" goto checkMCmd
+set "MAVEN_HOME=%MAVEN_HOME:~0,-1%"
 goto stripMHome
 
 :checkMCmd
-if exist "%M2_HOME%\bin\mvn.cmd" goto init
-
-echo.
-echo Error: M2_HOME is set to an invalid directory. >&2
-echo M2_HOME = "%M2_HOME%" >&2
-echo Please set the M2_HOME variable in your environment to match the >&2
-echo location of the Maven installation >&2
-echo.
+if exist "%MAVEN_HOME%\bin\mvn.cmd" goto init
 goto error
 @REM ==== END VALIDATION ====
 
@@ -112,35 +80,86 @@ goto error
 
 set MAVEN_CMD_LINE_ARGS=%*
 
- at REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+ at 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 "MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%"
+if not "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set "EXEC_DIR=%CD%"
+set "WDIR=%EXEC_DIR%"
+
+ at REM Look for the --file switch and start the search for the .mvn directory from the specified
+ at 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
+)
+ at 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
+)
+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
 
-set EXEC_DIR=%CD%
-set WDIR=%EXEC_DIR%
 :findBaseDir
-IF EXIST "%WDIR%\.mvn" goto baseDirFound
+cd /d "%WDIR%"
+:findBaseDirLoop
+if exist "%WDIR%\.mvn" goto baseDirFound
 cd ..
 IF "%WDIR%"=="%CD%" goto baseDirNotFound
-set WDIR=%CD%
-goto findBaseDir
+set "WDIR=%CD%"
+goto findBaseDirLoop
 
 :baseDirFound
-set MAVEN_PROJECTBASEDIR=%WDIR%
-cd "%EXEC_DIR%"
+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%
+if "_%EXEC_DIR:~-1%"=="_\" set "EXEC_DIR=%EXEC_DIR:~0,-1%"
+set "MAVEN_PROJECTBASEDIR=%EXEC_DIR%"
 cd "%EXEC_DIR%"
 
 :endDetectBaseDir
 
-IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+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
@@ -148,13 +167,18 @@ for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do s
 
 :endReadAdditionalConfig
 
-SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
-
-for %%i in ("%M2_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i"
-
+for %%i in ("%MAVEN_HOME%"\boot\plexus-classworlds-*) do set CLASSWORLDS_JAR="%%i"
 set CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
 
-%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
+"%JAVACMD%" ^
+  %JVM_CONFIG_MAVEN_PROPS% ^
+  %MAVEN_OPTS% ^
+  %MAVEN_DEBUG_OPTS% ^
+  -classpath %CLASSWORLDS_JAR% ^
+  "-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" ^
+  "-Dmaven.home=%MAVEN_HOME%" ^
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+  %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
 if ERRORLEVEL 1 goto error
 goto end
 
@@ -164,15 +188,15 @@ set ERROR_CODE=1
 :end
 @endlocal & set ERROR_CODE=%ERROR_CODE%
 
-if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
 @REM check for post script, once with legacy .bat ending and once with .cmd ending
-if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
-if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+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_BATCH_PAUSE%"=="on" pause
 
-if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
 
-exit /B %ERROR_CODE%
+cmd /C exit /B %ERROR_CODE%
diff --git a/apache-maven/src/bin/mvnDebug b/apache-maven/src/bin/mvnDebug
index a1077ce..be495ff 100755
--- a/apache-maven/src/bin/mvnDebug
+++ b/apache-maven/src/bin/mvnDebug
@@ -1,5 +1,5 @@
 #!/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
@@ -16,26 +16,19 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# ----------------------------------------------------------------------------
 
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
+# -----------------------------------------------------------------------------
+# Apache Maven Debug Script
 #
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
+# Environment Variable Prerequisites
 #
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
+#   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
+echo Preparing to execute Maven in debug mode
 
-env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" $(dirname $0)/mvn "$@"
+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
index 1f0d3bf..5f9a20a 100644
--- a/apache-maven/src/bin/mvnDebug.cmd
+++ b/apache-maven/src/bin/mvnDebug.cmd
@@ -1,4 +1,3 @@
- at REM ----------------------------------------------------------------------------
 @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
@@ -15,15 +14,18 @@
 @REM KIND, either express or implied.  See the License for the
 @REM specific language governing permissions and limitations
 @REM under the License.
- at REM ----------------------------------------------------------------------------
 
- at REM ----------------------------------------------------------------------------
- at REM Maven2 Start Up Batch script to run mvn.cmd with the following additional
- at REM Java VM settings:
+ at REM -----------------------------------------------------------------------------
+ at REM Apache Maven Debug Script
 @REM
- at REM     -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+ at REM Environment Variable Prerequisites
 @REM
- at REM ----------------------------------------------------------------------------
+ at REM   JAVA_HOME          Must point at your Java Development Kit installation.
+ at REM   MAVEN_BATCH_ECHO  (Optional) Set to 'on' to enable the echoing of the batch commands.
+ at REM   MAVEN_BATCH_PAUSE (Optional) set to 'on' to wait for a key stroke before ending.
+ at REM   MAVEN_OPTS        (Optional) Java runtime options used when Maven is executed.
+ at REM   MAVEN_SKIP_RC     (Optional) Flag to disable loading of mavenrc files.
+ at REM -----------------------------------------------------------------------------
 
 @setlocal
 @set MAVEN_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
diff --git a/apache-maven/src/bin/mvnyjp b/apache-maven/src/bin/mvnyjp
index ef4f8e1..a35eabf 100755
--- a/apache-maven/src/bin/mvnyjp
+++ b/apache-maven/src/bin/mvnyjp
@@ -1,5 +1,5 @@
 #!/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
@@ -16,27 +16,20 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# ----------------------------------------------------------------------------
 
-# ----------------------------------------------------------------------------
-# Maven2 Start Up Batch script
+# -----------------------------------------------------------------------------
+# Apache Maven YourKit Profiler Startup Script
 #
-# Required ENV vars:
-# ------------------
-#   JAVA_HOME - location of a JDK home dir
+# Environment Variable Prerequisites
 #
-# Optional ENV vars
-# -----------------
-#   M2_HOME - location of maven2's installed home dir
-#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
-#     e.g. to debug Maven itself, use
-#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
-#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
-# ----------------------------------------------------------------------------
+#   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 "$@"
+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
index 859ff72..eb3d049 100644
--- a/apache-maven/src/conf/logging/simplelogger.properties
+++ b/apache-maven/src/conf/logging/simplelogger.properties
@@ -22,4 +22,10 @@ org.slf4j.simpleLogger.showLogName=false
 org.slf4j.simpleLogger.logFile=System.out
 org.slf4j.simpleLogger.levelInBrackets=true
 org.slf4j.simpleLogger.log.Sisu=info
-org.slf4j.simpleLogger.warnLevelString=WARNING
\ No newline at end of file
+org.slf4j.simpleLogger.warnLevelString=WARNING
+
+# MNG-6181: mvn -X also prints all debug logging from http-client
+# 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
\ No newline at end of file
diff --git a/apache-maven/src/conf/settings.xml b/apache-maven/src/conf/settings.xml
index 19d7a97..e27c579 100644
--- a/apache-maven/src/conf/settings.xml
+++ b/apache-maven/src/conf/settings.xml
@@ -32,7 +32,7 @@ under the License.
  |  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.home}/conf/settings.xml.
+ |                 ${maven.conf}/settings.xml.
  |
  |                 NOTE: This location can be overridden with the CLI option:
  |
diff --git a/apache-maven/src/conf/toolchains.xml b/apache-maven/src/conf/toolchains.xml
index aefddd8..b263072 100644
--- a/apache-maven/src/conf/toolchains.xml
+++ b/apache-maven/src/conf/toolchains.xml
@@ -32,7 +32,7 @@ under the License.
  |  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.home}/conf/toolchains.xml.
+ |                 ${maven.conf}/toolchains.xml.
  |
  |                 NOTE: This location can be overridden with the CLI option:
  |
@@ -63,7 +63,7 @@ under the License.
    |   Look for documentation of the toolchains-aware plugin which configuration elements
    |   can be used.   
    |
-   | See also http://maven.apache.org/guides/mini/guide-using-toolchains.html
+   | See also https://maven.apache.org/guides/mini/guide-using-toolchains.html
    |
    | General example
 
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
index 1a46225..390fa42 100644
--- a/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
+++ b/apache-maven/src/main/appended-resources/META-INF/LICENSE.vm
@@ -16,8 +16,6 @@
 ## specific language governing permissions and limitations
 ## under the License.
 ##
-## $Date: 2008-03-09 23:17:06 -0700 (Sun, 09 Mar 2008) $ $Rev: 635446 $
-##
 
 Apache Maven includes a number of components and libraries with separate 
 copyright notices and license terms. Your use of those components are 
diff --git a/apache-maven/src/main/assembly/bin.xml b/apache-maven/src/main/assembly/bin.xml
index ea14a9d..79723c2 100644
--- a/apache-maven/src/main/assembly/bin.xml
+++ b/apache-maven/src/main/assembly/bin.xml
@@ -17,78 +17,14 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<assembly>
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
   <id>bin</id>
   <formats>
     <format>zip</format>
     <format>tar.gz</format>
   </formats>
-  <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>
-      </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>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>m2</include>
-        <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>
+  <componentDescriptors>
+    <componentDescriptor>src/main/assembly/component.xml</componentDescriptor>
+  </componentDescriptors>
 </assembly>
diff --git a/apache-maven/src/main/assembly/bin.xml b/apache-maven/src/main/assembly/component.xml
similarity index 81%
copy from apache-maven/src/main/assembly/bin.xml
copy to apache-maven/src/main/assembly/component.xml
index ea14a9d..7b05af7 100644
--- a/apache-maven/src/main/assembly/bin.xml
+++ b/apache-maven/src/main/assembly/component.xml
@@ -16,13 +16,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-
-<assembly>
-  <id>bin</id>
-  <formats>
-    <format>zip</format>
-    <format>tar.gz</format>
-  </formats>
+<component xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/component/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/component/1.1.3 http://maven.apache.org/xsd/component-1.1.3.xsd">
   <dependencySets>
     <dependencySet>
       <useProjectArtifact>false</useProjectArtifact>
@@ -47,7 +42,7 @@ under the License.
     </fileSet>
     <fileSet>
       <directory>target/maven-shared-archive-resources/META-INF</directory>
-      <outputDirectory>/</outputDirectory>
+      <outputDirectory>./</outputDirectory>
       <includes>
         <include>LICENSE</include>
         <include>NOTICE</include>
@@ -61,6 +56,14 @@ under the License.
       </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>
@@ -73,7 +76,6 @@ under the License.
       <directory>src/bin</directory>
       <outputDirectory>bin</outputDirectory>
       <includes>
-        <include>m2</include>
         <include>mvn</include>
         <include>mvnDebug</include>
         <!-- This is so that CI systems can periodically run the profiler -->
@@ -91,4 +93,4 @@ under the License.
       <outputDirectory>lib</outputDirectory>
     </fileSet>
   </fileSets>
-</assembly>
+</component>
diff --git a/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml b/apache-maven/src/main/assembly/dir.xml
similarity index 54%
copy from maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml
copy to apache-maven/src/main/assembly/dir.xml
index 7d48d90..0d2b887 100644
--- a/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml
+++ b/apache-maven/src/main/assembly/dir.xml
@@ -1,5 +1,3 @@
-<?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
@@ -9,7 +7,7 @@ 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
+    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
@@ -19,12 +17,14 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<project>
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>gid</groupId>
-  <artifactId>aid</artifactId>
-  <version>1.0</version>
-
-  <name>${system.property}</name>
-</project>
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.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
index 3bf10e0..fb0aee8 100644
--- a/apache-maven/src/main/assembly/src.xml
+++ b/apache-maven/src/main/assembly/src.xml
@@ -17,7 +17,8 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<assembly>
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
   <id>src</id>
   <formats>
     <format>zip</format>
diff --git a/build.xml b/build.xml
deleted file mode 100644
index ccfca3b..0000000
--- a/build.xml
+++ /dev/null
@@ -1,307 +0,0 @@
-<!--
-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.
--->
-
-<!-- START SNIPPET: ant-bootstrap
-
-By default the bootstrap will use ~/.m2/repository as the integration repository but you can define the integration
-repository by specifying a property on the command line:
-
-ant -Dmaven.repo.local=/my/integration/repository
-
-Those familiar with Maven will note this is the same way the local repository can be set from the command-line.
-This facilitates having a set of builds converge on the same repository for integration purposes.
-
-END SNIPPET: ant-bootstrap -->
-
-<project default="all" basedir="." xmlns:artifact="urn:maven-artifact-ant">
-
-  <property name="distributionDirectory" value="apache-maven"/>
-  <property name="distributionId" value="apache-maven"/>
-  <property name="distributionShortName" value="Maven"/>
-  <property name="distributionName" value="Apache Maven"/>
-  <property name="it.workdir.version" value="3.0.x" />
-  <property name="maven-compile.jvmargs" value="-Xmx512m -Xms512m"/>
-  <property name="maven-compile.fork" value="true"/>
-  <property name="maven-compile.maxmemory" value="512m"/>
-
-  <target name="initTaskDefs">
-    <echo>Building ${distributionName} ...</echo>
-    <xmlproperty file="pom.xml" prefix="xmlPom" />
-    <path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.1.1.jar" />
-    <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />
-  </target>
-
-  <target name="isMavenHomeSet" depends="initTaskDefs">
-    <property environment="env" />
-    <condition property="maven.home" value="${env.M2_HOME}">
-      <isset property="env.M2_HOME" />
-    </condition>
-    <fail message="You must set the M2_HOME environment variable or specify a maven.home property to this Ant script">
-      <condition>
-        <or>
-          <not>
-            <isset property="maven.home" />
-          </not>
-          <equals arg1="${maven.home}" arg2="" trim="true" />
-        </or>
-      </condition>
-    </fail>
-    <available property="maven.home.exists" file="${maven.home}" />
-  </target>
-
-  <target name="prompt-maven-home-exists" depends="isMavenHomeSet" if="maven.home.exists">
-    <input addproperty="maven.home.exists.continue" validargs="yes,no" defaultvalue="no">WARNING:
-The specified target directory
-  ${maven.home}
-already exists. It will be deleted and overwritten by the build.
-Do you want to continue?</input>
-    <fail message="Build was aborted by user">
-      <condition>
-        <equals arg1="${maven.home.exists.continue}" arg2="no" trim="true" casesensitive="false" />
-      </condition>
-    </fail>
-  </target>
-
-  <target name="init" depends="isMavenHomeSet">
-    <!-- Initialize properties -->
-    <property name="maven.home.basename.expected" value="${distributionId}-${xmlPom.project.version}" />
-    <property name="maven.assembly" location="${distributionDirectory}/target/${maven.home.basename.expected}-bin.zip" />
-    <property name="maven.repo.local" value="${user.home}/.m2/repository" />
-    <property name="maven.debug" value="-e" />
-    <property name="maven.test.skip" value="false" />
-    <property name="skipTests" value="false" />
-    <property name="surefire.useFile" value="true" />
-    <property name="maven.test.redirectTestOutputToFile" value="${surefire.useFile}" />
-    <property name="maven.goal" value="install" />
-    <echo>maven.home = ${maven.home}</echo>
-    <echo>maven.repo.local = ${maven.repo.local}</echo>
-    <echo>distributionId = ${distributionId}</echo>
-    <echo>distributionName = ${distributionName}</echo>
-    <echo>distributionDirectory = ${distributionDirectory}</echo>
-  </target>
-
-  <target name="clean-bootstrap" description="cleans up generated bootstrap classes">
-    <delete dir="bootstrap" />
-  </target>
-
-  <target name="pull" depends="init" unless="skip.pull">
-    <!-- Pull the dependencies that Maven needs to build -->
-    <copy file="pom.xml" tofile="dependencies.xml" />
-    <replace file="${basedir}/dependencies.xml" token="<!--bootstrap-start-comment-->" value="<!--" />
-    <replace file="${basedir}/dependencies.xml" token="<!--bootstrap-end-comment-->" value="-->" />
-    <artifact:pom file="${basedir}/dependencies.xml" id="pom">
-      <localRepository path="${maven.repo.local}" />
-    </artifact:pom>
-    <artifact:dependencies pathId="pom.pathid" filesetId="pom.fileset" useScope="compile">
-      <localRepository path="${maven.repo.local}" />
-      <pom refid="pom" />
-    </artifact:dependencies>
-    <delete file="${basedir}/dependencies.xml" />
-
-    <!-- Pull the dependencies for Modello -->
-    <artifact:dependencies pathId="modello.pathid" filesetId="modello.fileset">
-      <localRepository path="${maven.repo.local}" />
-      <dependency groupId="org.codehaus.modello" artifactId="modello-maven-plugin" version="${pom.properties.modelloVersion}" />
-    </artifact:dependencies>
-
-    <!-- Pull the dependencies for the MetadataGenerator CLI -->
-    <artifact:dependencies pathId="pmdg.pathid" filesetId="pmdg.fileset">
-      <localRepository path="${maven.repo.local}" />
-      <dependency groupId="org.codehaus.plexus" artifactId="plexus-component-metadata" version="${pom.properties.plexusVersion}" />
-    </artifact:dependencies>
-
-  </target>
-
-  <target name="process-classes" depends="pull" description="generates plexus component metadata.">
-    <mkdir dir="${basedir}/bootstrap/target" />
-    <mkdir dir="${basedir}/bootstrap/target/classes" />
-
-    <path id="pmdg.classpath">
-      <path refid="maven.classpath" />
-      <path refid="pmdg.pathid" />
-    </path>
-
-    <echo>Using plexus version ${pom.properties.plexusVersion}</echo>
-    <java fork="true" classname="org.codehaus.plexus.metadata.PlexusMetadataGeneratorCli" failonerror="true">
-      <classpath refid="pmdg.classpath" />
-      <!-- We need to generate component descriptors from the maven-artifact sources which use javadoc annotations. -->
-      <arg value="--source" />
-      <arg value="${basedir}/maven-compat/src/main/java" />
-      <!-- We have separated the artifact handlers and lifecycle mappings into a separate file. -->
-      <arg value="--descriptors" />
-      <arg value="${basedir}/maven-core/src/main/resources/META-INF/plexus" />
-      <!-- Search the classes for annotations that we've compiled. -->
-      <arg value="--classes" />
-      <arg value="${basedir}/bootstrap/target/classes" />
-      <!-- We'll make one big fat components descriptor. -->
-      <arg value="--output" />
-      <arg value="${basedir}/bootstrap/target/classes/META-INF/plexus/components.xml" />
-    </java>
-  </target>
-
-  <target name="generate-sources" depends="pull" description="generates Java sources from Modello mdo model files">
-    <mkdir dir="bootstrap/target" />
-    <mkdir dir="bootstrap/target/generated-sources" />
-
-    <macrodef name="modello-single-mode">
-      <attribute name="file" />
-      <attribute name="mode" />
-      <attribute name="version" />
-      <sequential>
-        <java fork="true" classname="org.codehaus.modello.ModelloCli" failonerror="true">
-          <classpath refid="modello.pathid" />
-          <arg file="@{file}" />
-          <!-- model file -->
-          <arg value="@{mode}" />
-          <!-- output type -->
-          <arg file="bootstrap/target/generated-sources" />
-          <!-- output directory -->
-          <arg value="@{version}" />
-          <!-- model version -->
-          <arg value="false" />
-          <!-- package with version -->
-          <arg value="true" />
-          <!-- use Java 5 -->
-          <arg value="UTF-8" />
-          <!-- encoding -->
-        </java>
-      </sequential>
-    </macrodef>
-
-    <macrodef name="modello">
-      <attribute name="file" />
-      <attribute name="version" default="1.0.0" />
-      <sequential>
-        <echo taskname="modello" message="Generating sources for @{file}" />
-        <modello-single-mode file="@{file}" version="@{version}" mode="java" />
-        <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-reader" />
-        <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-writer" />
-      </sequential>
-    </macrodef>
-
-    <macrodef name="modello-ex">
-      <attribute name="file" />
-      <attribute name="version" default="1.0.0" />
-      <sequential>
-        <modello file="@{file}" version="@{version}" />
-        <modello-single-mode file="@{file}" version="@{version}" mode="xpp3-extended-reader" />
-      </sequential>
-    </macrodef>
-
-    <modello-ex file="maven-model/src/main/mdo/maven.mdo" version="4.0.0" />
-    <modello file="maven-plugin-api/src/main/mdo/lifecycle.mdo" />
-    <modello file="maven-model-builder/src/main/mdo/profiles.mdo" />
-    <modello file="maven-settings/src/main/mdo/settings.mdo" version="1.1.0" />
-    <modello file="maven-core/src/main/mdo/toolchains.mdo" version="1.1.0" />
-    <modello file="maven-repository-metadata/src/main/mdo/metadata.mdo" version="1.1.0" />
-    <modello file="maven-compat/src/main/mdo/profiles.mdo" />
-    <modello file="maven-compat/src/main/mdo/paramdoc.mdo" />
-    <modello file="maven-embedder/src/main/mdo/core-extensions.mdo" />
-  </target>
-
-  <target name="compile-boot" depends="generate-sources" description="compiles the bootstrap sources">
-    <path id="sources">
-      <dirset dir=".">
-        <include name="bootstrap/target/generated-sources" />
-        <include name="*/src/main/java" />
-      </dirset>
-    </path>
-
-    <mkdir dir="bootstrap/target/classes" />
-    <javac destdir="bootstrap/target/classes" encoding="UTF-8" source="1.7" target="1.7" debug="true" includeAntRuntime="false">
-      <src refid="sources" />
-      <classpath refid="pom.pathid" />
-    </javac>
-
-    <copy todir="bootstrap/target/classes" encoding="ISO-8859-1">
-      <fileset dir="maven-core/src/main/resources">
-        <include name="**/build.properties" />
-      </fileset>
-      <filterset begintoken="${" endtoken="}">
-        <filter token="project.version" value="${xmlPom.project.version}"/>
-      </filterset>
-    </copy>
-    <echo file="bootstrap/target/classes/META-INF/maven/org.apache.maven/maven-core/pom.properties" encoding="ISO-8859-1">
-      version = ${xmlPom.project.version}
-    </echo>
-
-    <path id="maven.classpath">
-      <pathelement location="bootstrap/target/classes" />
-      <dirset dir=".">
-        <include name="*/src/main/resources" />
-      </dirset>
-      <path refid="pom.pathid" />
-    </path>
-  </target>
-
-  <target name="maven-compile" depends="compile-boot,process-classes" description="compiles Maven using the bootstrap Maven, skipping automated tests">
-    <java fork="${maven-compile.fork}" classname="org.apache.maven.cli.MavenCli" failonerror="true" timeout="600000"  maxmemory="${maven-compile.maxmemory}">
-      <!--jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"/-->
-      <!--jvmarg value="${maven-compile.jvmargs}"/-->
-      <classpath refid="maven.classpath" />
-      <arg value="${maven.debug}" />
-      <arg value="-B" />
-      <arg value="-V" />
-      <arg value="clean" />
-      <arg value="${maven.goal}" />
-      <arg value="-Dmaven.test.skip=${maven.test.skip}" />
-      <arg value="-DskipTests=${skipTests}" />
-      <arg value="-Dmaven.repo.local=${maven.repo.local}" />
-      <arg value="-Dsurefire.useFile=${surefire.useFile}" />
-      <arg value="-Dmaven.test.redirectTestOutputToFile=${maven.test.redirectTestOutputToFile}" />
-      <arg value="-DdistributionId=${distributionId}" />
-      <arg value="-DdistributionShortName=${distributionShortName}" />
-      <arg value="-DdistributionName=${distributionName}" />
-      <jvmarg value="-Dmaven.multiModuleProjectDirectory=${basedir}" />
-    </java>
-  </target>
-
-  <target name="maven-assembly" depends="maven-compile" description="generates the Maven installation assembly using the bootstrap Maven">
-    <echo>
-The new Maven distribution was created as part of the MAVEN-COMPILE step, above.
-This goal just validates the presence of that distribution.
-</echo>
-    <condition property="build.failed">
-      <not>
-        <available file="${maven.assembly}" />
-      </not>
-    </condition>
-    <fail if="build.failed" message="Assembly task seemed to succeed, but couldn't find assembly file: ${maven.assembly}" />
-  </target>
-
-  <target name="extract-assembly" depends="init,prompt-maven-home-exists,maven-assembly" description="extracts the maven assembly into maven.home">
-    <echo>Extracting assembly to ${maven.home} ...</echo>
-    <!-- If we are starting from scratch make sure the directory is created -->
-    <delete dir="${maven.home}" />
-    <mkdir dir="${maven.home}" />
-    <unzip src="${maven.assembly}" dest="${maven.home}">
-      <mapper type="regexp" from="^[^\\/]+[\\/](.*)$$" to="\1" />
-    </unzip>
-    <chmod perm="+x">
-      <fileset dir="${maven.home}/bin">
-        <include name="mvn" />
-        <include name="mvnDebug" />
-        <include name="mvnyjp" />
-      </fileset>
-    </chmod>
-  </target>
-
-  <target name="all" depends="clean-bootstrap,init,extract-assembly" />
-
-</project>
diff --git a/doap_Maven.rdf b/doap_Maven.rdf
index a50b68f..86fbd1d 100644
--- a/doap_Maven.rdf
+++ b/doap_Maven.rdf
@@ -33,6 +33,17 @@ under the License.
     <release>
       <Version>
         <name>Latest stable release</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>
@@ -190,6 +201,12 @@ under the License.
         <browse rdf:resource="https://git-wip-us.apache.org/repos/asf/maven.git"/>
       </GitRepository>
     </repository>
+    <repository>
+      <GitRepository>
+        <location rdf:resource="https://git-wip-us.apache.org/repos/asf/maven-integration-testing.git"/>
+        <browse rdf:resource="https://git-wip-us.apache.org/repos/asf/maven-integration-testing.git"/>
+      </GitRepository>
+    </repository>
     <maintainer>
       <foaf:Person>
         <foaf:name>Apache Maven PMC</foaf:name>
diff --git a/maven-artifact/pom.xml b/maven-artifact/pom.xml
index b23cc9a..977fd34 100644
--- a/maven-artifact/pom.xml
+++ b/maven-artifact/pom.xml
@@ -1,14 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -16,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-artifact</artifactId>
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
index 6cc0022..9546433 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/Artifact.java
@@ -48,7 +48,7 @@ public interface Artifact
 
     Pattern VERSION_FILE_PATTERN = Pattern.compile( "^(.*)-([0-9]{8}.[0-9]{6})-([0-9]+)$" );
 
-    // TODO: into artifactScope handler
+    // TODO into artifactScope handler
 
     String SCOPE_COMPILE = "compile";
 
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
index 147e88e..bd2e8ed 100644
--- a/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
+++ b/maven-artifact/src/main/java/org/apache/maven/artifact/DefaultArtifact.java
@@ -230,7 +230,7 @@ public class DefaultArtifact
     {
         StringBuilder sb = new StringBuilder( 128 );
         sb.append( getGroupId() );
-        sb.append( ":" );
+        sb.append( ':' );
         appendArtifactTypeClassifierString( sb );
         return sb.toString();
     }
@@ -238,11 +238,11 @@ public class DefaultArtifact
     private void appendArtifactTypeClassifierString( StringBuilder sb )
     {
         sb.append( getArtifactId() );
-        sb.append( ":" );
+        sb.append( ':' );
         sb.append( getType() );
         if ( hasClassifier() )
         {
-            sb.append( ":" );
+            sb.append( ':' );
             sb.append( getClassifier() );
         }
     }
@@ -285,10 +285,10 @@ public class DefaultArtifact
         if ( getGroupId() != null )
         {
             sb.append( getGroupId() );
-            sb.append( ":" );
+            sb.append( ':' );
         }
         appendArtifactTypeClassifierString( sb );
-        sb.append( ":" );
+        sb.append( ':' );
         if ( getBaseVersionInternal() != null )
         {
             sb.append( getBaseVersionInternal() );
@@ -299,7 +299,7 @@ public class DefaultArtifact
         }
         if ( scope != null )
         {
-            sb.append( ":" );
+            sb.append( ':' );
             sb.append( scope );
         }
         return sb.toString();
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
index 9ef3038..0b33345 100644
--- 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
@@ -79,7 +79,6 @@ public interface ArtifactRepository
     /**
      *
      * @param artifact
-     * @return
      * @since 3.0-alpha-3
      */
     Artifact find( Artifact artifact );
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
index b6cd8f3..c5d2473 100644
--- 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
@@ -160,7 +160,7 @@ public class ArtifactRepositoryPolicy
         buffer.append( checksumPolicy );
         buffer.append( ", updates=" );
         buffer.append( updatePolicy );
-        buffer.append( "}" );
+        buffer.append( '}' );
         return buffer.toString();
     }
 
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
index 66e147c..b63428e 100644
--- 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
@@ -175,7 +175,7 @@ public class AbstractArtifactResolutionException
             for ( Iterator<String> i = path.iterator(); i.hasNext(); num++ )
             {
                 sb.append( indentation );
-                sb.append( "\t" );
+                sb.append( '\t' );
                 sb.append( num );
                 sb.append( ") " );
                 sb.append( i.next() );
@@ -201,8 +201,8 @@ public class AbstractArtifactResolutionException
         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( "  " ).append( groupId ).append( ':' ).append( artifactId ).append( ':' ).append( type ).append(
+                ':' ).append( version );
             sb.append( LS );
             if ( remoteRepositories != null )
             {
@@ -235,10 +235,10 @@ public class AbstractArtifactResolutionException
                         sb.append( ", snapshots=" ).append( snapshots.isEnabled() );
                     }
 
-                    sb.append( ")" );
+                    sb.append( ')' );
                     if ( i.hasNext() )
                     {
-                        sb.append( "," ).append( LS ).append( "  " );
+                        sb.append( ',' ).append( LS ).append( "  " );
                     }
                 }
             }
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
index d370617..bbc6733 100644
--- 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
@@ -22,7 +22,7 @@ package org.apache.maven.artifact.resolver;
 import org.apache.maven.artifact.Artifact;
 
 /**
- * Indiciates a cycle in the dependency graph.
+ * Indicates a cycle in the dependency graph.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
  */
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
index 0f13db1..896710f 100644
--- 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
@@ -84,8 +84,9 @@ public class MultipleArtifactsNotFoundException
 
     private static String constructMessage( List<Artifact> artifacts )
     {
-        StringBuilder buffer = new StringBuilder( "Missing:\n" );
+        StringBuilder buffer = new StringBuilder( 256 );
 
+        buffer.append( "Missing:\n" );
         buffer.append( "----------\n" );
 
         int counter = 0;
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
index e7d24c4..5222871 100644
--- 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
@@ -29,11 +29,13 @@ import java.util.Properties;
 import java.util.Stack;
 
 /**
+ * <p>
  * Generic implementation of version comparison.
- *
- * <p>Features:
+ * </p>
+ * 
+ * Features:
  * <ul>
- * <li>mixing of '<code>-</code>' (dash) and '<code>.</code>' (dot) separators,</li>
+ * <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 => [1, 0, alpha, 1]</code></li>
  * <li>unlimited number of version components,</li>
@@ -50,8 +52,8 @@ import java.util.Stack;
  *     </ul>
  *     Unknown qualifiers are considered after known qualifiers, with lexical order (always case insensitive),
  *   </li>
- * <li>a dash usually precedes a qualifier, and is always less important than something preceded with a dot.</li>
- * </ul></p>
+ * <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 at apache.org">Kenney Westerhof</a>
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
index 99b2b85..81a52b8 100644
--- 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
@@ -111,7 +111,7 @@ public class DefaultArtifactVersion
     {
         comparable = new ComparableVersion( version );
 
-        int index = version.indexOf( "-" );
+        int index = version.indexOf( '-' );
 
         String part1;
         String part2 = null;
@@ -180,7 +180,7 @@ public class DefaultArtifactVersion
                     fallback = Pattern.compile( "\\d+" ).matcher( qualifier ).matches();
                 }
 
-                // string tokenzier won't detect these and ignores them
+                // string tokenizer won't detect these and ignores them
                 if ( part1.contains( ".." ) || part1.startsWith( "." ) || part1.endsWith( "." ) )
                 {
                     fallback = true;
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
index d73d7ea..c728e9f 100644
--- 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
@@ -178,17 +178,17 @@ public class Restriction
     {
         StringBuilder buf = new StringBuilder();
 
-        buf.append( isLowerBoundInclusive() ? "[" : "(" );
+        buf.append( isLowerBoundInclusive() ? '[' : '(' );
         if ( getLowerBound() != null )
         {
             buf.append( getLowerBound().toString() );
         }
-        buf.append( "," );
+        buf.append( ',' );
         if ( getUpperBound() != null )
         {
             buf.append( getUpperBound().toString() );
         }
-        buf.append( isUpperBoundInclusive() ? "]" : ")" );
+        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
index 0d094ef..56343b2 100644
--- 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
@@ -72,9 +72,10 @@ public class VersionRange
     }
 
     /**
+     * <p>
      * Create a version range from a string representation
-     * <p/>
-     * Some spec examples are
+     * </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>
@@ -104,8 +105,8 @@ public class VersionRange
 
         while ( process.startsWith( "[" ) || process.startsWith( "(" ) )
         {
-            int index1 = process.indexOf( ")" );
-            int index2 = process.indexOf( "]" );
+            int index1 = process.indexOf( ')' );
+            int index2 = process.indexOf( ']' );
 
             int index = index2;
             if ( index2 < 0 || index1 < index2 )
@@ -171,7 +172,7 @@ public class VersionRange
 
         Restriction restriction;
 
-        int index = process.indexOf( "," );
+        int index = process.indexOf( ',' );
 
         if ( index < 0 )
         {
@@ -295,7 +296,7 @@ public class VersionRange
             // original recommended version
             version = restriction.recommendedVersion;
         }
-/* TODO: should throw this immediately, but need artifact
+/* TODO should throw this immediately, but need artifact
         else
         {
             throw new OverConstrainedVersionException( "Restricting incompatible version ranges" );
@@ -518,7 +519,7 @@ public class VersionRange
 
     public ArtifactVersion matchVersion( List<ArtifactVersion> versions )
     {
-        // TODO: could be more efficient by sorting the list and then moving along the restrictions in order?
+        // TODO could be more efficient by sorting the list and then moving along the restrictions in order?
 
         ArtifactVersion matched = null;
         for ( ArtifactVersion version : versions )
diff --git a/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java b/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java
index ea2c023..e42f1ed 100644
--- a/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java
+++ b/maven-artifact/src/main/java/org/apache/maven/repository/Proxy.java
@@ -148,9 +148,9 @@ public class Proxy
     }
 
     /**
-     * Get the type of the proxy server.
+     * Get the protocol of the proxy server.
      *
-     * @return the type of the proxy server
+     * @return the protocol of the proxy server
      */
     public String getProtocol()
     {
@@ -158,7 +158,7 @@ public class Proxy
     }
 
     /**
-     * @param type the type of the proxy server like <i>SOCKSv4</i>
+     * @param protocol the protocol of the proxy server like <i>SOCKSv4</i>
      */
     public void setProtocol( String protocol )
     {
diff --git a/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java b/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java
index e66a84a..7abdfbb 100644
--- a/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java
+++ b/maven-artifact/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadata.java
@@ -26,8 +26,8 @@ import org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreExce
  * Contains metadata about an artifact, and methods to retrieve/store it from an artifact repository.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo merge with artifactmetadatasource
- * @todo retrieval exception not appropriate for store
+ * TODO merge with artifactmetadatasource
+ * TODO retrieval exception not appropriate for store
  */
 public interface ArtifactMetadata
 {
@@ -64,7 +64,7 @@ public interface ArtifactMetadata
      * Merge a new metadata set into this piece of metadata.
      *
      * @param metadata the new metadata
-     * @todo this should only be needed on the repository metadata
+     * TODO this should only be needed on the repository metadata
      */
     void merge( ArtifactMetadata metadata );
 
@@ -73,7 +73,7 @@ public interface ArtifactMetadata
      *
      * @param localRepository  the local repository
      * @param remoteRepository the remote repository it came from
-     * @todo this should only be needed on the repository metadata
+     * TODO this should only be needed on the repository metadata
      */
     void storeInLocalRepository( ArtifactRepository localRepository,
                                  ArtifactRepository remoteRepository )
diff --git a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
index aea98dd..875b43e 100644
--- a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
+++ b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
@@ -185,7 +185,7 @@ public class ComparableVersionTest
 
     /**
      * Test <a href="https://issues.apache.org/jira/browse/MNG-5568">MNG-5568</a> edge case
-     * which was showing transitive inconsistency: since A > B and B > C then we should have A > C
+     * which was showing transitive inconsistency: since A > B and B > C then we should have A > C
      * otherwise sorting a list of ComparableVersions() will in some cases throw runtime exception;
      * see Netbeans issues <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=240845">240845</a> and
      * <a href="https://netbeans.org/bugzilla/show_bug.cgi?id=226100">226100</a>
diff --git a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
index 14b16cb..dc8d3d5 100644
--- a/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
+++ b/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
@@ -178,7 +178,7 @@ public class VersionRangeTest
         VersionRange range1 = VersionRange.createFromVersionSpec( "1.0" );
         VersionRange range2 = VersionRange.createFromVersionSpec( "1.1" );
         VersionRange mergedRange = range1.restrict( range2 );
-        // TODO: current policy is to retain the original version - is this correct, do we need strategies or is that handled elsewhere?
+        // TODO current policy is to retain the original version - is this correct, do we need strategies or is that handled elsewhere?
 //        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", mergedRange.getRecommendedVersion().toString() );
         assertEquals( CHECK_VERSION_RECOMMENDATION, "1.0", mergedRange.getRecommendedVersion().toString() );
         List<Restriction> restrictions = mergedRange.getRestrictions();
@@ -199,7 +199,7 @@ public class VersionRangeTest
         assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
         assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, restriction.isUpperBoundInclusive() );
 
-        // TODO: test reversed restrictions on all below
+        // TODO test reversed restrictions on all below
         range1 = VersionRange.createFromVersionSpec( "[1.0,)" );
         range2 = VersionRange.createFromVersionSpec( "1.1" );
         mergedRange = range1.restrict( range2 );
diff --git a/maven-builder-support/pom.xml b/maven-builder-support/pom.xml
index 4262f45..7457a4c 100644
--- a/maven-builder-support/pom.xml
+++ b/maven-builder-support/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-builder-support</artifactId>
diff --git a/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java b/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java
index ad1fc40..427eb2c 100644
--- a/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java
+++ b/maven-builder-support/src/main/java/org/apache/maven/building/DefaultProblem.java
@@ -151,7 +151,7 @@ class DefaultProblem
     {
         StringBuilder buffer = new StringBuilder( 128 );
 
-        buffer.append( "[" ).append( getSeverity() ).append( "] " );
+        buffer.append( '[' ).append( getSeverity() ).append( "] " );
         buffer.append( getMessage() );
         buffer.append( " @ " ).append( getLocation() );
 
diff --git a/maven-compat/pom.xml b/maven-compat/pom.xml
index 231fb92..9552803 100644
--- a/maven-compat/pom.xml
+++ b/maven-compat/pom.xml
@@ -1,14 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -16,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-compat</artifactId>
@@ -25,7 +34,7 @@
   <description>Maven2 classes maintained as compatibility layer.</description>
 
   <properties>
-    <checkstyle.failOnViolation>false</checkstyle.failOnViolation><!-- lazyness for code that will disappear in future... -->
+    <checkstyle.failOnViolation>false</checkstyle.failOnViolation><!-- laziness for code that will disappear in future... -->
   </properties>
 
   <dependencies>
@@ -50,6 +59,22 @@
       <artifactId>maven-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-resolver-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-impl</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>
@@ -76,13 +101,13 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-connector-basic</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-transport-wagon</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-wagon</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -106,4 +131,5 @@
       </plugin>
     </plugins>
   </build>
+  
 </project>
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java b/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
index 7051e3b..83edd2b 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/ArtifactScopeEnum.java
@@ -20,7 +20,7 @@ package org.apache.maven.artifact;
  */
 
 /**
- * Type safe reincarnation of Artifact scope. Also supplies the <code>DEFAULT_SCOPE<code> as well
+ * Type safe reincarnation of Artifact scope. Also supplies the {@code DEFAULT_SCOPE} as well
  * as convenience method to deal with scope relationships.
  *
  * @author <a href="oleg at codehaus.org">Oleg Gusakov</a>
@@ -49,8 +49,6 @@ public enum ArtifactScopeEnum
 
     /**
      * Helper method to simplify null processing
-     *
-     * @return
      */
     public static final ArtifactScopeEnum checkScope( ArtifactScopeEnum scope )
     {
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java b/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java
index 5abe110..e23bea9 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/UnknownRepositoryLayoutException.java
@@ -23,7 +23,7 @@ import org.codehaus.plexus.component.repository.exception.ComponentLookupExcepti
 
 /**
  * Exception which is meant to occur when a layout specified for a particular
- * repository doesn't have a corresponding {@link ArtifactRepositoryLayout}
+ * repository doesn't have a corresponding {@link org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout}
  * component in the current container.
  *
  * @author jdcasey
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java b/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
index 376eba2..ca6bb20 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/installer/ArtifactInstaller.java
@@ -40,7 +40,7 @@ public interface ArtifactInstaller
      * @param artifact the artifact definition
      * @param localRepository the local repository to install into
      * @throws ArtifactInstallationException if an error occurred installing the artifact
-     * @deprecated to be removed before 2.0 after the instlal/deploy plugins use the alternate
+     * @deprecated to be removed before 2.0 after the install/deploy plugins use the alternate
      *             method
      */
     @Deprecated
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java b/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
index 29876e2..fe89d1e 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
@@ -166,7 +166,7 @@ public class DefaultWagonManager
             String id = mirror.getId();
             if ( id == null )
             {
-                // TODO: this should be illegal in settings.xml
+                // TODO this should be illegal in settings.xml
                 id = repository.getId();
             }
 
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java b/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
index fb7ca8b..4337bb6 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
@@ -29,7 +29,7 @@ import org.apache.maven.wagon.authentication.AuthenticationInfo;
 import org.apache.maven.wagon.proxy.ProxyInfo;
 
 /**
- * Manages <a href="http://maven.apache.org/wagon">Wagon</a> related operations in Maven.
+ * Manages <a href="https://maven.apache.org/wagon">Wagon</a> related operations in Maven.
  *
  * @author <a href="michal.maczka at dimatics.com">Michal Maczka </a>
  */
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java b/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
index e0a5587..f5db5ef 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepository.java
@@ -175,11 +175,11 @@ public class DefaultArtifactRepository
 
     public String toString()
     {
-        StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder( 256 );
 
-        sb.append( "       id: " ).append( getId() ).append( "\n" );
-        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
-        sb.append( "   layout: " ).append( layout != null ? layout : "none" ).append( "\n" );
+        sb.append( "       id: " ).append( getId() ).append( '\n' );
+        sb.append( "      url: " ).append( getUrl() ).append( '\n' );
+        sb.append( "   layout: " ).append( layout != null ? layout : "none" ).append( '\n' );
 
         if ( snapshots != null )
         {
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java b/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
index 658dbda..0f69835 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/repository/DefaultArtifactRepositoryFactory.java
@@ -81,7 +81,9 @@ public class DefaultArtifactRepositoryFactory
                                                         ArtifactRepositoryPolicy snapshots,
                                                         ArtifactRepositoryPolicy releases )
     {
-        return injectSession( factory.createArtifactRepository( id, url, repositoryLayout, snapshots, releases ), true );
+        return injectSession( factory.createArtifactRepository( id, url, repositoryLayout, snapshots, releases ),
+                              true );
+
     }
 
     public void setGlobalUpdatePolicy( String updatePolicy )
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java b/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java
index 8553a31..58143e0 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/repository/layout/FlatRepositoryLayout.java
@@ -25,15 +25,11 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.codehaus.plexus.component.annotations.Component;
 
-/**
- * The code in this class is taken from DefaultRepositorylayout, located at:
- * http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/repository/layout/DefaultRepositoryLayout.java
- *
- */
 @Component( role = ArtifactRepositoryLayout.class, hint = "flat" )
 public class FlatRepositoryLayout
     implements ArtifactRepositoryLayout
 {
+
     private static final char ARTIFACT_SEPARATOR = '-';
 
     private static final char GROUP_SEPARATOR = '.';
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java b/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
index d01a290..28ba94d 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
@@ -165,7 +165,7 @@ public class DefaultRepositoryMetadataManager
                     }
                 }
 
-                // TODO: should this be inside the above check?
+                // TODO should this be inside the above check?
                 // touch file so that this is not checked again until interval has passed
                 if ( file.exists() )
                 {
@@ -196,9 +196,9 @@ public class DefaultRepositoryMetadataManager
                                 ArtifactRepository localRepository )
         throws RepositoryMetadataStoreException
     {
-        // TODO: currently this is first wins, but really we should take the latest by comparing either the
+        // TODO currently this is first wins, but really we should take the latest by comparing either the
         // snapshot timestamp, or some other timestamp later encoded into the metadata.
-        // TODO: this needs to be repeated here so the merging doesn't interfere with the written metadata
+        // TODO this needs to be repeated here so the merging doesn't interfere with the written metadata
         //  - we'd be much better having a pristine input, and an ongoing metadata for merging instead
 
         Map<ArtifactRepository, Metadata> previousMetadata = new HashMap<>();
@@ -227,7 +227,7 @@ public class DefaultRepositoryMetadataManager
                                          ArtifactRepository selected, ArtifactRepository localRepository )
         throws RepositoryMetadataStoreException
     {
-        // TODO: this could be a lot nicer... should really be in the snapshot transformation?
+        // TODO this could be a lot nicer... should really be in the snapshot transformation?
         if ( metadata.isSnapshot() )
         {
             Metadata prevMetadata = metadata.getMetadata();
@@ -312,7 +312,7 @@ public class DefaultRepositoryMetadataManager
     }
 
     /**
-     * @todo share with DefaultPluginMappingManager.
+     * TODO share with DefaultPluginMappingManager.
      */
     protected Metadata readMetadata( File mappingFile )
         throws RepositoryMetadataReadException
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java b/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
index 359ab2c..5120199 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/SnapshotArtifactRepositoryMetadata.java
@@ -26,7 +26,7 @@ import org.apache.maven.artifact.repository.ArtifactRepository;
  * Metadata for the artifact version directory of the repository.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo split instantiation (versioning, plugin mappings) from definition
+ * TODO split instantiation (versioning, plugin mappings) from definition
  */
 public class SnapshotArtifactRepositoryMetadata
     extends AbstractRepositoryMetadata
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
index 7b5faa1..d36ebde 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
@@ -39,61 +39,60 @@ public interface ArtifactResolver
     ArtifactResolutionResult resolve( ArtifactResolutionRequest request );
 
     // The rest is deprecated
-
     // USED BY MAVEN ASSEMBLY PLUGIN 2.2-beta-2
     @Deprecated
     String ROLE = ArtifactResolver.class.getName();
 
     // USED BY SUREFIRE, DEPENDENCY PLUGIN
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            ArtifactRepository localRepository,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactMetadataSource source, ArtifactFilter filter )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        ArtifactRepository localRepository,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactMetadataSource source, ArtifactFilter filter )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     // USED BY MAVEN ASSEMBLY PLUGIN
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            Map<String,Artifact> managedVersions, ArtifactRepository localRepository,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactMetadataSource source )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        Map<String, Artifact> managedVersions, ArtifactRepository localRepository,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactMetadataSource source )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     // USED BY MAVEN ASSEMBLY PLUGIN
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            Map<String,Artifact> managedVersions, ArtifactRepository localRepository,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactMetadataSource source, ArtifactFilter filter )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        Map<String, Artifact> managedVersions, ArtifactRepository localRepository,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactMetadataSource source, ArtifactFilter filter )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     // USED BY INVOKER PLUGIN
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactRepository localRepository, ArtifactMetadataSource source )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactRepository localRepository, ArtifactMetadataSource source )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            Map<String,Artifact> managedVersions, ArtifactRepository localRepository,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactMetadataSource source, ArtifactFilter filter,
-            List<ResolutionListener> listeners )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        Map<String, Artifact> managedVersions, ArtifactRepository localRepository,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactMetadataSource source, ArtifactFilter filter,
+        List<ResolutionListener> listeners )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     @Deprecated
-    ArtifactResolutionResult resolveTransitively( 
-    		Set<Artifact> artifacts, Artifact originatingArtifact,
-            List<ArtifactRepository> remoteRepositories,
-            ArtifactRepository localRepository, ArtifactMetadataSource source,
-            List<ResolutionListener> listeners )
+    ArtifactResolutionResult resolveTransitively(
+        Set<Artifact> artifacts, Artifact originatingArtifact,
+        List<ArtifactRepository> remoteRepositories,
+        ArtifactRepository localRepository, ArtifactMetadataSource source,
+        List<ResolutionListener> listeners )
         throws ArtifactResolutionException, ArtifactNotFoundException;
 
     // USED BY REMOTE RESOURCES PLUGIN, DEPENDENCY PLUGIN, SHADE PLUGIN
@@ -112,4 +111,5 @@ public interface ArtifactResolver
     void resolveAlways( Artifact artifact, List<ArtifactRepository> remoteRepositories,
                         ArtifactRepository localRepository )
         throws ArtifactResolutionException, ArtifactNotFoundException;
+
 }
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
index 43806b1..01aa80f 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DebugResolutionListener.java
@@ -71,7 +71,7 @@ public class DebugResolutionListener
 
         if ( omittedVersion != null ? !omittedVersion.equals( keptVersion ) : keptVersion != null )
         {
-            logger.debug( indent + omitted + " (removed - nearer found: " + kept.getVersion() + ")" );
+            logger.debug( indent + omitted + " (removed - nearer found: " + keptVersion + ")" );
         }
     }
 
@@ -85,7 +85,7 @@ public class DebugResolutionListener
         logger.debug( indent + artifact + " (not setting artifactScope to: " + ignoredScope + "; local artifactScope "
             + artifact.getScope() + " wins)" );
 
-        // TODO: better way than static? this might hide messages in a reactor
+        // TODO better way than static? this might hide messages in a reactor
         if ( !ignoredArtifacts.contains( artifact ) )
         {
             logger.warn( "\n\tArtifact " + artifact + " retains local artifactScope '" + artifact.getScope()
@@ -164,4 +164,4 @@ public class DebugResolutionListener
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
index 5e281c1..915ee72 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
@@ -258,7 +258,7 @@ public class DefaultArtifactResolver
                                                              throws ArtifactResolutionException,
                                                              ArtifactNotFoundException
     {
-        return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
+        return resolveTransitively( artifacts, originatingArtifact, Collections.<String, Artifact>emptyMap(), localRepository,
                                     remoteRepositories, source, filter );
 
     }
@@ -305,7 +305,7 @@ public class DefaultArtifactResolver
                                                              throws ArtifactResolutionException,
                                                              ArtifactNotFoundException
     {
-        return resolveTransitively( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository,
+        return resolveTransitively( artifacts, originatingArtifact, Collections.<String, Artifact>emptyMap(), localRepository,
                                     remoteRepositories, source, null, listeners );
     }
 
@@ -332,10 +332,16 @@ public class DefaultArtifactResolver
                                                              throws ArtifactResolutionException,
                                                              ArtifactNotFoundException
     {
-        ArtifactResolutionRequest request =
-            new ArtifactResolutionRequest().setArtifact( originatingArtifact ).setResolveRoot( false )
+        ArtifactResolutionRequest request = new ArtifactResolutionRequest().
+            setArtifact( originatingArtifact ).
+            setResolveRoot( false ).
             // This is required by the surefire plugin
-            .setArtifactDependencies( artifacts ).setManagedVersionMap( managedVersions ).setLocalRepository( localRepository ).setRemoteRepositories( remoteRepositories ).setCollectionFilter( filter ).setListeners( listeners );
+            setArtifactDependencies( artifacts ).
+            setManagedVersionMap( managedVersions ).
+            setLocalRepository( localRepository ).
+            setRemoteRepositories( remoteRepositories ).
+            setCollectionFilter( filter ).
+            setListeners( listeners );
 
         injectSession2( request, legacySupport.getSession() );
 
@@ -500,6 +506,7 @@ public class DefaultArtifactResolver
         if ( result.hasMetadataResolutionExceptions() || result.hasVersionRangeViolations()
             || result.hasCircularDependencyExceptions() )
         {
+            logger.info( "Failure detected." );
             return result;
         }
 
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java
index 06da7e3..6cf06b1 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/resolver/ResolutionListenerForDepMgmt.java
@@ -23,8 +23,8 @@ import org.apache.maven.artifact.Artifact;
 
 /**
  * Do not use!
- * <p/>
- * Should only be implmemented by DebugResolutionListener.  Remove this
+ * <p>
+ * Should only be implemented by DebugResolutionListener.  Remove this
  * when the ResolutionListener interface deprecation of the manageArtifact
  * method (and the [yet to be done] addition of these methods to that
  * interface) has had a chance to propagate to all interested plugins.
@@ -40,4 +40,4 @@ public interface ResolutionListenerForDepMgmt
 
     void manageArtifactSystemPath( Artifact artifact,
                                    Artifact replacement );
-}
\ No newline at end of file
+}
diff --git a/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java b/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java
index 86b4949..02ac24c 100644
--- a/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java
+++ b/maven-compat/src/main/java/org/apache/maven/artifact/versioning/ManagedVersionMap.java
@@ -45,10 +45,10 @@ public class ManagedVersionMap
         while ( iter.hasNext() )
         {
             String key = iter.next();
-            buffer.append( key ).append( "=" ).append( get( key ) );
+            buffer.append( key ).append( '=' ).append( get( key ) );
             if ( iter.hasNext() )
             {
-                buffer.append( "\n" );
+                buffer.append( '\n' );
             }
         }
         return buffer.toString();
diff --git a/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java b/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
index 7a9ec09..e3e0cb7 100644
--- a/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/profiles/DefaultProfileManager.java
@@ -62,7 +62,7 @@ public class DefaultProfileManager
 
     /**
      * @deprecated without passing in the system properties, the SystemPropertiesProfileActivator will not work
-     *             correctly in embedded envirnments.
+     *             correctly in embedded environments.
      */
     public DefaultProfileManager( PlexusContainer container )
     {
diff --git a/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java b/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java
index d0a9ecb..2688785 100644
--- a/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java
+++ b/maven-compat/src/main/java/org/apache/maven/profiles/activation/ProfileActivator.java
@@ -24,10 +24,12 @@ import org.apache.maven.model.Profile;
 @Deprecated
 public interface ProfileActivator
 {
-    final String ROLE = ProfileActivator.class.getName();
+
+    String ROLE = ProfileActivator.class.getName();
 
     boolean canDetermineActivation( Profile profile );
 
     boolean isActive( Profile profile )
         throws ProfileActivationException;
+
 }
diff --git a/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java b/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
index c44d8db..df97948 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/MavenProjectBuilder.java
@@ -39,7 +39,8 @@ public interface MavenProjectBuilder
     MavenProject build( File pom, ProjectBuilderConfiguration configuration )
         throws ProjectBuildingException;
 
-    //TODO maven-site-plugin -- Vincent, Dennis and Lukas are checking but this doesn't appear to be required anymore.
+    //TODO maven-site-plugin -- not used by the plugin directly, but used by Doxia Integration Tool & MPIR
+    // see DOXIASITETOOLS-167 & MPIR-349
     MavenProject build( File pom, ArtifactRepository localRepository, ProfileManager profileManager )
         throws ProjectBuildingException;
 
@@ -53,7 +54,7 @@ public interface MavenProjectBuilder
                                       ArtifactRepository localRepository, boolean allowStubModel )
         throws ProjectBuildingException;
 
-    // TODO: this is only to provide a project for plugins that don't need a project to execute but need some
+    // TODO this is only to provide a project for plugins that don't need a project to execute but need some
     // of the values from a MavenProject. Ideally this should be something internal and nothing outside Maven
     // would ever need this so it should not be exposed in a public API
     MavenProject buildStandaloneSuperProject( ProjectBuilderConfiguration configuration )
diff --git a/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java b/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java
index faf224b..fb99593 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/ModelUtils.java
@@ -40,15 +40,16 @@ public final class ModelUtils
 
     /**
      * This should be the resulting ordering of plugins after merging:
-     * <p/>
+     * <p>
      * Given:
-     * <p/>
-     * parent: X -> A -> B -> D -> E
-     * child: Y -> A -> C -> D -> F
-     * <p/>
+     * <pre>
+     * parent: X -> A -> B -> D -> E
+     * child: Y -> A -> C -> D -> F
+     * </pre>
      * Result:
-     * <p/>
-     * X -> Y -> A -> B -> C -> D -> E -> F
+     * <pre>
+     * X -> Y -> A -> B -> C -> D -> E -> F
+     * </pre>
      */
     public static void mergePluginLists( PluginContainer childContainer, PluginContainer parentContainer,
                                          boolean handleAsInheritance )
diff --git a/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java b/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java
index d15a892..72ea6d1 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/ProjectUtils.java
@@ -45,9 +45,8 @@ public final class ProjectUtils
     {
     }
 
-    public static List<ArtifactRepository> buildArtifactRepositories( List<Repository> repositories,
-                                                                      ArtifactRepositoryFactory artifactRepositoryFactory,
-                                                                      PlexusContainer c )
+    public static List<ArtifactRepository> buildArtifactRepositories(
+        List<Repository> repositories, ArtifactRepositoryFactory artifactRepositoryFactory, PlexusContainer c )
         throws InvalidRepositoryException
     {
 
@@ -61,17 +60,15 @@ public final class ProjectUtils
         return remoteRepositories;
     }
 
-    public static ArtifactRepository buildDeploymentArtifactRepository( DeploymentRepository repo,
-                                                                        ArtifactRepositoryFactory artifactRepositoryFactory,
-                                                                        PlexusContainer c )
+    public static ArtifactRepository buildDeploymentArtifactRepository(
+        DeploymentRepository repo, ArtifactRepositoryFactory artifactRepositoryFactory, PlexusContainer c )
         throws InvalidRepositoryException
     {
         return buildArtifactRepository( repo, artifactRepositoryFactory, c );
     }
 
-    public static ArtifactRepository buildArtifactRepository( Repository repo,
-                                                              ArtifactRepositoryFactory artifactRepositoryFactory,
-                                                              PlexusContainer c )
+    public static ArtifactRepository buildArtifactRepository(
+        Repository repo, ArtifactRepositoryFactory artifactRepositoryFactory, PlexusContainer c )
         throws InvalidRepositoryException
     {
         RepositorySystem repositorySystem = rs( c );
diff --git a/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java b/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
index fa67041..07e9473 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
@@ -51,7 +51,7 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
 public class DefaultModelInheritanceAssembler
     implements ModelInheritanceAssembler
 {
-    // TODO: Remove this!
+    // TODO Remove this!
     @SuppressWarnings( "unchecked" )
     public void assembleBuildInheritance( Build childBuild, Build parentBuild, boolean handleAsInheritance )
     {
@@ -230,7 +230,7 @@ public class DefaultModelInheritanceAssembler
             }
         }
 
-        assembleDistributionInheritence( child, parent, childPathAdjustment, appendPaths );
+        assembleDistributionInheritance( child, parent, childPathAdjustment, appendPaths );
 
         // issueManagement
         if ( child.getIssueManagement() == null )
@@ -303,7 +303,7 @@ public class DefaultModelInheritanceAssembler
         child.setProperties( props );
     }
 
-    // TODO: Remove this!
+    // TODO Remove this!
     @SuppressWarnings( "unchecked" )
     private void assembleDependencyManagementInheritance( Model child, Model parent )
     {
@@ -523,7 +523,7 @@ public class DefaultModelInheritanceAssembler
 
     }
 
-    // TODO: Remove this!
+    // TODO Remove this!
     @SuppressWarnings( "unchecked" )
     private void assembleDependencyInheritance( Model child, Model parent )
     {
@@ -569,7 +569,7 @@ public class DefaultModelInheritanceAssembler
         }
     }
 
-    private void assembleDistributionInheritence( Model child, Model parent, String childPathAdjustment,
+    private void assembleDistributionInheritance( Model child, Model parent, String childPathAdjustment,
                                                   boolean appendPaths )
     {
         if ( parent.getDistributionManagement() != null )
@@ -653,7 +653,7 @@ public class DefaultModelInheritanceAssembler
         return repository;
     }
 
-    // TODO: This should eventually be migrated to DefaultPathTranslator.
+    // TODO This should eventually be migrated to DefaultPathTranslator.
     protected String appendPath( String parentPath, String childPath, String pathAdjustment, boolean appendPaths )
     {
         String uncleanPath = parentPath;
@@ -689,7 +689,7 @@ public class DefaultModelInheritanceAssembler
         return cleanedPath + resolvePath( uncleanPath );
     }
 
-    // TODO: Move this to plexus-utils' PathTool.
+    // TODO Move this to plexus-utils' PathTool.
     private static String resolvePath( String uncleanPath )
     {
         LinkedList<String> pathElements = new LinkedList<>();
diff --git a/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java b/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
index ef4edca..bf8a63b 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
@@ -35,7 +35,7 @@ public interface ModelInheritanceAssembler
 
     void assembleModelInheritance( Model child, Model parent );
 
-    void assembleBuildInheritance( Build childBuild, Build parentBuild, boolean handleAsInheriance );
+    void assembleBuildInheritance( Build childBuild, Build parentBuild, boolean handleAsInheritance );
 
     void copyModel( Model dest, Model source );
 }
diff --git a/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java b/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
index 568196c..913e2dd 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java
@@ -58,13 +58,14 @@ import java.util.Properties;
  * Use a regular expression search to find and resolve expressions within the POM.
  *
  * @author jdcasey Created on Feb 3, 2005
- * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
+ * TODO Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
  */
 @Deprecated
 public abstract class AbstractStringBasedModelInterpolator
     extends AbstractLogEnabled
     implements ModelInterpolator, Initializable
 {
+
     private static final List<String> PROJECT_PREFIXES = Arrays.asList( "pom.", "project." );
 
     private static final List<String> TRANSLATED_PATH_EXPRESSIONS;
@@ -102,10 +103,6 @@ public abstract class AbstractStringBasedModelInterpolator
         this.pathTranslator = pathTranslator;
     }
 
-    /**
-     * @todo: Remove the throws clause.
-     * @throws IOException This exception is not thrown any more, and needs to be removed.
-     */
     protected AbstractStringBasedModelInterpolator()
     {
     }
@@ -119,11 +116,12 @@ public abstract class AbstractStringBasedModelInterpolator
     /**
      * Serialize the inbound Model instance to a StringWriter, perform the regex replacement to resolve
      * POM expressions, then re-parse into the resolved Model instance.
-     * <br/>
+     * <p>
      * <b>NOTE:</b> This will result in a different instance of Model being returned!!!
      *
-     * @param model   The inbound Model instance, to serialize and reference for expression resolution
+     * @param model The inbound Model instance, to serialize and reference for expression resolution
      * @param context The other context map to be used during resolution
+     *
      * @return The resolved instance of the inbound Model. This is a different instance!
      *
      * @deprecated Use {@link ModelInterpolator#interpolate(Model, File, ProjectBuilderConfiguration, boolean)} instead.
@@ -187,9 +185,7 @@ public abstract class AbstractStringBasedModelInterpolator
      *   <li>If the value is null, but the context contains the expression, don't replace the expression string
      *       with the value, and continue to find other expressions.</li>
      *   <li>If the value is null, get it from the model properties.</li>
-     *   <li>
-     * @param overrideContext
-     * @param outputDebugMessages
+     * </ul>
      */
     public String interpolate( String src,
                                Model model,
@@ -227,6 +223,7 @@ public abstract class AbstractStringBasedModelInterpolator
 
         ValueSource basedirValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
         {
+
             public Object getValue( String expression )
             {
                 if ( projectDir != null && "basedir".equals( expression ) )
@@ -235,9 +232,11 @@ public abstract class AbstractStringBasedModelInterpolator
                 }
                 return null;
             }
+
         }, PROJECT_PREFIXES, true );
         ValueSource baseUriValueSource = new PrefixedValueSourceWrapper( new AbstractValueSource( false )
         {
+
             public Object getValue( String expression )
             {
                 if ( projectDir != null && "baseUri".equals( expression ) )
@@ -246,6 +245,7 @@ public abstract class AbstractStringBasedModelInterpolator
                 }
                 return null;
             }
+
         }, PROJECT_PREFIXES, false );
 
         List<ValueSource> valueSources = new ArrayList<>( 9 );
@@ -260,10 +260,12 @@ public abstract class AbstractStringBasedModelInterpolator
         valueSources.add( new MapBasedValueSource( config.getExecutionProperties() ) );
         valueSources.add( new AbstractValueSource( false )
         {
+
             public Object getValue( String expression )
             {
                 return config.getExecutionProperties().getProperty( "env." + expression );
             }
+
         } );
         valueSources.add( modelValueSource2 );
 
@@ -273,11 +275,13 @@ public abstract class AbstractStringBasedModelInterpolator
     protected List<InterpolationPostProcessor> createPostProcessors( final Model model, final File projectDir,
                                                                      final ProjectBuilderConfiguration config )
     {
-        return Collections.singletonList( (InterpolationPostProcessor) new PathTranslatingPostProcessor(
-                                                                                                         PROJECT_PREFIXES,
-                                                                                                         TRANSLATED_PATH_EXPRESSIONS,
-                                                                                                         projectDir,
-                                                                                                         pathTranslator ) );
+        return Collections.singletonList(
+            (InterpolationPostProcessor) new PathTranslatingPostProcessor(
+                PROJECT_PREFIXES,
+                TRANSLATED_PATH_EXPRESSIONS,
+                projectDir,
+                pathTranslator ) );
+
     }
 
     @SuppressWarnings( "unchecked" )
diff --git a/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java b/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java
index 5b02880..ea60f16 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolationException.java
@@ -21,8 +21,6 @@ package org.apache.maven.project.interpolation;
 
 /**
  * @author jdcasey
- *         <p/>
- *         Created on Feb 2, 2005
  */
 @SuppressWarnings( "serial" )
 @Deprecated
@@ -69,4 +67,4 @@ public class ModelInterpolationException
         return originalMessage;
     }
 
-}
\ No newline at end of file
+}
diff --git a/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java b/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
index e1556ea..036e7f0 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
@@ -27,8 +27,6 @@ import java.util.Map;
 
 /**
  * @author jdcasey
- *         <p/>
- *         Created on Feb 2, 2005
  */
 @Deprecated
 public interface ModelInterpolator
diff --git a/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java b/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
index 4e251ae..78990ea 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
@@ -30,7 +30,7 @@ import org.codehaus.plexus.interpolation.RegexBasedInterpolator;
  * Use a regular expression search to find and resolve expressions within the POM.
  *
  * @author jdcasey Created on Feb 3, 2005
- * @todo Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
+ * TODO Consolidate this logic with the PluginParameterExpressionEvaluator, minus deprecations/bans.
  */
 @Deprecated
 public class RegexBasedModelInterpolator
diff --git a/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java b/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
index 13ceaf7..ecde27f 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/interpolation/StringSearchModelInterpolator.java
@@ -47,8 +47,8 @@ public class StringSearchModelInterpolator
     extends AbstractStringBasedModelInterpolator
 {
 
-    private static final Map<Class<?>, Field[]> fieldsByClass = new WeakHashMap<>();
-    private static final Map<Class<?>, Boolean> fieldIsPrimitiveByClass = new WeakHashMap<>();
+    private static final Map<Class<?>, Field[]> FIELDS_BY_CLASS = new WeakHashMap<>();
+    private static final Map<Class<?>, Boolean> PRIMITIVE_BY_CLASS = new WeakHashMap<>();
 
     public StringSearchModelInterpolator()
     {
@@ -161,11 +161,11 @@ public class StringSearchModelInterpolator
             }
             else if ( isQualifiedForInterpolation( cls ) )
             {
-                Field[] fields = fieldsByClass.get( cls );
+                Field[] fields = FIELDS_BY_CLASS.get( cls );
                 if ( fields == null )
                 {
                     fields = cls.getDeclaredFields();
-                    fieldsByClass.put( cls, fields );
+                    FIELDS_BY_CLASS.put( cls, fields );
                 }
 
                 for ( Field field : fields )
@@ -350,12 +350,12 @@ public class StringSearchModelInterpolator
 
         private boolean isQualifiedForInterpolation( Field field, Class<?> fieldType )
         {
-            if ( !fieldIsPrimitiveByClass.containsKey( fieldType ) )
+            if ( !PRIMITIVE_BY_CLASS.containsKey( fieldType ) )
             {
-                fieldIsPrimitiveByClass.put( fieldType, fieldType.isPrimitive() );
+                PRIMITIVE_BY_CLASS.put( fieldType, fieldType.isPrimitive() );
             }
 
-            if ( fieldIsPrimitiveByClass.get( fieldType ) )
+            if ( PRIMITIVE_BY_CLASS.get( fieldType ) )
             {
                 return false;
             }
diff --git a/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java b/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java
index b4061ec..eb3f24d 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/path/DefaultPathTranslator.java
@@ -125,17 +125,13 @@ public class DefaultPathTranslator
         if ( s != null )
         {
             String basedirExpr = null;
-            for ( String BASEDIR_EXPRESSION : BASEDIR_EXPRESSIONS )
+            for ( String expression : BASEDIR_EXPRESSIONS )
             {
-                basedirExpr = BASEDIR_EXPRESSION;
-                if ( s.startsWith( basedirExpr ) )
+                if ( s.startsWith( expression ) )
                 {
+                    basedirExpr = expression;
                     break;
                 }
-                else
-                {
-                    basedirExpr = null;
-                }
             }
 
             if ( basedirExpr != null )
diff --git a/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java b/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java
index ad94fe0..5033b99 100644
--- a/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java
+++ b/maven-compat/src/main/java/org/apache/maven/project/validation/ModelValidationResult.java
@@ -85,7 +85,7 @@ public class ModelValidationResult
 //
         for ( int i = 0; i < messages.size(); i++ )
         {
-            message.append( indentation ).append( "[" ).append( i ).append( "]  " ).append( messages.get( i ) ).append(
+            message.append( indentation ).append( '[' ).append( i ).append( "]  " ).append( messages.get( i ) ).append(
                 NEWLINE );
         }
 
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java b/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java
index e994856..3568ff0 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/MetadataGraph.java
@@ -57,7 +57,6 @@ public class MetadataGraph
      * find a node by the GAV (metadata)
      *
      * @param md
-     * @return
      */
     public MetadataGraphNode findNode( MavenArtifactMetadata md )
     {
@@ -76,8 +75,6 @@ public class MetadataGraph
 
     /**
      * getter
-     *
-     * @return
      */
     public MetadataGraphNode getEntry()
     {
@@ -86,8 +83,6 @@ public class MetadataGraph
 
     /**
      * getter
-     *
-     * @return
      */
     public Collection<MetadataGraphNode> getNodes()
     {
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java b/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java
index c98dd05..75d9ddc 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionRequest.java
@@ -108,11 +108,24 @@ public class MetadataResolutionRequest
         return this;
     }
 
+    /**
+     * @deprecated instead use {@link #getRemoteRepositories()}
+     */
+    @Deprecated
     public List<ArtifactRepository> getRemoteRepostories()
     {
         return remoteRepositories;
     }
 
+    public List<ArtifactRepository> getRemoteRepositories()
+    {
+        return getRemoteRepostories();
+    }
+
+    /**
+     * @deprecated instead use {@link #setRemoteRepositories(List)}
+     */
+    @Deprecated
     public MetadataResolutionRequest setRemoteRepostories( List<ArtifactRepository> remoteRepostories )
     {
         this.remoteRepositories = remoteRepostories;
@@ -120,6 +133,11 @@ public class MetadataResolutionRequest
         return this;
     }
 
+    public MetadataResolutionRequest setRemoteRepositories( List<ArtifactRepository> remoteRepositories )
+    {
+        return setRemoteRepostories( remoteRepositories );
+    }
+
     public Map getManagedVersionMap()
     {
         return managedVersionMap;
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java b/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java
index cfdd7f9..28fb723 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/MetadataResolutionResult.java
@@ -118,7 +118,7 @@ public class MetadataResolutionResult
 
     public List<Artifact> getMissingArtifacts()
     {
-        return missingArtifacts == null ? Collections.<Artifact> emptyList() : missingArtifacts;
+        return missingArtifacts == null ? Collections.<Artifact>emptyList() : missingArtifacts;
     }
 
     public MetadataResolutionResult addMissingArtifact( Artifact artifact )
@@ -148,7 +148,7 @@ public class MetadataResolutionResult
 
     public List<Exception> getExceptions()
     {
-        return exceptions == null ? Collections.<Exception> emptyList() : exceptions;
+        return exceptions == null ? Collections.<Exception>emptyList() : exceptions;
     }
 
     // ------------------------------------------------------------------------
@@ -161,9 +161,9 @@ public class MetadataResolutionResult
     }
 
     /**
-     * @TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
+     * TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
      *       {@link #getVersionRangeViolation(int)} but it's not used like that in
-     *       {@link DefaultLegacyArtifactCollector}
+     *       {@link org.apache.maven.repository.legacy.resolver.DefaultLegacyArtifactCollector}
      */
     public MetadataResolutionResult addVersionRangeViolation( Exception e )
     {
@@ -185,7 +185,7 @@ public class MetadataResolutionResult
 
     public List<Exception> getVersionRangeViolations()
     {
-        return versionRangeViolations == null ? Collections.<Exception> emptyList() : versionRangeViolations;
+        return versionRangeViolations == null ? Collections.<Exception>emptyList() : versionRangeViolations;
     }
 
     // ------------------------------------------------------------------------
@@ -217,7 +217,7 @@ public class MetadataResolutionResult
 
     public List<ArtifactResolutionException> getMetadataResolutionExceptions()
     {
-        return metadataResolutionExceptions == null ? Collections.<ArtifactResolutionException> emptyList()
+        return metadataResolutionExceptions == null ? Collections.<ArtifactResolutionException>emptyList()
                         : metadataResolutionExceptions;
     }
 
@@ -322,21 +322,19 @@ public class MetadataResolutionResult
 
     public String toString()
     {
-        StringBuilder sb = new StringBuilder();
+        if ( artifacts == null )
+            return "";
 
-        if ( artifacts != null )
+        StringBuilder sb = new StringBuilder( 256 );
+        int i = 1;
+        sb.append( "---------\n" );
+        sb.append( artifacts.size() ).append( '\n' );
+        for ( Artifact a : artifacts )
         {
-            int i = 1;
-            sb.append( "---------" ).append( "\n" );
-            sb.append( artifacts.size() ).append( "\n" );
-            for ( Artifact a : artifacts )
-            {
-                sb.append( i ).append( " " ).append( a ).append( "\n" );
-                i++;
-            }
-            sb.append( "---------" ).append( "\n" );
+            sb.append( i ).append( ' ' ).append( a ).append( '\n' );
+            i++;
         }
-
+        sb.append( "---------\n" );
         return sb.toString();
     }
 
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
index dfc463b..4839d68 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultUpdateCheckManager.java
@@ -28,15 +28,12 @@ import org.apache.maven.repository.Proxy;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.util.IOUtil;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileLock;
 import java.util.Date;
@@ -242,18 +239,12 @@ public class DefaultUpdateCheckManager
                 Properties props = new Properties();
 
                 channel = new RandomAccessFile( touchfile, "rw" ).getChannel();
-                lock = channel.lock( 0, channel.size(), false );
+                lock = channel.lock();
 
                 if ( touchfile.canRead() )
                 {
                     getLogger().debug( "Reading resolution-state from: " + touchfile );
-                    ByteBuffer buffer = ByteBuffer.allocate( (int) channel.size() );
-
-                    channel.read( buffer );
-                    buffer.flip();
-
-                    ByteArrayInputStream stream = new ByteArrayInputStream( buffer.array() );
-                    props.load( stream );
+                    props.load( Channels.newInputStream( channel ) );
                 }
 
                 props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
@@ -267,18 +258,15 @@ public class DefaultUpdateCheckManager
                     props.remove( key + ERROR_KEY_SUFFIX );
                 }
 
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-
                 getLogger().debug( "Writing resolution-state to: " + touchfile );
-                props.store( stream, "Last modified on: " + new Date() );
+                channel.truncate( 0 );
+                props.store( Channels.newOutputStream( channel ), "Last modified on: " + new Date() );
 
-                byte[] data = stream.toByteArray();
-                ByteBuffer buffer = ByteBuffer.allocate( data.length );
-                buffer.put( data );
-                buffer.flip();
+                lock.release();
+                lock = null;
 
-                channel.position( 0 );
-                channel.write( buffer );
+                channel.close();
+                channel = null;
             }
             catch ( IOException e )
             {
@@ -359,27 +347,26 @@ public class DefaultUpdateCheckManager
 
         synchronized ( touchfile.getAbsolutePath().intern() )
         {
+            FileInputStream in = null;
             FileLock lock = null;
-            FileChannel channel = null;
+
             try
             {
                 Properties props = new Properties();
 
-                FileInputStream stream = new FileInputStream( touchfile );
-                try
-                {
-                    channel = stream.getChannel();
-                    lock = channel.lock( 0, channel.size(), true );
+                in = new FileInputStream( touchfile );
+                lock = in.getChannel().lock( 0, Long.MAX_VALUE, true );
 
-                    getLogger().debug( "Reading resolution-state from: " + touchfile );
-                    props.load( stream );
+                getLogger().debug( "Reading resolution-state from: " + touchfile );
+                props.load( in );
 
-                    return props;
-                }
-                finally
-                {
-                    IOUtil.close( stream );
-                }
+                lock.release();
+                lock = null;
+
+                in.close();
+                in = null;
+
+                return props;
             }
             catch ( IOException e )
             {
@@ -402,11 +389,11 @@ public class DefaultUpdateCheckManager
                     }
                 }
 
-                if ( channel != null )
+                if ( in != null )
                 {
                     try
                     {
-                        channel.close();
+                        in.close();
                     }
                     catch ( IOException e )
                     {
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
index 6fa72ce..8dd6b36 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/DefaultWagonManager.java
@@ -56,17 +56,26 @@ import org.codehaus.plexus.util.FileUtils;
 import org.eclipse.aether.ConfigurationProperties;
 import org.eclipse.aether.util.ConfigUtils;
 
-//TODO: remove the update check manager
-//TODO: separate into retriever and publisher
-//TODO: remove hardcoding of checksum logic
+//TODO remove the update check manager
+//TODO separate into retriever and publisher
+//TODO remove hardcoding of checksum logic
 @Component( role = WagonManager.class )
 public class DefaultWagonManager
     implements WagonManager
 {
-    private static final String[] CHECKSUM_IDS = { "md5", "sha1" };
 
-    /** have to match the CHECKSUM_IDS */
-    private static final String[] CHECKSUM_ALGORITHMS = { "MD5", "SHA-1" };
+    private static final String[] CHECKSUM_IDS =
+    {
+        "md5", "sha1"
+    };
+
+    /**
+     * have to match the CHECKSUM_IDS
+     */
+    private static final String[] CHECKSUM_ALGORITHMS =
+    {
+        "MD5", "SHA-1"
+    };
 
     @Requirement
     private Logger logger;
@@ -80,7 +89,6 @@ public class DefaultWagonManager
     @Requirement
     private LegacySupport legacySupport;
 
-
     //
     // Retriever
     //
@@ -96,14 +104,15 @@ public class DefaultWagonManager
         if ( !policy.isEnabled() )
         {
             logger.debug( "Skipping disabled repository " + repository.getId() + " for resolution of "
-                + artifact.getId() );
+                              + artifact.getId() );
+
         }
         else if ( artifact.isSnapshot() || !artifact.getFile().exists() )
         {
             if ( force || updateCheckManager.isUpdateRequired( artifact, repository ) )
             {
                 logger.debug( "Trying repository " + repository.getId() + " for resolution of " + artifact.getId()
-                    + " from " + remotePath );
+                                  + " from " + remotePath );
 
                 try
                 {
@@ -133,17 +142,21 @@ public class DefaultWagonManager
                 String error = updateCheckManager.getError( artifact, repository );
                 if ( error != null )
                 {
-                    throw new TransferFailedException( "Failure to resolve " + remotePath + " from "
-                        + repository.getUrl() + " was cached in the local repository. "
-                        + "Resolution will not be reattempted until the update interval of " + repository.getId()
-                        + " has elapsed or updates are forced. Original error: " + error );
+                    throw new TransferFailedException(
+                        "Failure to resolve " + remotePath + " from " + repository.getUrl()
+                            + " was cached in the local repository. "
+                            + "Resolution will not be reattempted until the update interval of "
+                            + repository.getId() + " has elapsed or updates are forced. Original error: " + error );
+
                 }
                 else
                 {
-                    throw new ResourceDoesNotExistException( "Failure to resolve " + remotePath + " from "
-                        + repository.getUrl() + " was cached in the local repository. "
-                        + "Resolution will not be reattempted until the update interval of " + repository.getId()
-                        + " has elapsed or updates are forced." );
+                    throw new ResourceDoesNotExistException(
+                        "Failure to resolve " + remotePath + " from " + repository.getUrl()
+                            + " was cached in the local repository. "
+                            + "Resolution will not be reattempted until the update interval of "
+                            + repository.getId() + " has elapsed or updates are forced." );
+
                 }
             }
         }
@@ -174,7 +187,8 @@ public class DefaultWagonManager
                 // because we want to cycle through them all before squawking.
 
                 logger.debug( "Unable to find artifact " + artifact.getId() + " in repository " + repository.getId()
-                    + " (" + repository.getUrl() + ")", e );
+                                  + " (" + repository.getUrl() + ")", e );
+
             }
             catch ( TransferFailedException e )
             {
@@ -183,6 +197,7 @@ public class DefaultWagonManager
                 String msg =
                     "Unable to get artifact " + artifact.getId() + " from repository " + repository.getId() + " ("
                         + repository.getUrl() + "): " + e.getMessage();
+
                 if ( logger.isDebugEnabled() )
                 {
                     logger.warn( msg, e );
@@ -233,6 +248,7 @@ public class DefaultWagonManager
      *
      * @param wagon
      * @param repository
+     *
      * @throws ConnectionException
      * @throws AuthenticationException
      */
@@ -241,13 +257,15 @@ public class DefaultWagonManager
     {
         // MNG-5509
         // See org.eclipse.aether.connector.wagon.WagonRepositoryConnector.connectWagon(Wagon)
-        if( legacySupport.getRepositorySession() != null )
+        if ( legacySupport.getRepositorySession() != null )
         {
-            String userAgent = ConfigUtils.getString( legacySupport.getRepositorySession(), null, ConfigurationProperties.USER_AGENT );
-            if( userAgent == null)
+            String userAgent = ConfigUtils.getString( legacySupport.getRepositorySession(), null,
+                                                      ConfigurationProperties.USER_AGENT );
+
+            if ( userAgent == null )
             {
                 Properties headers = new Properties();
-                    
+
                 headers.put( "User-Agent", ConfigUtils.getString( legacySupport.getRepositorySession(), "Maven",
                                                                   ConfigurationProperties.USER_AGENT ) );
                 try
@@ -269,18 +287,21 @@ public class DefaultWagonManager
         if ( repository.getProxy() != null && logger.isDebugEnabled() )
         {
             logger.debug( "Using proxy " + repository.getProxy().getHost() + ":" + repository.getProxy().getPort()
-                + " for " + repository.getUrl() );
+                              + " for " + repository.getUrl() );
+
         }
 
         if ( repository.getAuthentication() != null && repository.getProxy() != null )
         {
             wagon.connect( new Repository( repository.getId(), repository.getUrl() ), authenticationInfo( repository ),
                            proxyInfo( repository ) );
+
         }
         else if ( repository.getAuthentication() != null )
         {
             wagon.connect( new Repository( repository.getId(), repository.getUrl() ),
                            authenticationInfo( repository ) );
+
         }
         else if ( repository.getProxy() != null )
         {
@@ -357,7 +378,7 @@ public class DefaultWagonManager
                 ChecksumObserver sha1ChecksumObserver = null;
                 try
                 {
-                    // TODO: configure on repository
+                    // TODO configure on repository
                     int i = 0;
 
                     md5ChecksumObserver = addChecksumObserver( wagon, CHECKSUM_ALGORITHMS[i++] );
@@ -414,10 +435,10 @@ public class DefaultWagonManager
                     }
                     catch ( ChecksumFailedException e )
                     {
-                        // if we catch a ChecksumFailedException, it means the transfer/read succeeded, but the checksum
-                        // doesn't match. This could be a problem with the server (ibiblio HTTP-200 error page), so we'll
-                        // try this up to two times. On the second try, we'll handle it as a bona-fide error, based on the
-                        // repository's checksum checking policy.
+                        // if we catch a ChecksumFailedException, it means the transfer/read succeeded, but the 
+                        // checksum doesn't match. This could be a problem with the server (ibiblio HTTP-200 error
+                        // page), so we'll try this up to two times. On the second try, we'll handle it as a bona-fide
+                        // error, based on the repository's checksum checking policy.
                         if ( firstRun )
                         {
                             logger.warn( "*** CHECKSUM FAILED - " + e.getMessage() + " - RETRYING" );
@@ -507,7 +528,6 @@ public class DefaultWagonManager
             // File.renameTo operation doesn't really work across file systems.
             // So we will attempt to do a File.renameTo for efficiency and atomicity, if this fails
             // then we will use a brute force copy and delete the temporary file.
-
             if ( !temp.renameTo( destination ) )
             {
                 try
@@ -522,7 +542,8 @@ public class DefaultWagonManager
                 catch ( IOException e )
                 {
                     throw new TransferFailedException( "Error copying temporary file to the final destination: "
-                        + e.getMessage(), e );
+                                                           + e.getMessage(), e );
+
                 }
             }
         }
@@ -573,7 +594,7 @@ public class DefaultWagonManager
 
         Map<String, String> sums = new HashMap<>( 2 );
 
-        // TODO: configure these on the repository
+        // TODO configure these on the repository
         for ( int i = 0; i < CHECKSUM_IDS.length; i++ )
         {
             checksums.put( CHECKSUM_IDS[i], addChecksumObserver( wagon, CHECKSUM_ALGORITHMS[i] ) );
@@ -607,7 +628,7 @@ public class DefaultWagonManager
             // We do this in here so we can checksum the artifact metadata too, otherwise it could be metadata itself
             for ( String extension : checksums.keySet() )
             {
-                // TODO: shouldn't need a file intermediatary - improve wagon to take a stream
+                // TODO shouldn't need a file intermediatary - improve wagon to take a stream
                 File temp = File.createTempFile( "maven-artifact", null );
                 temp.deleteOnExit();
                 FileUtils.fileWrite( temp.getAbsolutePath(), "UTF-8", sums.get( extension ) );
@@ -642,9 +663,9 @@ public class DefaultWagonManager
             cleanupTemporaryFiles( temporaryFiles );
 
             // Remove every checksum listener
-            for ( String aCHECKSUM_IDS : CHECKSUM_IDS )
+            for ( String id : CHECKSUM_IDS )
             {
-                TransferListener checksumListener = checksums.get( aCHECKSUM_IDS );
+                TransferListener checksumListener = checksums.get( id );
                 if ( checksumListener != null )
                 {
                     wagon.removeTransferListener( checksumListener );
@@ -721,7 +742,7 @@ public class DefaultWagonManager
 
             // check for 'ALGO (name) = CHECKSUM' like used by openssl
             if ( expectedChecksum.regionMatches( true, 0, "MD", 0, 2 )
-                || expectedChecksum.regionMatches( true, 0, "SHA", 0, 3 ) )
+                     || expectedChecksum.regionMatches( true, 0, "SHA", 0, 3 ) )
             {
                 int lastSpacePos = expectedChecksum.lastIndexOf( ' ' );
                 expectedChecksum = expectedChecksum.substring( lastSpacePos + 1 );
@@ -752,7 +773,8 @@ public class DefaultWagonManager
             else
             {
                 throw new ChecksumFailedException( "Checksum failed on download: local = '" + actualChecksum
-                    + "'; remote = '" + expectedChecksum + "'" );
+                                                       + "'; remote = '" + expectedChecksum + "'" );
+
             }
         }
         catch ( IOException e )
@@ -814,7 +836,8 @@ public class DefaultWagonManager
         catch ( ComponentLookupException e )
         {
             throw new UnsupportedProtocolException( "Cannot find wagon which supports the requested protocol: "
-                + protocol, e );
+                                                        + protocol, e );
+
         }
 
         return wagon;
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
index 866968b..8d4d407 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/LegacyRepositorySystem.java
@@ -144,6 +144,9 @@ public class LegacyRepositorySystem
         }
         catch ( InvalidVersionSpecificationException e )
         {
+            // MNG-5368: Log a message instead of returning 'null' silently.
+            this.logger.error( String.format( "Invalid version specification '%s' creating dependency artifact '%s'.",
+                                              d.getVersion(), d ), e );
             return null;
         }
 
@@ -180,6 +183,11 @@ public class LegacyRepositorySystem
         }
         catch ( InvalidVersionSpecificationException e )
         {
+            // MNG-5368: Log a message instead of returning 'null' silently.
+            this.logger.error( String.format(
+                "Invalid version specification '%s' creating extension artifact '%s:%s:%s'.",
+                version, groupId, artifactId, version, e ) );
+
             return null;
         }
 
@@ -193,18 +201,24 @@ public class LegacyRepositorySystem
 
     public Artifact createPluginArtifact( Plugin plugin )
     {
+        String version = plugin.getVersion();
+        if ( StringUtils.isEmpty( version ) )
+        {
+            version = "RELEASE";
+        }
+
         VersionRange versionRange;
         try
         {
-            String version = plugin.getVersion();
-            if ( StringUtils.isEmpty( version ) )
-            {
-                version = "RELEASE";
-            }
             versionRange = VersionRange.createFromVersionSpec( version );
         }
         catch ( InvalidVersionSpecificationException e )
         {
+            // MNG-5368: Log a message instead of returning 'null' silently.
+            this.logger.error( String.format(
+                "Invalid version specification '%s' creating plugin artifact '%s'.",
+                version, plugin, e ) );
+
             return null;
         }
 
@@ -315,7 +329,7 @@ public class LegacyRepositorySystem
                 DelegatingLocalArtifactRepository delegatingLocalRepository =
                     (DelegatingLocalArtifactRepository) request.getLocalRepository();
 
-                LocalArtifactRepository orig = delegatingLocalRepository.getIdeWorspace();
+                LocalArtifactRepository orig = delegatingLocalRepository.getIdeWorkspace();
 
                 delegatingLocalRepository.setIdeWorkspace( ideWorkspace );
 
@@ -353,22 +367,21 @@ public class LegacyRepositorySystem
         return artifactResolver.resolve( request );
     }
 
-    /*
-    public void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts )
-    {
-        ProxyInfo proxyInfo = new ProxyInfo();
-        proxyInfo.setHost( host );
-        proxyInfo.setType( protocol );
-        proxyInfo.setPort( port );
-        proxyInfo.setNonProxyHosts( nonProxyHosts );
-        proxyInfo.setUserName( username );
-        proxyInfo.setPassword( password );
-
-        proxies.put( protocol, proxyInfo );
-
-        wagonManager.addProxy( protocol, host, port, username, password, nonProxyHosts );
-    }
-    */
+//    public void addProxy( String protocol, String host, int port, String username, String password,
+//                          String nonProxyHosts )
+//    {
+//        ProxyInfo proxyInfo = new ProxyInfo();
+//        proxyInfo.setHost( host );
+//        proxyInfo.setType( protocol );
+//        proxyInfo.setPort( port );
+//        proxyInfo.setNonProxyHosts( nonProxyHosts );
+//        proxyInfo.setUserName( username );
+//        proxyInfo.setPassword( password );
+//
+//        proxies.put( protocol, proxyInfo );
+//
+//        wagonManager.addProxy( protocol, host, port, username, password, nonProxyHosts );
+//    }
 
     public List<ArtifactRepository> getEffectiveRepositories( List<ArtifactRepository> repositories )
     {
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java
index 73ead26..35fcf42 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/WagonManager.java
@@ -45,7 +45,8 @@ public interface WagonManager
     //
     // Retriever
     //
-    void getArtifact( Artifact artifact, ArtifactRepository repository, TransferListener transferListener, boolean force )
+    void getArtifact( Artifact artifact, ArtifactRepository repository, TransferListener transferListener,
+                      boolean force )
         throws TransferFailedException, ResourceDoesNotExistException;
 
     void getArtifact( Artifact artifact, List<ArtifactRepository> remoteRepositories,
@@ -71,7 +72,8 @@ public interface WagonManager
                       TransferListener downloadMonitor )
         throws TransferFailedException;
 
-    void putRemoteFile( ArtifactRepository repository, File source, String remotePath, TransferListener downloadMonitor )
+    void putRemoteFile( ArtifactRepository repository, File source, String remotePath,
+                        TransferListener downloadMonitor )
         throws TransferFailedException;
 
     void putArtifactMetadata( File source, ArtifactMetadata artifactMetadata, ArtifactRepository repository )
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java
index b982f91..aeb5739 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/ArtifactRepositoryFactory.java
@@ -37,7 +37,8 @@ public interface ArtifactRepositoryFactory
         throws UnknownRepositoryLayoutException;
 
     @Deprecated
-    ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId, boolean uniqueVersion )
+    ArtifactRepository createDeploymentArtifactRepository( String id, String url, String layoutId,
+                                                           boolean uniqueVersion )
         throws UnknownRepositoryLayoutException;
 
     ArtifactRepository createDeploymentArtifactRepository( String id, String url, ArtifactRepositoryLayout layout,
@@ -48,7 +49,8 @@ public interface ArtifactRepositoryFactory
         throws UnknownRepositoryLayoutException;
 
     ArtifactRepository createArtifactRepository( String id, String url, ArtifactRepositoryLayout repositoryLayout,
-                                                 ArtifactRepositoryPolicy snapshots, ArtifactRepositoryPolicy releases );
+                                                 ArtifactRepositoryPolicy snapshots,
+                                                 ArtifactRepositoryPolicy releases );
 
     void setGlobalUpdatePolicy( String snapshotPolicy );
 
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java
index 4bc9116..fc6b441 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/repository/DefaultArtifactRepositoryFactory.java
@@ -37,7 +37,7 @@ import org.codehaus.plexus.component.annotations.Requirement;
 public class DefaultArtifactRepositoryFactory
     implements ArtifactRepositoryFactory
 {
-    // TODO: use settings?
+    // TODO use settings?
     private String globalUpdatePolicy;
 
     private String globalChecksumPolicy;
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
index 77fc705..c3603a6 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/DefaultLegacyArtifactCollector.java
@@ -63,6 +63,7 @@ import org.codehaus.plexus.logging.Logger;
 public class DefaultLegacyArtifactCollector
     implements LegacyArtifactCollector
 {
+
     @Requirement( hint = "nearest" )
     private ConflictResolver defaultConflictResolver;
 
@@ -102,7 +103,8 @@ public class DefaultLegacyArtifactCollector
     }
 
     public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
-                                             Map<String, Artifact> managedVersions, ArtifactResolutionRequest repositoryRequest,
+                                             Map<String, Artifact> managedVersions,
+                                             ArtifactResolutionRequest repositoryRequest,
                                              ArtifactMetadataSource source, ArtifactFilter filter,
                                              List<ResolutionListener> listeners,
                                              List<ConflictResolver> conflictResolvers )
@@ -206,7 +208,8 @@ public class DefaultLegacyArtifactCollector
      * @param originatingArtifact artifact we are processing
      * @param managedVersions original managed versions
      */
-    private ManagedVersionMap getManagedVersionsMap( Artifact originatingArtifact, Map<String,Artifact> managedVersions )
+    private ManagedVersionMap getManagedVersionsMap( Artifact originatingArtifact,
+                                                     Map<String, Artifact> managedVersions )
     {
         ManagedVersionMap versionMap;
         if ( ( managedVersions != null ) && ( managedVersions instanceof ManagedVersionMap ) )
@@ -218,7 +221,7 @@ public class DefaultLegacyArtifactCollector
             versionMap = new ManagedVersionMap( managedVersions );
         }
 
-        /* remove the originating artifact if it is also in managed versions to avoid being modified during resolution */
+        // remove the originating artifact if it is also in managed versions to avoid being modified during resolution
         Artifact managedOriginatingArtifact = versionMap.get( originatingArtifact.getDependencyConflictId() );
 
         if ( managedOriginatingArtifact != null )
@@ -246,7 +249,7 @@ public class DefaultLegacyArtifactCollector
 
         Object key = node.getKey();
 
-        // TODO: Does this check need to happen here? Had to add the same call
+        // TODO Does this check need to happen here? Had to add the same call
         // below when we iterate on child nodes -- will that suffice?
         if ( managedVersions.containsKey( key ) )
         {
@@ -269,11 +272,11 @@ public class DefaultLegacyArtifactCollector
 
                         if ( ( previousRange != null ) && ( currentRange != null ) )
                         {
-                            // TODO: shouldn't need to double up on this work, only done for simplicity of handling
+                            // TODO shouldn't need to double up on this work, only done for simplicity of handling
                             // recommended
                             // version but the restriction is identical
                             VersionRange newRange = previousRange.restrict( currentRange );
-                            // TODO: ick. this forces the OCE that should have come from the previous call. It is still
+                            // TODO ick. this forces the OCE that should have come from the previous call. It is still
                             // correct
                             if ( newRange.isSelectedVersionKnown( previous.getArtifact() ) )
                             {
@@ -286,7 +289,10 @@ public class DefaultLegacyArtifactCollector
                             // Select an appropriate available version from the (now restricted) range
                             // Note this version was selected before to get the appropriate POM
                             // But it was reset by the call to setVersionRange on restricting the version
-                            ResolutionNode[] resetNodes = { previous, node };
+                            ResolutionNode[] resetNodes =
+                            {
+                                previous, node
+                            };
                             for ( int j = 0; j < 2; j++ )
                             {
                                 Artifact resetArtifact = resetNodes[j].getArtifact();
@@ -306,6 +312,7 @@ public class DefaultLegacyArtifactCollector
                                         {
                                             MetadataResolutionRequest metadataRequest =
                                                 new DefaultMetadataResolutionRequest( request );
+
                                             metadataRequest.setArtifact( resetArtifact );
                                             versions = source.retrieveAvailableVersions( metadataRequest );
                                             resetArtifact.setAvailableVersions( versions );
@@ -314,25 +321,29 @@ public class DefaultLegacyArtifactCollector
                                         {
                                             resetArtifact.setDependencyTrail( node.getDependencyTrail() );
                                             throw new ArtifactResolutionException(
-                                                                                   "Unable to get dependency information: "
-                                                                                       + e.getMessage(), resetArtifact,
-                                                                                   request.getRemoteRepositories(), e );
+                                                "Unable to get dependency information: "
+                                                    + e.getMessage(), resetArtifact, request.getRemoteRepositories(),
+                                                e );
+
                                         }
                                     }
                                     // end hack
 
                                     // MNG-2861: match version can return null
-                                    ArtifactVersion selectedVersion =
-                                        resetArtifact.getVersionRange().matchVersion( resetArtifact.getAvailableVersions() );
+                                    ArtifactVersion selectedVersion = resetArtifact.getVersionRange().
+                                        matchVersion( resetArtifact.getAvailableVersions() );
+
                                     if ( selectedVersion != null )
                                     {
                                         resetArtifact.selectVersion( selectedVersion.toString() );
                                     }
                                     else
                                     {
-                                        throw new OverConstrainedVersionException( " Unable to find a version in "
-                                            + resetArtifact.getAvailableVersions() + " to match the range "
-                                            + resetArtifact.getVersionRange(), resetArtifact );
+                                        throw new OverConstrainedVersionException(
+                                            "Unable to find a version in " + resetArtifact.getAvailableVersions()
+                                                + " to match the range " + resetArtifact.getVersionRange(),
+                                            resetArtifact );
+
                                     }
 
                                     fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, resetNodes[j] );
@@ -342,7 +353,8 @@ public class DefaultLegacyArtifactCollector
 
                         // Conflict Resolution
                         ResolutionNode resolved = null;
-                        for ( Iterator<ConflictResolver> j = conflictResolvers.iterator(); ( resolved == null ) && j.hasNext(); )
+                        for ( Iterator<ConflictResolver> j = conflictResolvers.iterator();
+                              resolved == null && j.hasNext(); )
                         {
                             ConflictResolver conflictResolver = j.next();
 
@@ -351,23 +363,26 @@ public class DefaultLegacyArtifactCollector
 
                         if ( resolved == null )
                         {
-                            // TODO: add better exception that can detail the two conflicting artifacts
+                            // TODO add better exception that can detail the two conflicting artifacts
                             ArtifactResolutionException are =
                                 new ArtifactResolutionException( "Cannot resolve artifact version conflict between "
-                                    + previous.getArtifact().getVersion() + " and " + node.getArtifact().getVersion(),
+                                                                     + previous.getArtifact().getVersion() + " and "
+                                                                     + node.getArtifact().getVersion(),
                                                                  previous.getArtifact() );
+
                             result.addVersionRangeViolation( are );
                         }
 
                         if ( ( resolved != previous ) && ( resolved != node ) )
                         {
-                            // TODO: add better exception
+                            // TODO add better exception
                             result.addVersionRangeViolation( new ArtifactResolutionException(
-                                                                                              "Conflict resolver returned unknown resolution node: ",
-                                                                                              resolved.getArtifact() ) );
+                                "Conflict resolver returned unknown resolution node: ",
+                                resolved.getArtifact() ) );
+
                         }
 
-                        // TODO: should this be part of mediation?
+                        // TODO should this be part of mediation?
                         // previous one is more dominant
                         ResolutionNode nearest;
                         ResolutionNode farthest;
@@ -462,7 +477,7 @@ public class DefaultLegacyArtifactCollector
                                     manageArtifact( child, managedVersions, listeners );
 
                                     // Also, we need to ensure that any exclusions it presents are
-                                    // added to the artifact before we retrive the metadata
+                                    // added to the artifact before we retrieve the metadata
                                     // for the artifact; otherwise we may end up with unwanted
                                     // dependencies.
                                     Artifact ma = managedVersions.get( childKey );
@@ -486,7 +501,7 @@ public class DefaultLegacyArtifactCollector
                                 if ( artifact.getVersion() == null )
                                 {
                                     // set the recommended version
-                                    // TODO: maybe its better to just pass the range through to retrieval and use a
+                                    // TODO maybe its better to just pass the range through to retrieval and use a
                                     // transformation?
                                     ArtifactVersion version;
                                     if ( !artifact.isSelectedVersionKnown() )
@@ -509,15 +524,16 @@ public class DefaultLegacyArtifactCollector
                                             if ( versions.isEmpty() )
                                             {
                                                 throw new OverConstrainedVersionException(
-                                                                                           "No versions are present in the repository for the artifact with a range "
-                                                                                               + versionRange,
-                                                                                           artifact,
-                                                                                           childRemoteRepositories );
+                                                    "No versions are present in the repository for the artifact"
+                                                        + " with a range " + versionRange, artifact,
+                                                    childRemoteRepositories );
+
                                             }
 
-                                            throw new OverConstrainedVersionException( "Couldn't find a version in "
-                                                + versions + " to match range " + versionRange, artifact,
-                                                childRemoteRepositories );
+                                            throw new OverConstrainedVersionException(
+                                                "Couldn't find a version in " + versions + " to match range "
+                                                    + versionRange, artifact, childRemoteRepositories );
+
                                         }
                                     }
                                     else
@@ -536,10 +552,10 @@ public class DefaultLegacyArtifactCollector
                                     break;
                                 }
                             }
-                            while( !childKey.equals( child.getKey() ) );
+                            while ( !childKey.equals( child.getKey() ) );
 
                             if ( parentArtifact != null && parentArtifact.getDependencyFilter() != null
-                                && !parentArtifact.getDependencyFilter().include( artifact ) )
+                                     && !parentArtifact.getDependencyFilter().include( artifact ) )
                             {
                                 // MNG-3769: the [probably relocated] artifact is excluded.
                                 // We could process exclusions on relocated artifact details in the
@@ -574,7 +590,9 @@ public class DefaultLegacyArtifactCollector
                             artifact.setDependencyTrail( node.getDependencyTrail() );
 
                             throw new ArtifactResolutionException( "Unable to get dependency information for "
-                                + artifact.getId() + ": " + e.getMessage(), artifact, childRemoteRepositories, e );
+                                                                       + artifact.getId() + ": " + e.getMessage(),
+                                                                   artifact, childRemoteRepositories, e );
+
                         }
 
                         ArtifactResolutionRequest subRequest = new ArtifactResolutionRequest( metadataRequest );
@@ -583,6 +601,7 @@ public class DefaultLegacyArtifactCollector
                         subRequest.setProxies( request.getProxies() );
                         recurse( result, child, resolvedArtifacts, managedVersions, subRequest, source, filter,
                                  listeners, conflictResolvers );
+
                     }
                 }
                 catch ( OverConstrainedVersionException e )
@@ -610,9 +629,8 @@ public class DefaultLegacyArtifactCollector
         // explicit child override depMgmt (viz. depMgmt should only
         // provide defaults to children, but should override transitives).
         // We can do this by calling isChildOfRootNode on the current node.
-
         if ( ( artifact.getVersion() != null )
-            && ( !node.isChildOfRootNode() || node.getArtifact().getVersion() == null ) )
+                 && ( !node.isChildOfRootNode() || node.getArtifact().getVersion() == null ) )
         {
             fireEvent( ResolutionListener.MANAGE_ARTIFACT_VERSION, listeners, node, artifact );
             node.getArtifact().setVersion( artifact.getVersion() );
@@ -625,7 +643,7 @@ public class DefaultLegacyArtifactCollector
         }
 
         if ( Artifact.SCOPE_SYSTEM.equals( node.getArtifact().getScope() ) && ( node.getArtifact().getFile() == null )
-            && ( artifact.getFile() != null ) )
+                 && ( artifact.getFile() != null ) )
         {
             fireEvent( ResolutionListener.MANAGE_ARTIFACT_SYSTEM_PATH, listeners, node, artifact );
             node.getArtifact().setFile( artifact.getFile() );
@@ -648,15 +666,15 @@ public class DefaultLegacyArtifactCollector
 
         /* farthest is runtime and nearest has lower priority, change to runtime */
         if ( Artifact.SCOPE_RUNTIME.equals( farthestArtifact.getScope() )
-            && ( Artifact.SCOPE_TEST.equals( nearestArtifact.getScope() )
-                            || Artifact.SCOPE_PROVIDED.equals( nearestArtifact.getScope() ) ) )
+                 && ( Artifact.SCOPE_TEST.equals( nearestArtifact.getScope() )
+                      || Artifact.SCOPE_PROVIDED.equals( nearestArtifact.getScope() ) ) )
         {
             updateScope = true;
         }
 
         /* farthest is compile and nearest is not (has lower priority), change to compile */
         if ( Artifact.SCOPE_COMPILE.equals( farthestArtifact.getScope() )
-            && !Artifact.SCOPE_COMPILE.equals( nearestArtifact.getScope() ) )
+                 && !Artifact.SCOPE_COMPILE.equals( nearestArtifact.getScope() ) )
         {
             updateScope = true;
         }
@@ -673,7 +691,7 @@ public class DefaultLegacyArtifactCollector
         {
             fireEvent( ResolutionListener.UPDATE_SCOPE, listeners, nearest, farthestArtifact );
 
-            // previously we cloned the artifact, but it is more effecient to just update the artifactScope
+            // previously we cloned the artifact, but it is more efficient to just update the artifactScope
             // if problems are later discovered that the original object needs its original artifactScope value, 
             // cloning may
             // again be appropriate
@@ -762,7 +780,7 @@ public class DefaultLegacyArtifactCollector
                     break;
                 case ResolutionListener.RESTRICT_RANGE:
                     if ( node.getArtifact().getVersionRange().hasRestrictions()
-                        || replacement.getVersionRange().hasRestrictions() )
+                             || replacement.getVersionRange().hasRestrictions() )
                     {
                         listener.restrictRange( node.getArtifact(), replacement, newRange );
                     }
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java
index 133bd58..4045258 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/LegacyArtifactCollector.java
@@ -42,19 +42,22 @@ import org.apache.maven.repository.legacy.resolver.conflict.ConflictResolver;
 public interface LegacyArtifactCollector
 {
 
-    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map<String, Artifact> managedVersions,
+    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+                                      Map<String, Artifact> managedVersions,
                                       ArtifactResolutionRequest repositoryRequest, ArtifactMetadataSource source,
                                       ArtifactFilter filter, List<ResolutionListener> listeners,
                                       List<ConflictResolver> conflictResolvers );
 
-    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map<String, Artifact> managedVersions,
+    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+                                      Map<String, Artifact> managedVersions,
                                       ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
                                       ArtifactMetadataSource source, ArtifactFilter filter,
                                       List<ResolutionListener> listeners, List<ConflictResolver> conflictResolvers );
 
     // used by maven-dependency-tree and maven-dependency-plugin
     @Deprecated
-    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map<String, Artifact> managedVersions,
+    ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+                                      Map<String, Artifact> managedVersions,
                                       ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
                                       ArtifactMetadataSource source, ArtifactFilter filter,
                                       List<ResolutionListener> listeners );
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java
index 66716d1..9192b18 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/DefaultConflictResolverFactory.java
@@ -32,7 +32,7 @@ import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
  * A conflict resolver factory that obtains instances from a plexus container.
  *
  * @author <a href="mailto:markhobson at gmail.com">Mark Hobson</a>
- * @todo you don't need the container in here with the active maps (jvz).
+ * TODO you don't need the container in here with the active maps (jvz).
  * @since 3.0
  */
 @Component( role = ConflictResolverFactory.class )
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java
index 1879a81..e5bf558 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolver.java
@@ -54,7 +54,7 @@ public class NewestConflictResolver
         }
         catch ( OverConstrainedVersionException exception )
         {
-            // TODO: log message or throw exception?
+            // TODO log message or throw exception?
 
             return null;
         }
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java
index 5c5c12d..d5e880c 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolver.java
@@ -54,7 +54,7 @@ public class OldestConflictResolver
         }
         catch ( OverConstrainedVersionException exception )
         {
-            // TODO: log message or throw exception?
+            // TODO log message or throw exception?
 
             return null;
         }
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java
index 3a5c7c6..1ce5458 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/legacy/resolver/transform/AbstractVersionTransformation.java
@@ -42,7 +42,7 @@ import org.codehaus.plexus.logging.AbstractLogEnabled;
  * Describes a version transformation during artifact resolution.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo try and refactor to remove abstract methods - not particular happy about current design
+ * TODO try and refactor to remove abstract methods - not particular happy about current design
  */
 public abstract class AbstractVersionTransformation
     extends AbstractLogEnabled
@@ -105,8 +105,8 @@ public abstract class AbstractVersionTransformation
             version = artifact.getBaseVersion();
         }
 
-        // TODO: also do this logging for other metadata?
-        // TODO: figure out way to avoid duplicated message
+        // TODO also do this logging for other metadata?
+        // TODO figure out way to avoid duplicated message
         if ( getLogger().isDebugEnabled() )
         {
             if ( !version.equals( artifact.getBaseVersion() ) )
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java
index 3f13888..1ae008a 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraph.java
@@ -103,8 +103,9 @@ public class MetadataGraph
      * construct graph from a "dirty" tree
      *
      * @param tree "dirty" tree root
-     * @param versionedVertices true if graph nodes should be versioned (different versions -> different nodes)
-     * @param scopedVertices true if graph nodes should be versioned and scoped (different versions and/or scopes -> different nodes)
+     * @param versionedVertices true if graph nodes should be versioned (different versions -> different nodes)
+     * @param scopedVertices true if graph nodes should be versioned and scoped
+     * (different versions and/or scopes -> different nodes)
      *
      */
     public MetadataGraph( MetadataTreeNode tree, boolean versionedVertices, boolean scopedVertices )
@@ -485,13 +486,13 @@ public class MetadataGraph
         }
         for ( MetadataGraphVertex v : vertices )
         {
-            sb.append( "Vertex:  " ).append( v.getMd().toString() ).append( "\n" );
+            sb.append( "Vertex:  " ).append( v.getMd().toString() ).append( '\n' );
             List<MetadataGraphEdge> ins = getIncidentEdges( v );
             if ( ins != null )
             {
                 for ( MetadataGraphEdge e : ins )
                 {
-                    sb.append( "       from :  " ).append( e.toString() ).append( "\n" );
+                    sb.append( "       from :  " ).append( e.toString() ).append( '\n' );
                 }
             }
             else
@@ -504,7 +505,7 @@ public class MetadataGraph
             {
                 for ( MetadataGraphEdge e : outs )
                 {
-                    sb.append( "        to :  " ).append( e.toString() ).append( "\n" );
+                    sb.append( "        to :  " ).append( e.toString() ).append( '\n' );
                 }
             }
             else
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java
index 5f16df0..5a4c106 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphEdge.java
@@ -88,7 +88,8 @@ public class MetadataGraphEdge
             MetadataGraphEdge e = (MetadataGraphEdge) o;
 
             return objectsEqual( version, e.version )
-                && ArtifactScopeEnum.checkScope( scope ).getScope().equals( ArtifactScopeEnum.checkScope( e.scope ).getScope() )
+                && ArtifactScopeEnum.checkScope( scope ).getScope().
+                    equals( ArtifactScopeEnum.checkScope( e.scope ).getScope() )
                 && depth == e.depth;
         }
         return false;
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java
index 16a34a8..7861b48 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphTransformationException.java
@@ -21,12 +21,12 @@ package org.apache.maven.repository.metadata;
 
 /**
  * @author <a href="oleg at codehaus.org">Oleg Gusakov</a>
- *
  */
 public class MetadataGraphTransformationException
     extends Exception
 {
-	private static final long serialVersionUID = -4029897098314019152L;
+
+    private static final long serialVersionUID = -4029897098314019152L;
 
     public MetadataGraphTransformationException()
     {
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java
index bdccf6a..495d061 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataGraphVertex.java
@@ -31,7 +31,7 @@ public class MetadataGraphVertex
 {
     ArtifactMetadata md;
 
-    // indications to use these in comparrison
+    // indications to use these in comparison
     private boolean compareVersion = false;
     private boolean compareScope   = false;
 
@@ -192,17 +192,17 @@ public class MetadataGraphVertex
             return super.hashCode();
         }
         StringBuilder hashString = new StringBuilder( 128 );
-        hashString.append( md.groupId ).append( "|" );
-        hashString.append( md.artifactId ).append( "|" );
+        hashString.append( md.groupId ).append( '|' );
+        hashString.append( md.artifactId ).append( '|' );
 
         if ( compareVersion )
         {
-            hashString.append( md.version ).append( "|" );
+            hashString.append( md.version ).append( '|' );
         }
 
         if ( compareScope )
         {
-            hashString.append( md.getArtifactScope() ).append( "|" );
+            hashString.append( md.getArtifactScope() ).append( '|' );
         }
 
         return hashString.toString().hashCode();
diff --git a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java
index 1d9e9c4..814b66c 100644
--- a/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java
+++ b/maven-compat/src/main/java/org/apache/maven/repository/metadata/MetadataResolutionResult.java
@@ -119,10 +119,6 @@ public class MetadataResolutionResult
         {
             return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
         }
-        else if ( requestType.equals( MetadataResolutionRequestTypeEnum.classpathRuntime ) )
-        {
-            return conflictResolver.resolveConflicts( getGraph(), ArtifactScopeEnum.test );
-        }
         else if ( requestType.equals( MetadataResolutionRequestTypeEnum.graph ) )
         {
             return getGraph();
diff --git a/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java
index 65bd9cf..b5e606d 100644
--- a/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java
+++ b/maven-compat/src/main/java/org/apache/maven/usability/plugin/ExpressionDocumenter.java
@@ -38,7 +38,10 @@ import java.util.Map;
 public class ExpressionDocumenter
 {
 
-    private static final String[] EXPRESSION_ROOTS = { "project", "settings", "session", "plugin", "rootless" };
+    private static final String[] EXPRESSION_ROOTS =
+    {
+        "project", "settings", "session", "plugin", "rootless"
+    };
 
     private static final String EXPRESSION_DOCO_ROOTPATH = "META-INF/maven/plugin-expressions/";
 
@@ -53,10 +56,10 @@ public class ExpressionDocumenter
 
             ClassLoader docLoader = initializeDocLoader();
 
-            for ( String EXPRESSION_ROOT : EXPRESSION_ROOTS )
+            for ( String root : EXPRESSION_ROOTS )
             {
                 try ( InputStream docStream = docLoader.getResourceAsStream(
-                    EXPRESSION_DOCO_ROOTPATH + EXPRESSION_ROOT + ".paramdoc.xml" ) )
+                    EXPRESSION_DOCO_ROOTPATH + root + ".paramdoc.xml" ) )
                 {
                     if ( docStream != null )
                     {
@@ -68,12 +71,12 @@ public class ExpressionDocumenter
                 catch ( IOException e )
                 {
                     throw new ExpressionDocumentationException(
-                        "Failed to read documentation for expression root: " + EXPRESSION_ROOT, e );
+                        "Failed to read documentation for expression root: " + root, e );
                 }
                 catch ( XmlPullParserException e )
                 {
                     throw new ExpressionDocumentationException(
-                        "Failed to parse documentation for expression root: " + EXPRESSION_ROOT, e );
+                        "Failed to parse documentation for expression root: " + root, e );
                 }
 
             }
@@ -161,7 +164,10 @@ public class ExpressionDocumenter
                 "Cannot construct expression documentation classpath" + " resource base.", e );
         }
 
-        return new URLClassLoader( new URL[]{ docResource } );
+        return new URLClassLoader( new URL[]
+        {
+            docResource
+        } );
     }
 
 }
diff --git a/maven-compat/src/main/mdo/profiles.mdo b/maven-compat/src/main/mdo/profiles.mdo
index 3dcc996..bcaabd2 100644
--- a/maven-compat/src/main/mdo/profiles.mdo
+++ b/maven-compat/src/main/mdo/profiles.mdo
@@ -187,7 +187,7 @@ under the License.
       <version>1.0.0</version>
       <description><![CDATA[
          Repository contains the information needed
-         for establishing connections with remote repoistory
+         for establishing connections with remote repository
       ]]></description>
       <fields>
         <field>
@@ -249,7 +249,7 @@ under the License.
       <superClass>RepositoryBase</superClass>
       <version>1.0.0</version>
       <description>
-        Repository contains the information needed for establishing connections with remote repoistory
+        Repository contains the information needed for establishing connections with remote repository
       </description>
       <fields>
         <field>
diff --git a/maven-aether-provider/src/site/apt/index.apt b/maven-compat/src/site/apt/index.apt
similarity index 66%
copy from maven-aether-provider/src/site/apt/index.apt
copy to maven-compat/src/site/apt/index.apt
index 600ec41..a288cdc 100644
--- a/maven-aether-provider/src/site/apt/index.apt
+++ b/maven-compat/src/site/apt/index.apt
@@ -20,14 +20,13 @@
  -----
  Hervé Boutemy
  -----
- 2012-09-29
+ 2016-05-29
  -----
 
-Maven Aether Provider
+Maven Compat
 
- Maven Aether Provider is an {{{http://www.eclipse.org/aether/}Aether}} extension to support
- Maven POMs and local+remote repositories.
+ Maven2 classes maintained as compatibility layer for plugins that need to keep Maven2 compatibility.
 
- Main component is <<<MavenRepositorySystemUtils>>>
- ({{{./apidocs/org/apache/maven/repository/internal/MavenRepositorySystemUtils.html}javadoc}},
- {{{./xref/org/apache/maven/repository/internal/MavenRepositorySystemUtils.html}source}}).
+ Plugins should avoid these classes and be updated to use only Maven3 dependencies (and require Maven3): see
+ {{{https://cwiki.apache.org/confluence/display/MAVEN/Plugin+migration+to+Maven3+dependencies} Plugin migration to Maven3 dependencies}}
+ documentation to get hints on how to make the update.
diff --git a/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java b/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
index 52fdd80..c919cdf 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
@@ -59,7 +59,7 @@ public class LegacyLocalRepositoryManager
 
         path.append( artifact.getGroupId() ).append( '/' );
 
-        path.append( artifact.getExtension() ).append( 's' ).append( '/' );
+        path.append( artifact.getExtension() ).append( "s/" );
 
         path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
 
diff --git a/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java b/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java
index b2750b9..402ae74 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/ModelUtilsTest.java
@@ -94,15 +94,19 @@ public class ModelUtilsTest
 
     /**
      * Test that this is the resulting ordering of plugins after merging:
-     *
+     * <p>
      * Given:
-     *
-     *   parent: X -> A -> B -> D -> E
-     *   child: Y -> A -> C -> D -> F
-     *
+     * </p>
+     * <pre>
+     *   parent: X -> A -> B -> D -> E
+     *   child: Y -> A -> C -> D -> F
+     * </pre>
+     * <p>
      * Result:
-     *
-     *   X -> Y -> A -> B -> C -> D -> E -> F
+     * </p>
+     * <pre>
+     *   X -> Y -> A -> B -> C -> D -> E -> F
+     * </pre>
      */
     public void testShouldPreserveChildOrderingOfPluginsAfterParentMerge()
     {
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java
index 413d6fe..93358ec 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/AbstractProjectInheritanceTestCase.java
@@ -33,7 +33,7 @@ public abstract class AbstractProjectInheritanceTestCase
     {
         String className = getClass().getPackage().getName();
 
-        return className.substring( className.lastIndexOf( "." ) + 1 );
+        return className.substring( className.lastIndexOf( '.' ) + 1 );
     }
 
     protected File projectFile( String name )
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java
index 8e4f39d..98da0f5 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t00/ProjectInheritanceTest.java
@@ -42,7 +42,7 @@ public class ProjectInheritanceTest
     // p3 inherits from p2
     // p2 inherits from p1
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java
index e6efcc4..1aa749b 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t01/ProjectInheritanceTest.java
@@ -38,7 +38,7 @@ public class ProjectInheritanceTest
     // p3 inherits from p2
     // p2 inherits from p1
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
index 6e9a7a3..2b78343 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t02/ProjectInheritanceTest.java
@@ -49,7 +49,7 @@ public class ProjectInheritanceTest
     // p3 inherits from p2
     // p2 inherits from p1
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
index 73f518e..edb6107 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t03/ProjectInheritanceTest.java
@@ -41,7 +41,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java
index 1bb4ef8..ab775ec 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t04/ProjectInheritanceTest.java
@@ -39,7 +39,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java
index 2773c19..1517157 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t05/ProjectInheritanceTest.java
@@ -37,7 +37,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java
index 1b80dfe..60e3771 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t06/ProjectInheritanceTest.java
@@ -38,7 +38,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java
index d0d013e..b9685e3 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t07/ProjectInheritanceTest.java
@@ -37,7 +37,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java
index 1afb8e8..b0a7873 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t08/ProjectInheritanceTest.java
@@ -38,7 +38,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
index 6a29b73..aa492e4 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t09/ProjectInheritanceTest.java
@@ -36,7 +36,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
@@ -47,14 +47,14 @@ public class ProjectInheritanceTest
     /**
      * How the test project is set up:
      *
-     * 1. dependencyManagement lists dependencies on a & b,
+     * 1. dependencyManagement lists dependencies on a & b,
      *    with an exclusion on c in b.
      * 2. the child project lists a dependency on project a only
      * 3. a depends on b (which is transitive to the child project),
      *    and b depends on c.
      *
      * We should see that the resulting size of collected artifacts is two:
-     * a & b only.
+     * a & b only.
      */
     public void testDependencyManagementExclusionsExcludeTransitively()
         throws Exception
@@ -87,7 +87,7 @@ public class ProjectInheritanceTest
      * now depends upon d, which has a transitive dependency on c.  Even though
      * we did list an exclusion on c, it was only from within the context of
      * project b.  We will pick up project c in this case because no
-     * restrictions were placed on d.  This demonstrates that a, b, c, & d will
+     * restrictions were placed on d.  This demonstrates that a, b, c, & d will
      * all be collected.
      *
      * @throws Exception
@@ -116,4 +116,4 @@ public class ProjectInheritanceTest
         assertTrue( "maven-test:t09-c is not in the project", map.containsKey( "maven-test:t09-c" ) );
         assertTrue( "maven-test:t09-d is not in the project", map.containsKey( "maven-test:t09-d" ) );
     }
-}
\ No newline at end of file
+}
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java
index 9e5137f..c785176 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t10/ProjectInheritanceTest.java
@@ -27,7 +27,7 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
 
 /**
- * Verifies scope inheritence of direct and transitive dependencies.
+ * Verifies scope inheritance of direct and transitive dependencies.
  *
  * Should show three behaviors:
  *
@@ -44,7 +44,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java
index 78b7640..d8a3926 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t11/ProjectInheritanceTest.java
@@ -25,7 +25,7 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.inheritance.AbstractProjectInheritanceTestCase;
 
 /**
- * Verifies scope of root project is preserved regardless of parent depenedency management.
+ * Verifies scope of root project is preserved regardless of parent dependency management.
  *
  * @author <a href="mailto:pschneider at gmail.com">Patrick Schneider</a>
  * @see <a href="https://issues.apache.org/jira/browse/MNG-2919">MNG-2919</a>
@@ -36,7 +36,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java
index 3b08662..7627c13 100644
--- a/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/project/inheritance/t12scm/ProjectInheritanceTest.java
@@ -35,7 +35,7 @@ public class ProjectInheritanceTest
     // ----------------------------------------------------------------------
     //
     // p1 inherits from p0
-    // p0 inhertis from super model
+    // p0 inherits from super model
     //
     // or we can show it graphically as:
     //
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java b/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java
index fb32f0f..4e8cdb0 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/DefaultMirrorSelectorTest.java
@@ -27,7 +27,7 @@ public class DefaultMirrorSelectorTest
     extends PlexusTestCase
 {
 
-    public void testMirrorWithMirroOfPatternContainingANegationIsNotSelected()
+    public void testMirrorWithMirrorOfPatternContainingANegationIsNotSelected()
     {
         ArtifactRepository repository = new DefaultArtifactRepository( "snapshots.repo", "http://whatever", null );
         String pattern = "external:*, !snapshots.repo";
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java b/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java
index 96af590..17dfcfc 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/LegacyRepositorySystemTest.java
@@ -32,6 +32,7 @@ import org.apache.maven.model.Repository;
 import org.apache.maven.model.RepositoryPolicy;
 import org.apache.maven.plugin.LegacySupport;
 import org.apache.maven.repository.RepositorySystem;
+import org.apache.maven.repository.legacy.LegacyRepositorySystem;
 import org.codehaus.plexus.ContainerConfiguration;
 import org.codehaus.plexus.PlexusConstants;
 import org.codehaus.plexus.PlexusTestCase;
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
index b9bcf9b..aa5dd68 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/DefaultWagonManagerTest.java
@@ -138,7 +138,7 @@ public class DefaultWagonManagerTest
 
         try
         {
-            wagonManager.getArtifact( artifact, repo, null, false );
+            wagonManager.getArtifact( artifact, repo, null, true );
 
             fail();
         }
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
index 39084fe..391ec0f 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/DefaultArtifactCollectorTest.java
@@ -166,7 +166,7 @@ public class DefaultArtifactCollectorTest
     public void disabledtestResolveCorrectDependenciesWhenDifferentDependenciesOnNewest()
         throws ArtifactResolutionException, InvalidVersionSpecificationException
     {
-        // TODO: use newest conflict resolver
+        // TODO use newest conflict resolver
         ArtifactSpec a = createArtifactSpec( "a", "1.0" );
         ArtifactSpec b = a.addDependency( "b", "1.0" );
         ArtifactSpec c2 = b.addDependency( "c", "2.0" );
@@ -185,7 +185,7 @@ public class DefaultArtifactCollectorTest
     public void disabledtestResolveCorrectDependenciesWhenDifferentDependenciesOnNewestVersionReplaced()
         throws ArtifactResolutionException, InvalidVersionSpecificationException
     {
-        // TODO: use newest conflict resolver
+        // TODO use newest conflict resolver
         ArtifactSpec a = createArtifactSpec( "a", "1.0" );
         ArtifactSpec b1 = a.addDependency( "b", "1.0" );
         ArtifactSpec c = a.addDependency( "c", "1.0" );
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java
index 5ca3a47..363c7a2 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/FarthestConflictResolverTest.java
@@ -44,7 +44,7 @@ public class FarthestConflictResolverTest
      * Tests that <code>a:2.0</code> wins in the scenario:
      * <pre>
      * a:1.0
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * </pre>
      */
     public void testDepth()
@@ -59,7 +59,7 @@ public class FarthestConflictResolverTest
     /**
      * Tests that <code>a:2.0</code> wins in the scenario:
      * <pre>
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * a:1.0
      * </pre>
      */
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java
index 69d93d2..23683d5 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NearestConflictResolverTest.java
@@ -44,7 +44,7 @@ public class NearestConflictResolverTest
      * Tests that <code>a:1.0</code> wins in the scenario:
      * <pre>
      * a:1.0
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * </pre>
      */
     public void testDepth()
@@ -59,7 +59,7 @@ public class NearestConflictResolverTest
     /**
      * Tests that <code>a:1.0</code> wins in the scenario:
      * <pre>
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * a:1.0
      * </pre>
      */
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java
index c98f1e1..4cfffc6 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/NewestConflictResolverTest.java
@@ -44,7 +44,7 @@ public class NewestConflictResolverTest
      * Tests that <code>a:2.0</code> wins in the scenario:
      * <pre>
      * a:1.0
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * </pre>
      */
     public void testDepth()
@@ -59,7 +59,7 @@ public class NewestConflictResolverTest
     /**
      * Tests that <code>a:2.0</code> wins in the scenario:
      * <pre>
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * a:1.0
      * </pre>
      */
diff --git a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java
index cef78f9..8744de2 100644
--- a/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java
+++ b/maven-compat/src/test/java/org/apache/maven/repository/legacy/resolver/conflict/OldestConflictResolverTest.java
@@ -44,7 +44,7 @@ public class OldestConflictResolverTest
      * Tests that <code>a:1.0</code> wins in the scenario:
      * <pre>
      * a:1.0
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * </pre>
      */
     public void testDepth()
@@ -60,7 +60,7 @@ public class OldestConflictResolverTest
     /**
      * Tests that <code>a:1.0</code> wins in the scenario:
      * <pre>
-     * b:1.0 -> a:2.0
+     * b:1.0 -> a:2.0
      * a:1.0
      * </pre>
      */
diff --git a/maven-core/lifecycle-executor.txt b/maven-core/lifecycle-executor.txt
index 41e98bf..d039036 100644
--- a/maven-core/lifecycle-executor.txt
+++ b/maven-core/lifecycle-executor.txt
@@ -57,7 +57,7 @@ We need this form so that the model builder can make the first pass at merging.
   .
 </plugins>
 
-Once we have the version of the plugins the appropriate call to the plugin manager can be made to get the MojoDescriptor for the goal that needs to be run. In the MojoDescriptor we are interested in the <configuration/> element and <parameters/> element. From these elements we need to make a component configuration for the MojoExecution. The actual DOM like structure we create is of type PlexusConfiguration and is the type we use with the ComponentConfigurator to initialize fields in a P [...]
+Once we have the version of the plugins the appropriate call to the plugin manager can be made to get the MojoDescriptor for the goal that needs to be run. In the MojoDescriptor we are interested in the <configuration/> element and <parameters/> element. From these elements we need to make a component configuration for the MojoExecution. The actual DOM like structure we create is of type PlexusConfiguration and is the type we use with the ComponentConfigurator to initialize fields in a P [...]
 
 foreach configuration element:
  - if read only and being set squawk
diff --git a/maven-core/plugin-manager.txt b/maven-core/plugin-manager.txt
index f3fcf8e..73e79be 100644
--- a/maven-core/plugin-manager.txt
+++ b/maven-core/plugin-manager.txt
@@ -140,7 +140,7 @@ h3. Plugins need a specific metadata model
 Each application will have its own model for plugins. Much of this model will be common across applications but there will always be issues specific to a particular applications’s plugins. Some of the issues that need to be taken into consideration:
 
 * Plugin dependencies
-* Plugin resources like Javascript files or images
+* Plugin resources like JavaScript files or images
 * Configuration metadata and default configuration values
 * Extension points that plugins might expose
 
diff --git a/maven-core/pom.xml b/maven-core/pom.xml
index 531b924..4fb86a3 100644
--- a/maven-core/pom.xml
+++ b/maven-core/pom.xml
@@ -1,14 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -16,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-core</artifactId>
@@ -61,19 +70,27 @@
     </dependency>
     <dependency>
       <groupId>org.apache.maven</groupId>
-      <artifactId>maven-aether-provider</artifactId>
+      <artifactId>maven-resolver-provider</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-impl</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-impl</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-spi</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-api</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-util</artifactId>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-utils</artifactId>
     </dependency>
     <!-- Plexus -->
     <dependency>
@@ -117,7 +134,6 @@
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>1.9.5</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/maven-core/project-builder.txt b/maven-core/project-builder.txt
deleted file mode 100644
index a9aab65..0000000
--- a/maven-core/project-builder.txt
+++ /dev/null
@@ -1 +0,0 @@
-Maven Project Builder and Maven Model Builder
diff --git a/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java b/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java
index 26c4667..faddef4 100644
--- a/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java
+++ b/maven-core/src/main/java/org/apache/maven/AbstractMavenLifecycleParticipant.java
@@ -27,7 +27,7 @@ import org.apache.maven.execution.MavenSession;
  * All callback methods (will) follow beforeXXX/afterXXX naming pattern to
  * indicate at what lifecycle point it is being called.
  *
- * @see <a href="http://maven.apache.org/examples/maven-3-lifecycle-extensions.html">example</a>
+ * @see <a href="https://maven.apache.org/examples/maven-3-lifecycle-extensions.html">example</a>
  * @see <a href="https://issues.apache.org/jira/browse/MNG-4224">MNG-4224</a>
  * @since 3.0-alpha-3
  */
@@ -53,7 +53,7 @@ public abstract class AbstractMavenLifecycleParticipant
      * activate profiles and perform similar tasks that affect MavenProject
      * instance construction.
      */
-    // TODO: This is too early for build extensions, so maybe just remove it?
+    // TODO This is too early for build extensions, so maybe just remove it?
     public void afterSessionStart( MavenSession session )
         throws MavenExecutionException
     {
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java b/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
index 503dcdb..a746846 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultArtifactFilterManager.java
@@ -85,7 +85,7 @@ public class DefaultArtifactFilterManager
     /**
      * Returns the artifact filter for the standard core artifacts.
      *
-     * @see org.apache.maven.ArtifactFilterManager#getExtensionDependencyFilter()
+     * @see org.apache.maven.ArtifactFilterManager#getCoreArtifactFilter()
      */
     public ArtifactFilter getCoreArtifactFilter()
     {
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index da17830..7e46ad0 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -42,6 +42,7 @@ import org.apache.maven.graph.GraphBuilder;
 import org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory;
 import org.apache.maven.lifecycle.internal.ExecutionEventCatapult;
 import org.apache.maven.lifecycle.internal.LifecycleStarter;
+import org.apache.maven.model.Prerequisites;
 import org.apache.maven.model.building.ModelProblem;
 import org.apache.maven.model.building.Result;
 import org.apache.maven.plugin.LegacySupport;
@@ -111,7 +112,7 @@ public class DefaultMaven
         }
         catch ( RuntimeException e )
         {
-            //TODO Hack to make the cycle detection the same for the new graph builder
+            // TODO Hack to make the cycle detection the same for the new graph builder
             if ( e.getCause() instanceof ProjectCycleException )
             {
                 result = addExceptionToResult( new DefaultMavenExecutionResult(), e.getCause() );
@@ -160,7 +161,7 @@ public class DefaultMaven
     //
     @SuppressWarnings( "checkstyle:methodlength" )
     private MavenExecutionResult doExecute( MavenExecutionRequest request )
-    {        
+    {
         request.setStartTime( new Date() );
 
         MavenExecutionResult result = new DefaultMavenExecutionResult();
@@ -203,11 +204,12 @@ public class DefaultMaven
     {
         try
         {
-            for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( Collections
-                .<MavenProject>emptyList() ) )
+            // CHECKSTYLE_OFF: LineLength
+            for ( AbstractMavenLifecycleParticipant listener : getLifecycleParticipants( Collections.<MavenProject>emptyList() ) )
             {
                 listener.afterSessionStart( session );
             }
+            // CHECKSTYLE_ON: LineLength
         }
         catch ( MavenExecutionException e )
         {
@@ -217,12 +219,11 @@ public class DefaultMaven
         eventCatapult.fire( ExecutionEvent.Type.ProjectDiscoveryStarted, session, null );
 
         Result<? extends ProjectDependencyGraph> graphResult = buildGraph( session, result );
-        
+
         if ( graphResult.hasErrors() )
         {
-            return addExceptionToResult( result,
-                                         Iterables.toArray( graphResult.getProblems(), ModelProblem.class )[0]
-                                             .getException() );
+            return addExceptionToResult( result, Iterables.toArray( graphResult.getProblems(),
+                                                                    ModelProblem.class )[0].getException() );
         }
 
         try
@@ -283,14 +284,13 @@ public class DefaultMaven
         // Note that participants may affect the topological order of the projects but it is
         // not expected that a participant will add or remove projects from the session.
         //
-        
+
         graphResult = buildGraph( session, result );
-        
+
         if ( graphResult.hasErrors() )
         {
-            return addExceptionToResult( result,
-                                         Iterables.toArray( graphResult.getProblems(), ModelProblem.class )[0]
-                                             .getException() );
+            return addExceptionToResult( result, Iterables.toArray( graphResult.getProblems(),
+                                                                    ModelProblem.class )[0].getException() );
         }
 
         try
@@ -304,6 +304,8 @@ public class DefaultMaven
 
             result.setProject( session.getTopLevelProject() );
 
+            validatePrerequisitesForNonMavenPluginProjects( session.getProjects() );
+
             lifecycleStarter.execute( session );
 
             validateActivatedProfiles( session.getProjects(), request.getActiveProfiles() );
@@ -346,7 +348,7 @@ public class DefaultMaven
             Thread.currentThread().setContextClassLoader( originalClassLoader );
         }
     }
-    
+
     public RepositorySystemSession newRepositorySession( MavenExecutionRequest request )
     {
         return repositorySessionFactory.newRepositorySession( request );
@@ -369,8 +371,7 @@ public class DefaultMaven
 
     private Collection<AbstractMavenLifecycleParticipant> getLifecycleParticipants( Collection<MavenProject> projects )
     {
-        Collection<AbstractMavenLifecycleParticipant> lifecycleListeners =
-            new LinkedHashSet<>();
+        Collection<AbstractMavenLifecycleParticipant> lifecycleListeners = new LinkedHashSet<>();
 
         ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
         try
@@ -425,6 +426,25 @@ public class DefaultMaven
         return result;
     }
 
+    private void validatePrerequisitesForNonMavenPluginProjects( List<MavenProject> projects )
+    {
+        for ( MavenProject mavenProject : projects )
+        {
+            if ( !"maven-plugin".equals( mavenProject.getPackaging() ) )
+            {
+                Prerequisites prerequisites = mavenProject.getPrerequisites();
+                if ( prerequisites != null && prerequisites.getMaven() != null )
+                {
+                    logger.warn( "The project " + mavenProject.getId() + " uses prerequisites"
+                        + " which is only intended for maven-plugin projects "
+                        + "but not for non maven-plugin projects. "
+                        + "For such purposes you should use the maven-enforcer-plugin. "
+                        + "See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html" );
+                }
+            }
+        }
+    }
+
     private void validateActivatedProfiles( List<MavenProject> projects, List<String> activeProfileIds )
     {
         Collection<String> notActivatedProfileIds = new LinkedHashSet<>( activeProfileIds );
@@ -486,7 +506,7 @@ public class DefaultMaven
         return index;
     }
 
-    private Result<? extends ProjectDependencyGraph> buildGraph( MavenSession session, MavenExecutionResult result ) 
+    private Result<? extends ProjectDependencyGraph> buildGraph( MavenSession session, MavenExecutionResult result )
     {
         Result<? extends ProjectDependencyGraph> graphResult = graphBuilder.build( session );
         for ( ModelProblem problem : graphResult.getProblems() )
@@ -505,13 +525,13 @@ public class DefaultMaven
         {
             ProjectDependencyGraph projectDependencyGraph = graphResult.get();
             session.setProjects( projectDependencyGraph.getSortedProjects() );
-            session.setAllProjects( projectDependencyGraph.getSortedProjects() );
-            session.setProjectDependencyGraph( projectDependencyGraph );                
+            session.setAllProjects( projectDependencyGraph.getAllProjects() );
+            session.setProjectDependencyGraph( projectDependencyGraph );
         }
-        
-        return graphResult;        
+
+        return graphResult;
     }
-    
+
     @Deprecated
     // 5 January 2014
     protected Logger getLogger()
diff --git a/maven-core/src/main/java/org/apache/maven/Maven.java b/maven-core/src/main/java/org/apache/maven/Maven.java
index 8563847..69f9fca 100644
--- a/maven-core/src/main/java/org/apache/maven/Maven.java
+++ b/maven-core/src/main/java/org/apache/maven/Maven.java
@@ -23,7 +23,10 @@ import org.apache.maven.execution.MavenExecutionRequest;
 import org.apache.maven.execution.MavenExecutionResult;
 
 /**
+ * The main Maven execution entry point, which will execute a full Maven execution session.
+ *
  * @author Jason van Zyl
+ * @see org.apache.maven.execution.MavenSession
  */
 public interface Maven
 {
diff --git a/maven-core/src/main/java/org/apache/maven/SessionScoped.java b/maven-core/src/main/java/org/apache/maven/SessionScoped.java
index 63b1eb7..7738938 100644
--- a/maven-core/src/main/java/org/apache/maven/SessionScoped.java
+++ b/maven-core/src/main/java/org/apache/maven/SessionScoped.java
@@ -28,8 +28,8 @@ import java.lang.annotation.Target;
 import com.google.inject.ScopeAnnotation;
 
 /**
- * Indicates that annotated component should be instantiated before session starts and discarded after session execution
- * completes.
+ * Indicates that annotated component should be instantiated before session execution starts
+ * and discarded after session execution completes.
  *
  * @author Jason van Zyl
  * @since 3.2.0
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java b/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java
index b54ba07..9979423 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/DependencyResolutionRequiredException.java
@@ -23,7 +23,7 @@ package org.apache.maven.artifact;
  * Exception that occurs when an artifact file is used, but has not been resolved.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo it may be better for artifact.getFile() to throw it - perhaps it is a runtime exception?
+ * TODO it may be better for artifact.getFile() to throw it - perhaps it is a runtime exception?
  */
 public class DependencyResolutionRequiredException
     extends Exception
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
index 8e45b20..9765c73 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/MavenArtifactRepository.java
@@ -28,7 +28,7 @@ import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.repository.Proxy;
 
-//TODO: completely separate local and remote artifact repositories
+//TODO completely separate local and remote artifact repositories
 public class MavenArtifactRepository
     implements ArtifactRepository
 {
@@ -132,15 +132,15 @@ public class MavenArtifactRepository
 
     public String toString()
     {
-        StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder( 256 );
 
-        sb.append( "      id: " ).append( getId() ).append( "\n" );
-        sb.append( "      url: " ).append( getUrl() ).append( "\n" );
-        sb.append( "   layout: " ).append( layout != null ? layout : "none" ).append( "\n" );
+        sb.append( "      id: " ).append( getId() ).append( '\n' );
+        sb.append( "      url: " ).append( getUrl() ).append( '\n' );
+        sb.append( "   layout: " ).append( layout != null ? layout : "none" ).append( '\n' );
 
         if ( proxy != null )
         {
-            sb.append( "    proxy: " ).append( proxy.getHost() ).append( ":" ).append( proxy.getPort() ).append( "\n" );
+            sb.append( "    proxy: " ).append( proxy.getHost() ).append( ':' ).append( proxy.getPort() ).append( '\n' );
         }
 
         if ( snapshots != null )
@@ -213,14 +213,14 @@ public class MavenArtifactRepository
      * Return the protocol name.
      * <br/>
      * E.g: for input
-     * <code>http://www.codehause.org</code> this method will return <code>http</code>
+     * <code>http://www.codehaus.org</code> this method will return <code>http</code>
      *
      * @param url the url
      * @return the host name
      */
     private static String protocol( final String url )
     {
-        final int pos = url.indexOf( ":" );
+        final int pos = url.indexOf( ':' );
 
         if ( pos == -1 )
         {
@@ -234,7 +234,7 @@ public class MavenArtifactRepository
      *
      * @param url the repository URL
      * @return the basedir of the repository
-     * @todo need to URL decode for spaces?
+     * TODO need to URL decode for spaces?
      */
     private String basedir( String url )
     {
@@ -257,7 +257,7 @@ public class MavenArtifactRepository
                 else
                 {
                     // Now we expect the host
-                    int index = retValue.indexOf( "/" );
+                    int index = retValue.indexOf( '/' );
                     if ( index >= 0 )
                     {
                         retValue = retValue.substring( index + 1 );
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
index 0528417..46c41b9 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java
@@ -181,7 +181,7 @@ public abstract class AbstractRepositoryMetadata
 
     public void merge( org.apache.maven.repository.legacy.metadata.ArtifactMetadata metadata )
     {
-        // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact
+        // TODO not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact
         // replaces?
         AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
         this.metadata.merge( repoMetadata.getMetadata() );
@@ -189,7 +189,7 @@ public abstract class AbstractRepositoryMetadata
 
     public void merge( ArtifactMetadata metadata )
     {
-        // TODO: not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact
+        // TODO not sure that it should assume this, maybe the calls to addMetadata should pre-merge, then artifact
         // replaces?
         AbstractRepositoryMetadata repoMetadata = (AbstractRepositoryMetadata) metadata;
         this.metadata.merge( repoMetadata.getMetadata() );
@@ -197,7 +197,7 @@ public abstract class AbstractRepositoryMetadata
 
     public String extendedToString()
     {
-        StringBuilder buffer = new StringBuilder();
+        StringBuilder buffer = new StringBuilder( 256 );
 
         buffer.append( "\nRepository Metadata\n--------------------------" );
         buffer.append( "\nGroupId: " ).append( getGroupId() );
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
index 22e3ade..d7fe50b 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/RepositoryMetadata.java
@@ -26,7 +26,7 @@ import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
  * Describes repository directory metadata.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo not happy about the store method - they use "this"
+ * TODO not happy about the store method - they use "this"
  */
 public interface RepositoryMetadata
     extends org.apache.maven.artifact.metadata.ArtifactMetadata
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
index c769f89..51a2849 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java
@@ -29,7 +29,6 @@ import org.apache.commons.lang3.Validate;
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -58,19 +57,14 @@ public class DefaultMetadataReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final Reader in = input )
         {
-            MetadataXpp3Reader r = new MetadataXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new MetadataXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new MetadataParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     public Metadata read( InputStream input, Map<String, ?> options )
@@ -78,19 +72,14 @@ public class DefaultMetadataReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final InputStream in = input )
         {
-            MetadataXpp3Reader r = new MetadataXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new MetadataXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new MetadataParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     private boolean isStrict( Map<String, ?> options )
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
index 7795dec..6de04f3 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
@@ -31,13 +31,18 @@ import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 
 /**
  * Specific problems during resolution that we want to account for:
- * <p/>
- * - missing metadata - version range violations - version circular dependencies - missing artifacts
- * - network/transfer errors - file system errors: permissions
+ * <ul>
+ *   <li>missing metadata</li>
+ *   <li>version range violations</li>
+ *   <li>version circular dependencies</li>
+ *   <li>missing artifacts</li>
+ *   <li>network/transfer errors</li>
+ *   <li>file system errors: permissions</li>
+ * </ul>
  *
  * @author Jason van Zyl
- * @TODO carlos: all these possible has*Exceptions and get*Exceptions methods make the clients too
- *       complex requiring a long list of checks, need to create a parent/interfact/encapsulation
+ * TODO carlos: all these possible has*Exceptions and get*Exceptions methods make the clients too
+ *       complex requiring a long list of checks, need to create a parent/interface/encapsulation
  *       for the types of exceptions
  */
 public class ArtifactResolutionResult
@@ -173,9 +178,9 @@ public class ArtifactResolutionResult
     }
 
     /**
-     * @TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
+     * TODO this needs to accept a {@link OverConstrainedVersionException} as returned by
      *       {@link #getVersionRangeViolation(int)} but it's not used like that in
-     *       {@link DefaultLegacyArtifactCollector}
+     *       DefaultLegacyArtifactCollector
      */
     public ArtifactResolutionResult addVersionRangeViolation( Exception e )
     {
@@ -343,14 +348,14 @@ public class ArtifactResolutionResult
         if ( artifacts != null )
         {
             int i = 1;
-            sb.append( "---------" ).append( "\n" );
-            sb.append( artifacts.size() ).append( "\n" );
+            sb.append( "---------\n" );
+            sb.append( artifacts.size() ).append( '\n' );
             for ( Artifact a : artifacts )
             {
-                sb.append( i ).append( " " ).append( a ).append( "\n" );
+                sb.append( i ).append( ' ' ).append( a ).append( '\n' );
                 i++;
             }
-            sb.append( "---------" ).append( "\n" );
+            sb.append( "---------\n" );
         }
 
         return sb.toString();
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
index 5651641..cd824c4 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
@@ -108,7 +108,7 @@ public class ResolutionNode
     }
 
     /**
-     * @return {@link List} < {@link String} > with artifact ids
+     * @return {@link List} < {@link String} > with artifact ids
      * @throws OverConstrainedVersionException
      */
     public List<String> getDependencyTrail()
@@ -198,7 +198,7 @@ public class ResolutionNode
     {
         active = true;
 
-        // TODO: if it was null, we really need to go find them now... or is this taken care of by the ordering?
+        // TODO if it was null, we really need to go find them now... or is this taken care of by the ordering?
         if ( children != null )
         {
             for ( ResolutionNode node : children )
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
index b6ef02e..e448af4 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExcludesArtifactFilter.java
@@ -27,7 +27,7 @@ import org.apache.maven.artifact.Artifact;
  * Filter to exclude from a list of artifact patterns.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo I think this is equiv. to exclusion set filter in maven-core
+ * TODO I think this is equiv. to exclusion set filter in maven-core
  */
 public class ExcludesArtifactFilter
     extends IncludesArtifactFilter
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
index 6ac8884..7a3b6c7 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/IncludesArtifactFilter.java
@@ -49,7 +49,7 @@ public class IncludesArtifactFilter
         boolean matched = false;
         for ( Iterator<String> i = patterns.iterator(); i.hasNext() & !matched; )
         {
-            // TODO: what about wildcards? Just specifying groups? versions?
+            // TODO what about wildcards? Just specifying groups? versions?
             if ( id.equals( i.next() ) )
             {
                 matched = true;
diff --git a/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java b/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java
index 0fdec4f..5ec69f5 100644
--- a/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/configuration/DefaultBeanConfigurationRequest.java
@@ -137,10 +137,10 @@ public class DefaultBeanConfigurationRequest
                     }
                 }
 
-                PluginManagement mngt = build.getPluginManagement();
-                if ( mngt != null )
+                PluginManagement mgmt = build.getPluginManagement();
+                if ( mgmt != null )
                 {
-                    for ( Plugin plugin : mngt.getPlugins() )
+                    for ( Plugin plugin : mgmt.getPlugins() )
                     {
                         if ( groupId.equals( plugin.getGroupId() ) && artifactId.equals( plugin.getArtifactId() ) )
                         {
diff --git a/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java b/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java
index 4284fce..353d4f6 100644
--- a/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java
+++ b/maven-core/src/main/java/org/apache/maven/eventspy/EventSpy.java
@@ -24,7 +24,7 @@ import java.util.Map;
 /**
  * A core extension to monitor Maven's execution. Typically, such an extension gets loaded into Maven by specifying the
  * system property {@code maven.ext.class.path} on the command line. As soon as dependency injection is setup, Maven
- * looks up all implementators of this interface and calls their {@link #init(Context)} method. <em>Note:</em>
+ * looks up all implementers of this interface and calls their {@link #init(Context)} method. <em>Note:</em>
  * Implementors are strongly advised to inherit from {@link AbstractEventSpy} instead of directly implementing this
  * interface.
  * @since 3.0.2
diff --git a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
index 71a6894..089a7db 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
@@ -33,6 +33,7 @@ import org.apache.maven.eventspy.internal.EventSpyDispatcher;
 import org.apache.maven.model.Profile;
 import org.apache.maven.project.DefaultProjectBuildingRequest;
 import org.apache.maven.project.ProjectBuildingRequest;
+import org.apache.maven.properties.internal.SystemProperties;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
@@ -535,8 +536,7 @@ public class DefaultMavenExecutionRequest
     {
         if ( properties != null )
         {
-            this.systemProperties = new Properties();
-            this.systemProperties.putAll( properties );
+            this.systemProperties = SystemProperties.copyProperties( properties );
         }
         else
         {
@@ -1088,7 +1088,7 @@ public class DefaultMavenExecutionRequest
         return pluginArtifactRepositories;
     }
 
-    // TODO: this does not belong here.
+    // TODO this does not belong here.
     @Override
     public ProjectBuildingRequest getProjectBuildingRequest()
     {
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
index 53f84c5..d006a43 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
@@ -356,15 +356,15 @@ public interface MavenExecutionRequest
     MavenExecutionRequest setUserToolchainsFile( File userToolchainsFile );
 
     /**
-     * 
-     * 
+     *
+     *
      * @return the global toolchains file
      * @since 3.3.0
      */
     File getGlobalToolchainsFile();
 
     /**
-     * 
+     *
      * @param globalToolchainsFile the global toolchains file
      * @return this request
      * @since 3.3.0
@@ -388,29 +388,31 @@ public interface MavenExecutionRequest
     MavenExecutionRequest setUseLegacyLocalRepository( boolean useLegacyLocalRepository );
 
     /**
-     * Controls the {@link Builder} used by Maven by specification of the builder's id.
+     * Controls the {@link org.apache.maven.lifecycle.internal.builder.Builder} used by Maven by specification
+     * of the builder's id.
      *
      * @since 3.2.0
      */
     MavenExecutionRequest setBuilderId( String builderId );
 
     /**
-     * Controls the {@link Builder} used by Maven by specification of the builders id.
+     * Controls the {@link org.apache.maven.lifecycle.internal.builder.Builder} used by Maven by specification
+     * of the builders id.
      *
      * @since 3.2.0
      */
     String getBuilderId();
 
     /**
-     * 
-     * @param toolchains all toolchains grouped by type 
-     * @return this request 
+     *
+     * @param toolchains all toolchains grouped by type
+     * @return this request
      * @since 3.3.0
      */
     MavenExecutionRequest setToolchains( Map<String, List<ToolchainModel>> toolchains );
-    
+
     /**
-     * 
+     *
      * @return all toolchains grouped by type, never {@code null}
      * @since 3.3.0
      */
@@ -428,9 +430,9 @@ public interface MavenExecutionRequest
 
     /**
      * @since 3.3.0
-     */    
+     */
     MavenExecutionRequest setEventSpyDispatcher( EventSpyDispatcher eventSpyDispatcher );
-    
+
     /**
      * @since 3.3.0
      */
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
index 864c49a..d69bbba 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
@@ -39,6 +39,8 @@ import org.codehaus.plexus.component.repository.exception.ComponentLookupExcepti
 import org.eclipse.aether.RepositorySystemSession;
 
 /**
+ * A Maven execution session.
+ *
  * @author Jason van Zyl
  */
 public class MavenSession
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java b/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java
index a8d293d..85a58cb 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionEvent.java
@@ -24,13 +24,15 @@ import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
 
 /**
+ * <p>
  * Encapsulates parameters of MojoExecutionListener callback methods and is meant to provide API evolution path should
  * it become necessary to introduce new parameters in the existing callbacks in the future.
+ * </p>
+ * <strong>Note:</strong> This class is part of work in progress and can be changed or removed without notice.
  *
  * @see MojoExecutionListener
  * @see org.apache.maven.execution.scope.WeakMojoExecutionListener
  * @since 3.1.2
- * @provisional This class is part of work in progress and can be changed or removed without notice.
  */
 public class MojoExecutionEvent
 {
diff --git a/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java b/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java
index c2fb7a1..97d6b03 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/MojoExecutionListener.java
@@ -22,11 +22,13 @@ package org.apache.maven.execution;
 import org.apache.maven.plugin.MojoExecutionException;
 
 /**
+ * <p>
  * Extension point that allows build extensions observe and possibly veto mojo executions.
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  *
  * @see org.apache.maven.execution.scope.WeakMojoExecutionListener
  * @since 3.1.2
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
  */
 public interface MojoExecutionListener
 {
diff --git a/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
index 1db277d..bbc8272 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/ProjectDependencyGraph.java
@@ -27,11 +27,21 @@ import org.apache.maven.project.MavenProject;
  * Describes the inter-dependencies between projects in the reactor.
  *
  * @author Benjamin Bentmann
+ * @since 3.0-alpha
  */
 public interface ProjectDependencyGraph
 {
 
     /**
+     * Gets all collected projects.
+     *
+     * @return All collected projects.
+     *
+     * @since 3.5.0
+     */
+    List<MavenProject> getAllProjects();
+
+    /**
      * Gets all projects in their intended build order, i.e. after topologically sorting the projects according to their
      * inter-dependencies.
      *
diff --git a/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java b/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java
index fb71078..96cb226 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionEvent.java
@@ -25,12 +25,14 @@ import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
 
 /**
+ * <p>
  * Encapsulates parameters of ProjectExecutionListener callback methods and is meant to provide API evolution path
  * should it become necessary to introduce new parameters in the existing callbacks in the future.
+ * </p>
+ * <strong>Note:</strong> This class is part of work in progress and can be changed or removed without notice.
  *
  * @see ProjectExecutionListener
  * @since 3.1.2
- * @provisional This class is part of work in progress and can be changed or removed without notice.
  */
 public class ProjectExecutionEvent
 {
diff --git a/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java b/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java
index d7e8918..2797425 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/ProjectExecutionListener.java
@@ -22,12 +22,14 @@ package org.apache.maven.execution;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
 
 /**
+ * <p>
  * Extension point that allows build extensions observe and possibly veto project build execution.
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  *
  * @see ExecutionListener
  * @see MojoExecutionListener
  * @since 3.1.2
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
  */
 public interface ProjectExecutionListener
 {
diff --git a/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java b/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
index 94e7c10..da78de7 100644
--- a/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
+++ b/maven-core/src/main/java/org/apache/maven/execution/scope/WeakMojoExecutionListener.java
@@ -25,12 +25,14 @@ import org.apache.maven.plugin.MojoExecutionException;
 /**
  * Extension point that allows build extensions observe and possibly veto mojo executions.
  * <p>
- * Unlike {@link MojoExecutionListener}, this extension point does not trigger instantiation of the component, hence
- * "weak" class name prefix. Only applies to mojo execution scoped components.
+ * Unlike {@link org.apache.maven.execution.MojoExecutionListener}, this extension point does not
+ * trigger instantiation of the component, hence "weak" class name prefix. Only applies to mojo execution
+ * scoped components.
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  *
  * @see org.apache.maven.execution.MojoExecutionListener
  * @since 3.1.2
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
  */
 public interface WeakMojoExecutionListener
 {
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
index 680d584..2cbea84 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultGraphBuilder.java
@@ -28,12 +28,12 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 
+import com.google.common.collect.Lists;
 import org.apache.maven.DefaultMaven;
 import org.apache.maven.MavenExecutionException;
 import org.apache.maven.ProjectCycleException;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.ProjectDependencyGraph;
 import org.apache.maven.model.Plugin;
@@ -43,6 +43,7 @@ import org.apache.maven.model.building.ModelProblemUtils;
 import org.apache.maven.model.building.ModelSource;
 import org.apache.maven.model.building.Result;
 import org.apache.maven.model.building.UrlModelSource;
+import org.apache.maven.project.DuplicateProjectException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuilder;
 import org.apache.maven.project.ProjectBuildingException;
@@ -54,12 +55,11 @@ import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.dag.CycleDetectedException;
 
-import com.google.common.collect.Lists;
-
 @Component( role = GraphBuilder.class, hint = GraphBuilder.HINT )
 public class DefaultGraphBuilder
     implements GraphBuilder
 {
+
     @Requirement
     private Logger logger;
 
@@ -69,77 +69,68 @@ public class DefaultGraphBuilder
     @Override
     public Result<ProjectDependencyGraph> build( MavenSession session )
     {
-        if ( session.getProjectDependencyGraph() != null )
+        try
         {
-            return dependencyGraph( session, session.getProjects(), false );
-        }
-        
-        List<MavenProject> projects = session.getProjects();
+            Result<ProjectDependencyGraph> result = sessionDependencyGraph( session );
 
-        if ( projects == null )
-        {
-            try
-            {
-                projects = getProjectsForMavenReactor( session );
-            }
-            catch ( ProjectBuildingException e )
+            if ( result == null )
             {
-                return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
+                final List<MavenProject> projects = getProjectsForMavenReactor( session );
+                validateProjects( projects );
+                result = reactorDependencyGraph( session, projects );
             }
 
-            validateProjects( projects );
-
-            return dependencyGraph( session, projects, true );
-        }
-        else
-        {
-            return dependencyGraph( session, projects, false );
+            return result;
         }
-    }
-    
-    private Result<ProjectDependencyGraph> dependencyGraph( MavenSession session, List<MavenProject> projects,
-                                                            boolean applyMakeBehaviour )
-    {
-        MavenExecutionRequest request = session.getRequest();
-
-        ProjectDependencyGraph projectDependencyGraph = null;
-
-        try
+        catch ( final ProjectBuildingException e )
         {
-            projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
-
-            if ( applyMakeBehaviour )
-            {
-                List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
-
-                activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, request );
-                activeProjects = trimExcludedProjects( activeProjects, request );
-                activeProjects = trimResumedProjects( activeProjects, request );
-
-                if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
-                {
-                    projectDependencyGraph =
-                        new FilteredProjectDependencyGraph( projectDependencyGraph, activeProjects );
-                }
-            }
+            return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
         }
-        catch ( CycleDetectedException e )
+        catch ( final CycleDetectedException e )
         {
             String message = "The projects in the reactor contain a cyclic reference: " + e.getMessage();
             ProjectCycleException error = new ProjectCycleException( message, e );
             return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, error ) ) );
         }
-        catch ( org.apache.maven.project.DuplicateProjectException e )
+        catch ( final DuplicateProjectException e )
         {
             return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
         }
-        catch ( MavenExecutionException e )
+        catch ( final MavenExecutionException e )
         {
             return Result.error( Lists.newArrayList( new DefaultModelProblem( null, null, null, null, 0, 0, e ) ) );
         }
+    }
+
+    private Result<ProjectDependencyGraph> sessionDependencyGraph( final MavenSession session )
+        throws CycleDetectedException, DuplicateProjectException
+    {
+        Result<ProjectDependencyGraph> result = null;
+
+        if ( session.getProjectDependencyGraph() != null || session.getProjects() != null )
+        {
+            final ProjectDependencyGraph graph =
+                new DefaultProjectDependencyGraph( session.getAllProjects(), session.getProjects() );
+
+            result = Result.success( graph );
+        }
 
-        session.setProjects( projectDependencyGraph.getSortedProjects() );
-        session.setProjectDependencyGraph( projectDependencyGraph );
+        return result;
+    }
+
+    private Result<ProjectDependencyGraph> reactorDependencyGraph( MavenSession session, List<MavenProject> projects )
+        throws CycleDetectedException, DuplicateProjectException, MavenExecutionException
+    {
+        ProjectDependencyGraph projectDependencyGraph = new DefaultProjectDependencyGraph( projects );
+        List<MavenProject> activeProjects = projectDependencyGraph.getSortedProjects();
+        activeProjects = trimSelectedProjects( activeProjects, projectDependencyGraph, session.getRequest() );
+        activeProjects = trimExcludedProjects( activeProjects, session.getRequest() );
+        activeProjects = trimResumedProjects( activeProjects, session.getRequest() );
+
+        if ( activeProjects.size() != projectDependencyGraph.getSortedProjects().size() )
+        {
+            projectDependencyGraph = new FilteredProjectDependencyGraph( projectDependencyGraph, activeProjects );
+        }
 
         return Result.success( projectDependencyGraph );
     }
@@ -368,16 +359,6 @@ public class DefaultGraphBuilder
         return false;
     }
 
-    private MavenExecutionResult addExceptionToResult( MavenExecutionResult result, Throwable e )
-    {
-        if ( !result.getExceptions().contains( e ) )
-        {
-            result.addException( e );
-        }
-
-        return result;
-    }
-
     // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //
     // Project collection
diff --git a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
index a5233e5..73cadf6 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/DefaultProjectDependencyGraph.java
@@ -21,6 +21,7 @@ package org.apache.maven.graph;
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -43,6 +44,8 @@ public class DefaultProjectDependencyGraph
 
     private ProjectSorter sorter;
 
+    private List<MavenProject> allProjects;
+
     /**
      * Creates a new project dependency graph based on the specified projects.
      *
@@ -53,9 +56,38 @@ public class DefaultProjectDependencyGraph
     public DefaultProjectDependencyGraph( Collection<MavenProject> projects )
         throws CycleDetectedException, DuplicateProjectException
     {
+        super();
+        this.allProjects = Collections.unmodifiableList( new ArrayList<>( projects ) );
+        this.sorter = new ProjectSorter( projects );
+    }
+
+    /**
+     * Creates a new project dependency graph based on the specified projects.
+     *
+     * @param allProjects All collected projects.
+     * @param projects The projects to create the dependency graph with.
+     *
+     * @throws DuplicateProjectException
+     * @throws CycleDetectedException
+     * @since 3.5.0
+     */
+    public DefaultProjectDependencyGraph( final List<MavenProject> allProjects,
+                                          final Collection<MavenProject> projects )
+        throws CycleDetectedException, DuplicateProjectException
+    {
+        super();
+        this.allProjects = Collections.unmodifiableList( new ArrayList<>( allProjects ) );
         this.sorter = new ProjectSorter( projects );
     }
 
+    /**
+     * @since 3.5.0
+     */
+    public List<MavenProject> getAllProjects()
+    {
+        return this.allProjects;
+    }
+
     public List<MavenProject> getSortedProjects()
     {
         return new ArrayList<>( sorter.getSortedProjects() );
diff --git a/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
index 1d9c8db..c4f8e1a 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/FilteredProjectDependencyGraph.java
@@ -64,6 +64,14 @@ class FilteredProjectDependencyGraph
         }
     }
 
+    /**
+     * @since 3.5.0
+     */
+    public List<MavenProject> getAllProjects()
+    {
+        return this.projectDependencyGraph.getAllProjects();
+    }
+
     public List<MavenProject> getSortedProjects()
     {
         if ( sortedProjects == null )
diff --git a/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java b/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java
index fb7c4f2..0f584d9 100644
--- a/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/graph/GraphBuilder.java
@@ -23,6 +23,11 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.ProjectDependencyGraph;
 import org.apache.maven.model.building.Result;
 
+/**
+ * Builds the {@link ProjectDependencyGraph inter-dependencies graph} between projects in the reactor.
+ *
+ * @since 3.0-alpha
+ */
 public interface GraphBuilder
 {
     String HINT = "graphBuilder";
diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index 0c91cf9..248a3b6 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -121,8 +121,10 @@ public class DefaultRepositorySystemSessionFactory
         }
 
         int errorPolicy = 0;
-        errorPolicy |= request.isCacheNotFound() ? ResolutionErrorPolicy.CACHE_NOT_FOUND : 0;
-        errorPolicy |= request.isCacheTransferError() ? ResolutionErrorPolicy.CACHE_TRANSFER_ERROR : 0;
+        errorPolicy |= request.isCacheNotFound() ? ResolutionErrorPolicy.CACHE_NOT_FOUND
+            : ResolutionErrorPolicy.CACHE_DISABLED;
+        errorPolicy |= request.isCacheTransferError() ? ResolutionErrorPolicy.CACHE_TRANSFER_ERROR
+            : ResolutionErrorPolicy.CACHE_DISABLED;
         session.setResolutionErrorPolicy(
             new SimpleResolutionErrorPolicy( errorPolicy, errorPolicy | ResolutionErrorPolicy.CACHE_NOT_FOUND ) );
 
@@ -132,16 +134,16 @@ public class DefaultRepositorySystemSessionFactory
 
         if ( request.isUseLegacyLocalRepository() )
         {
-            logger.warn( "Disabling enhanced local repository: using legacy is strongly discouraged to ensure"
-                             + " build reproducibility." );
             try
             {
                 session.setLocalRepositoryManager( simpleLocalRepoMgrFactory.newInstance( session, localRepo ) );
+                logger.info( "Disabling enhanced local repository: using legacy is strongly discouraged to ensure"
+                                 + " build reproducibility." );
+
             }
             catch ( NoLocalRepositoryManagerException e )
             {
-
-                logger.warn( "Failed to configure legacy local repository: back to default" );
+                logger.error( "Failed to configure legacy local repository: falling back to default" );
                 session.setLocalRepositoryManager( repoSystem.newLocalRepositoryManager( session, localRepo ) );
             }
         }
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
index 6f994b3..dae1894 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
@@ -97,8 +97,8 @@ public class DefaultLifecycleExecutor
     // fully populated Plugin objects, including executions with goals and default configuration taken
     // from the plugin.xml inside a plugin.
     //
-    // TODO: This whole method could probably removed by injecting lifeCyclePluginAnalyzer straight into client site.
-    // TODO: But for some reason the whole plexus appcontext refuses to start when I try this.
+    // TODO This whole method could probably removed by injecting lifeCyclePluginAnalyzer straight into client site.
+    // TODO But for some reason the whole plexus appcontext refuses to start when I try this.
 
     public Set<Plugin> getPluginsBoundByDefaultToAllLifecycles( String packaging )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
index 48cd0c5..8186a39 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycles.java
@@ -40,7 +40,7 @@ import java.util.Set;
  * @author Jason van Zyl
  * @author Kristian Rosenvold
  */
-// TODO: The configuration for the lifecycle needs to be externalized so that I can use the annotations properly for the
+// TODO The configuration for the lifecycle needs to be externalized so that I can use the annotations properly for the
 // wiring and reference and external source for the lifecycle configuration.
 @Component( role = DefaultLifecycles.class )
 public class DefaultLifecycles
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
index 349576c..0831a4f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/LifecycleExecutionException.java
@@ -19,8 +19,11 @@ package org.apache.maven.lifecycle;
  * under the License.
  */
 
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
 
 /**
  * @author <a href="mailto:jason at maven.org">Jason van Zyl</a>
@@ -75,34 +78,27 @@ public class LifecycleExecutionException
 
     private static String createMessage( MojoExecution execution, MavenProject project, Throwable cause )
     {
-        StringBuilder buffer = new StringBuilder( 256 );
+        MessageBuilder buffer = buffer( 256 );
 
-        buffer.append( "Failed to execute goal" );
+        buffer.a( "Failed to execute goal" );
 
         if ( execution != null )
         {
-            buffer.append( ' ' );
-            buffer.append( execution.getGroupId() );
-            buffer.append( ':' );
-            buffer.append( execution.getArtifactId() );
-            buffer.append( ':' );
-            buffer.append( execution.getVersion() );
-            buffer.append( ':' );
-            buffer.append( execution.getGoal() );
-            buffer.append( " (" );
-            buffer.append( execution.getExecutionId() );
-            buffer.append( ")" );
+            buffer.a( ' ' );
+            buffer.mojo( execution.getGroupId() + ':' + execution.getArtifactId() + ':' + execution.getVersion() + ':'
+                + execution.getGoal() );
+            buffer.a( ' ' ).strong( '(' + execution.getExecutionId() + ')' );
         }
 
         if ( project != null )
         {
-            buffer.append( " on project " );
-            buffer.append( project.getArtifactId() );
+            buffer.a( " on project " );
+            buffer.project( project.getArtifactId() );
         }
 
         if ( cause != null )
         {
-            buffer.append( ": " ).append( cause.getMessage() );
+            buffer.a( ": " ).failure( cause.getMessage() );
         }
 
         return buffer.toString();
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java b/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
index 7dacb8e..e7b1a7f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/MavenExecutionPlan.java
@@ -34,13 +34,13 @@ import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 
-//TODO: lifecycles being executed
-//TODO: what runs in each phase
-//TODO: plugins that need downloading
-//TODO: project dependencies that need downloading
-//TODO: unfortunately the plugins need to be downloaded in order to get the plugin.xml file. need to externalize this
+//TODO lifecycles being executed
+//TODO what runs in each phase
+//TODO plugins that need downloading
+//TODO project dependencies that need downloading
+//TODO unfortunately the plugins need to be downloaded in order to get the plugin.xml file. need to externalize this
 //      from the plugin archive.
-//TODO: this will be the class that people get in IDEs to modify
+//TODO this will be the class that people get in IDEs to modify
 
 public class MavenExecutionPlan
     implements Iterable<ExecutionPlanItem>
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java
index b85bac7..c52a440 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/MojoExecutionConfigurator.java
@@ -23,10 +23,11 @@ import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
 
 /**
+ * <p>
  * A MojoExecutionConfigurator is responsible for creating the configuration for Mojo based on configuration for a Mojo
  * in the MavenProject and the default configuration for the Mojo from the containing plugin's plugin.xml descriptor.
- * 
- * @provisional
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  * @author Jason van Zyl
  * @since 3.3.1, MNG-5753
  */
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
index 7fba304..76454f8 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/BuildListCalculator.java
@@ -29,9 +29,10 @@ import java.util.Collections;
 import java.util.List;
 
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Kristian Rosenvold
- *         This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = BuildListCalculator.class )
 public class BuildListCalculator
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
index 2600881..1e81b18 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleExecutionPlanCalculator.java
@@ -62,11 +62,11 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import com.google.common.collect.ImmutableMap;
 
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (Extract class)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = LifecycleExecutionPlanCalculator.class )
 public class DefaultLifecycleExecutionPlanCalculator
@@ -525,8 +525,8 @@ public class DefaultLifecycleExecutionPlanCalculator
     }
 
     // org.apache.maven.plugins:maven-remote-resources-plugin:1.0:process
-    // TODO: take repo mans into account as one may be aggregating prefixes of many
-    // TODO: collect at the root of the repository, read the one at the root, and fetch remote if something is missing
+    // TODO take repo mans into account as one may be aggregating prefixes of many
+    // TODO collect at the root of the repository, read the one at the root, and fetch remote if something is missing
     // or the user forces the issue
 
     private List<MojoExecution> calculateForkedGoal( MojoExecution mojoExecution, MavenSession session,
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
index 8348530..c2bf919 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleMappingDelegate.java
@@ -79,8 +79,8 @@ public class DefaultLifecycleMappingDelegate
         /*
          * Grab plugin executions that are bound to the selected lifecycle phases from project. The effective model of
          * the project already contains the plugin executions induced by the project's packaging type. Remember, all
-         * phases of interest and only those are in the lifecyle mapping, if a phase has no value in the map, we are not
-         * interested in any of the executions bound to it.
+         * phases of interest and only those are in the lifecycle mapping, if a phase has no value in the map, we are
+         * not interested in any of the executions bound to it.
          */
 
         for ( Plugin plugin : project.getBuild().getPlugins() )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
index a72ce8e..aec785f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecyclePluginAnalyzer.java
@@ -42,13 +42,13 @@ import java.util.Map;
 import java.util.Set;
 
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author jdcasey
  * @author Kristian Rosenvold (extracted class only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = LifeCyclePluginAnalyzer.class )
 public class DefaultLifecyclePluginAnalyzer
@@ -73,7 +73,7 @@ public class DefaultLifecyclePluginAnalyzer
     // together and this really shows the problem of constructing a sensible default configuration but
     // it's all encapsulated here so it appears normalized to the POM builder.
 
-    // We are going to take the project packaging and find all plugin in the default lifecycle and create
+    // We are going to take the project packaging and find all plugins in the default lifecycle and create
     // fully populated Plugin objects, including executions with goals and default configuration taken
     // from the plugin.xml inside a plugin.
     //
@@ -82,7 +82,7 @@ public class DefaultLifecyclePluginAnalyzer
     {
         if ( logger.isDebugEnabled() )
         {
-            logger.debug( "Looking up lifecyle mappings for packaging " + packaging + " from "
+            logger.debug( "Looking up lifecycle mappings for packaging " + packaging + " from "
                 + Thread.currentThread().getContextClassLoader() );
         }
 
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
index 20e5585..cb49050 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DefaultLifecycleTaskSegmentCalculator.java
@@ -40,17 +40,17 @@ import java.util.Arrays;
 import java.util.List;
 
 /**
+ * <p>
  * Calculates the task segments in the build
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author jdcasey
  * @author Kristian Rosenvold (extracted class)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
-
 @Component( role = LifecycleTaskSegmentCalculator.class )
 public class DefaultLifecycleTaskSegmentCalculator
     implements LifecycleTaskSegmentCalculator
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
index 18fae7a..7ee499f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/DependencyContext.java
@@ -27,15 +27,16 @@ import java.util.Collections;
 import java.util.TreeSet;
 
 /**
+ * <p>
  * Context of dependency artifacts for a particular project.
- *
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (class extract only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
-// TODO: From a concurrency perspective, this class is not good. The combination of mutable/immutable state is not nice
+// TODO From a concurrency perspective, this class is not good. The combination of mutable/immutable state is not nice
 public class DependencyContext
 {
 
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
index 4a404e9..a52eeb0 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ExecutionPlanItem.java
@@ -29,9 +29,10 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
+ * <p>
  * Wraps individual MojoExecutions, containing information about completion status and scheduling.
- * <p/>
- * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Kristian Rosenvold
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
index 5c43dbd..abcdda5 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/GoalTask.java
@@ -20,9 +20,10 @@ package org.apache.maven.lifecycle.internal;
  */
 
 /**
+ * <p>
  * A task that is a goal
- * <p/>
- * TODO: From a concurrecy perspective, this class is not good. The combination of mutable/immutable state is not nice
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
index a99fb65..69b7c10 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDebugLogger.java
@@ -36,14 +36,15 @@ import java.util.Set;
 import java.util.TreeSet;
 
 /**
+ * <p>
  * Logs debug output from the various lifecycle phases.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author Kristian Rosenvold (extracted class only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = LifecycleDebugLogger.class )
 public class LifecycleDebugLogger
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
index 0947ed3..0d42aeb 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleDependencyResolver.java
@@ -51,14 +51,14 @@ import org.eclipse.aether.util.filter.AndDependencyFilter;
 import org.eclipse.aether.util.filter.ScopeDependencyFilter;
 
 /**
+ * <p>
  * Resolves dependencies for the artifacts in context of the lifecycle build
- *
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author Kristian Rosenvold (extracted class)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Named
 public class LifecycleDependencyResolver
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
index 7d35b10..7a8d9c9 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculator.java
@@ -39,7 +39,6 @@ import java.util.List;
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold  (extract interface only)
- *         <p/>
  */
 public interface LifecycleExecutionPlanCalculator
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
index 343fbf9..548fe6c 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleModuleBuilder.java
@@ -37,14 +37,15 @@ import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 
 /**
+ * <p>
  * Builds one or more lifecycles for a full module
- *
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author Kristian Rosenvold (extracted class)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = LifecycleModuleBuilder.class )
 public class LifecycleModuleBuilder
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
index 956e717..b22e359 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecyclePluginResolver.java
@@ -19,6 +19,9 @@ package org.apache.maven.lifecycle.internal;
  * under the License.
  */
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginManagement;
@@ -30,15 +33,11 @@ import org.apache.maven.project.MavenProject;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (Extract class)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = LifecyclePluginResolver.class )
 public class LifecyclePluginResolver
@@ -46,7 +45,6 @@ public class LifecyclePluginResolver
     @Requirement
     private PluginVersionResolver pluginVersionResolver;
 
-
     public LifecyclePluginResolver( PluginVersionResolver pluginVersionResolver )
     {
         this.pluginVersionResolver = pluginVersionResolver;
@@ -65,9 +63,8 @@ public class LifecyclePluginResolver
         {
             if ( plugin.getVersion() == null )
             {
-                PluginVersionRequest request =
-                    new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
-                                                     project.getRemotePluginRepositories() );
+                PluginVersionRequest request = new DefaultPluginVersionRequest( plugin, session.getRepositorySession(),
+                                                                                project.getRemotePluginRepositories() );
                 plugin.setVersion( pluginVersionResolver.resolve( request ).getVersion() );
             }
             versions.put( plugin.getKey(), plugin.getVersion() );
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
index 0b5fff3..56aafd5 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTask.java
@@ -20,9 +20,10 @@ package org.apache.maven.lifecycle.internal;
  */
 
 /**
+ * <p>
  * A task that is a lifecycle
- * <p/>
- * NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
index a721355..7dd84d8 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/LifecycleTaskSegmentCalculator.java
@@ -33,17 +33,17 @@ import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import java.util.List;
 
 /**
+ * <p>
  * Calculates the task segments in the build
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author jdcasey
  * @author Kristian Rosenvold (extracted interface)
- *         <p/>
- *         NOTE: This interface is not part of any public api and can be changed or deleted without prior notice.
  */
-
 public interface LifecycleTaskSegmentCalculator
 {
     List<TaskSegment> calculateTaskSegments( MavenSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
index e6b09ce..edb8dce 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoDescriptorCreator.java
@@ -49,15 +49,16 @@ import java.util.Collection;
 import java.util.StringTokenizer;
 
 /**
+ * <p>
  * Resolves dependencies for the artifacts in context of the lifecycle build
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Jason van Zyl
  * @author jdcasey
  * @author Kristian Rosenvold (extracted class only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = MojoDescriptorCreator.class )
 public class MojoDescriptorCreator
@@ -239,8 +240,8 @@ public class MojoDescriptorCreator
                                                 session.getRepositorySession() );
     }
 
-    // TODO: take repo mans into account as one may be aggregating prefixes of many
-    // TODO: collect at the root of the repository, read the one at the root, and fetch remote if something is missing
+    // TODO take repo mans into account as one may be aggregating prefixes of many
+    // TODO collect at the root of the repository, read the one at the root, and fetch remote if something is missing
     // or the user forces the issue
 
     public Plugin findPluginForPrefix( String prefix, MavenSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
index 2e4c117..766aed1 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/MojoExecutor.java
@@ -50,13 +50,14 @@ import java.util.Set;
 import java.util.TreeSet;
 
 /**
+ * <p>
  * Executes an individual mojo
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @author Jason van Zyl
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  * @since 3.0
  */
 @Component( role = MojoExecutor.class )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
index a09a3cb..3316c50 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/PhaseRecorder.java
@@ -23,11 +23,10 @@ import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.project.MavenProject;
 
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 public class PhaseRecorder
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java
index b4a8107..8665c80 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectArtifactFactory.java
@@ -26,10 +26,12 @@ import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 
 /**
+ * <p>
  * Component interface responsible for creation of MavenProject#dependencyArtifacts instances.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  * 
  * @since 3.2.4
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
  */
 public interface ProjectArtifactFactory
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
index 427f449..29a6aa5 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectBuildList.java
@@ -33,13 +33,14 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
 
 /**
+ * <p>
  * A list of project segments, ordered so that all ProjectSegments from first TaskSegment come before any
  * subsequent TaskSegments.
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  *
  * @since 3.0
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 public class ProjectBuildList
     implements Iterable<ProjectSegment>
@@ -51,7 +52,7 @@ public class ProjectBuildList
         this.items = Collections.unmodifiableList( items );
     }
 
-    // TODO: Optimize; or maybe just rewrite the whole way aggregating mojos are being run.
+    // TODO Optimize; or maybe just rewrite the whole way aggregating mojos are being run.
     /**
      * Returns aProjectBuildList that contains only items for the specified taskSegment
      * @param taskSegment the requested tasksegment
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
index 13539b4..1c1cae4 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectIndex.java
@@ -27,15 +27,16 @@ import java.util.List;
 import java.util.Map;
 
 /**
+ * <p>
  * Provides the positional index of the project
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (extracted class only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
-// Todo: Kristian wonders if this class really is necessary and if it overlaps other concepts.
+// TODO Kristian wonders if this class really is necessary and if it overlaps other concepts.
 public final class ProjectIndex
 {
 
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
index 5ef7745..89f8354 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/ProjectSegment.java
@@ -27,29 +27,33 @@ import java.util.List;
 
 /**
  * A build context that matches a mavenproject to a given tasksegment, and the session to be used.
- * <p/>
+ * <p>
  * A note to the reader;
- * <p/>
+ * </p>
+ * <p>
  * There are several issues/discussions regarding how "aggregator" plugins should be handled.
  * Read for instance http://docs.codehaus.org/display/MAVEN/Deterministic+Lifecycle+Planning
- * <p/>
+ * </p>
+ * <p>
  * In their current implementation they are "bolted" onto the lifecycle by separating them
  * into TaskSegments. This class represents the execution context of one such task segment.
- * <p/>
+ * </p>
+ * <p>
  * Wise voices have suggested that maybe aggregators shouldn't be bound to the ordinary
  * lifecycle at all, in which case we wouldn't be needing this class at all ( and
  * ProjectBuildList.getByTaskSegments). Or maybe they should be introduced in the calculation
  * of the execution plan instead, which seems much nicer.
- * <p/>
+ * </p>
+ * <p>
  * Additionally this class contains a clone of the MavenSession, which is *only* needed
  * because it has as notion of a "current" project.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Jason van Zyl
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 public final class ProjectSegment
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
index 14671ff..8a44343 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/TaskSegment.java
@@ -26,11 +26,11 @@ import java.util.List;
 /**
  * Describes the required task segment as provided on the maven command line; i.e. "clean jetty:run install"
  *
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * 
  * @since 3.0
  * @author Benjamin Bentmann
  * @author Kristian Rosenvold (extracted class only)
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 public final class TaskSegment
 {
@@ -69,5 +69,5 @@ public final class TaskSegment
         return aggregating;
     }
 
-    // TODO: Consider throwing UnsupprtedSomething on hashCode/equals
+    // TODO Consider throwing UnsupportedSomething on hashCode/equals
 }
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java
index 155abf9..5d78f80 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/Builder.java
@@ -29,11 +29,12 @@ import org.apache.maven.lifecycle.internal.ReactorContext;
 import org.apache.maven.lifecycle.internal.TaskSegment;
 
 /**
+ * <p>
  * A {@link Builder} encapsulates a strategy for building a set of Maven projects. The default strategy in Maven builds
  * the the projects serially, but a {@link Builder} can employ any type of concurrency model to build the projects.
- *
+ * </p>
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice.
  * @author jvanzyl
- * @provisional
  */
 public interface Builder
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
index 34fb323..f5c8e3e 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/BuilderCommon.java
@@ -101,7 +101,7 @@ public class BuilderCommon
         if ( session.getRequest().getDegreeOfConcurrency() > 1 )
         {
             final Set<Plugin> unsafePlugins = executionPlan.getNonThreadSafePlugins();
-            if ( !unsafePlugins.isEmpty()  && logger.isDebugEnabled() )
+            if ( !unsafePlugins.isEmpty() )
             {
                 logger.warn( "*****************************************************************" );
                 logger.warn( "* Your build is requesting parallel execution, but project      *" );
@@ -188,7 +188,7 @@ public class BuilderCommon
         }
     }
 
-    // Todo: I'm really wondering where this method belongs; smells like it should be on MavenProject, but for some
+    // TODO I'm really wondering where this method belongs; smells like it should be on MavenProject, but for some
     // reason it isn't ? This localization is kind-of a code smell.
 
     public static String getKey( MavenProject project )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java
index 4613165..d7d764e 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ConcurrencyDependencyGraph.java
@@ -30,12 +30,13 @@ import java.util.List;
 import java.util.Set;
 
 /**
+ * <p>
  * Presents a view of the Dependency Graph that is suited for concurrent building.
+ * </p>
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 public class ConcurrencyDependencyGraph
 {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
index b3e35e0..1414a12 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/MultiThreadedBuilder.java
@@ -44,12 +44,17 @@ import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 
 /**
- * Builds the full lifecycle in weave-mode (phase by phase as opposed to project-by-project)
+ * Builds the full lifecycle in weave-mode (phase by phase as opposed to project-by-project).
+ * <p>
+ * This builder uses a number of threads equal to the minimum of the degree of concurrency (which is the thread count
+ * set with <code>-T</code> on the command-line) and the number of projects to build. As such, building a single project
+ * will always result in a sequential build, regardless of the thread count.
+ * </p> 
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
  *
  * @since 3.0
  * @author Kristian Rosenvold
  *         Builds one or more lifecycles for a full module
- *         <p/>
  *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
  */
 @Component( role = Builder.class, hint = "multithreaded" )
@@ -63,7 +68,6 @@ public class MultiThreadedBuilder
     @Requirement
     private LifecycleModuleBuilder lifecycleModuleBuilder;
 
-
     public MultiThreadedBuilder()
     {
     }
@@ -73,9 +77,15 @@ public class MultiThreadedBuilder
                        List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
         throws ExecutionException, InterruptedException
     {
-        ExecutorService executor =
-            Executors.newFixedThreadPool( Math.min( session.getRequest().getDegreeOfConcurrency(),
-                                                    session.getProjects().size() ), new BuildThreadFactory() );
+        int nThreads = Math.min( session.getRequest().getDegreeOfConcurrency(), session.getProjects().size() );
+        boolean parallel = nThreads >= 2;
+        // Propagate the parallel flag to the root session and all of the cloned sessions in each project segment
+        session.setParallel( parallel );
+        for ( ProjectSegment segment : projectBuilds )
+        {
+            segment.getSession().setParallel( parallel );
+        }
+        ExecutorService executor = Executors.newFixedThreadPool( nThreads, new BuildThreadFactory() );
         CompletionService<ProjectSegment> service = new ExecutorCompletionService<>( executor );
         ConcurrencyDependencyGraph analyzer =
             new ConcurrencyDependencyGraph( projectBuilds, session.getProjectDependencyGraph() );
@@ -132,15 +142,20 @@ public class MultiThreadedBuilder
                 {
                     break;
                 }
-                final List<MavenProject> newItemsThatCanBeBuilt =
-                    analyzer.markAsFinished( projectBuild.getProject() );
-                for ( MavenProject mavenProject : newItemsThatCanBeBuilt )
+
+                // MNG-6170: Only schedule other modules from reactor if we have more modules to build than one. 
+                if ( analyzer.getNumberOfBuilds() > 1 )
                 {
-                    ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
-                    logger.debug( "Scheduling: " + scheduledDependent );
-                    Callable<ProjectSegment> cb =
-                        createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
-                    service.submit( cb );
+                    final List<MavenProject> newItemsThatCanBeBuilt =
+                        analyzer.markAsFinished( projectBuild.getProject() );
+                    for ( MavenProject mavenProject : newItemsThatCanBeBuilt )
+                    {
+                        ProjectSegment scheduledDependent = projectBuildList.get( mavenProject );
+                        logger.debug( "Scheduling: " + scheduledDependent );
+                        Callable<ProjectSegment> cb =
+                            createBuildCallable( rootSession, scheduledDependent, reactorContext, taskSegment, muxer );
+                        service.submit( cb );
+                    }
                 }
             }
             catch ( InterruptedException e )
@@ -150,13 +165,13 @@ public class MultiThreadedBuilder
             }
             catch ( ExecutionException e )
             {
-                // TODO MNG-5766 changes likely made this redundant 
+                // TODO MNG-5766 changes likely made this redundant
                 rootSession.getResult().addException( e );
                 break;
             }
         }
 
-        // cancel outstanding builds (if any)  - this can happen if an exception is thrown in above block
+        // cancel outstanding builds (if any) - this can happen if an exception is thrown in above block
 
         Future<ProjectSegment> unprocessed;
         while ( ( unprocessed = service.poll() ) != null )
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
index 51244be..edf8ab6 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/internal/builder/multithreaded/ThreadOutputMuxer.java
@@ -33,12 +33,12 @@ import org.apache.maven.lifecycle.internal.ProjectBuildList;
 import org.apache.maven.lifecycle.internal.ProjectSegment;
 
 /**
+ * <strong>NOTE:</strong> This class is not part of any public api and can be changed or deleted without prior notice.
+ * This class in particular may spontaneously self-combust and be replaced by a plexus-compliant thread aware
+ * logger implementation at any time.
+ * 
  * @since 3.0
  * @author Kristian Rosenvold
- *         <p/>
- *         NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
- *         This class in particular may spontaneusly self-combust and be replaced by a plexus-compliant thread aware
- *         logger implementation at any time.
  */
 @SuppressWarnings( { "SynchronizationOnLocalVariableOrMethodParameter" } )
 public class ThreadOutputMuxer
@@ -54,7 +54,7 @@ public class ThreadOutputMuxer
 
     private final ByteArrayOutputStream defaultOutputStreamForUnknownData = new ByteArrayOutputStream();
 
-    private final PrintStream defaultPringStream = new PrintStream( defaultOutputStreamForUnknownData );
+    private final PrintStream defaultPrintStream = new PrintStream( defaultOutputStreamForUnknownData );
 
     private final Set<ProjectSegment> completedBuilds = Collections.synchronizedSet( new HashSet<ProjectSegment>() );
 
@@ -175,7 +175,7 @@ public class ThreadOutputMuxer
         ProjectSegment threadProject = projectBuildThreadLocal.get();
         if ( threadProject == null )
         {
-            return defaultPringStream;
+            return defaultPrintStream;
         }
         if ( ownsRealOutputStream( threadProject ) )
         {
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java
index d2b6d6c..27f612f 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/Lifecycle.java
@@ -62,7 +62,7 @@ public class Lifecycle
     {
         return this.lifecyclePhases;
     }
-    
+
     /**
      * Method setId
      *
@@ -76,7 +76,7 @@ public class Lifecycle
     /**
      * Method setLifecyclePhases
      *
-     * @param phases
+     * @param lifecyclePhases
      */
     public void setLifecyclePhases( Map<String, LifecyclePhase> lifecyclePhases )
     {
@@ -91,12 +91,12 @@ public class Lifecycle
         {
             return null;
         }
-        
+
         if ( lphases.isEmpty() )
         {
             return Collections.emptyMap();
         }
-        
+
         Map<String, String> phases = new LinkedHashMap<>();
         for ( Map.Entry<String, LifecyclePhase> e: lphases.entrySet() )
         {
@@ -106,8 +106,13 @@ public class Lifecycle
     }
 
     @Deprecated
-    public void setPhases( Map<String, LifecyclePhase> phases )
+    public void setPhases( Map<String, String> phases )
     {
-        setLifecyclePhases( phases );
+        Map<String, LifecyclePhase> lphases = new LinkedHashMap<>();
+        for ( Map.Entry<String, String> e: phases.entrySet() )
+        {
+            lphases.put( e.getKey(), new LifecyclePhase( e.getValue() ) );
+        }
+        setLifecyclePhases( lphases );
     }
 }
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecyclePhase.java b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecyclePhase.java
index 059f234..295e642 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecyclePhase.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/LifecyclePhase.java
@@ -84,7 +84,7 @@ public class LifecyclePhase
                 }
                 else
                 {
-                    sb.append( "," );
+                    sb.append( ',' );
                 }
                 sb.append( mojo.getGoal() );
             }
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java b/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java
index 57084ce..0ce3ae2 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DebugConfigurationListener.java
@@ -57,7 +57,7 @@ public class DebugConfigurationListener
     }
 
     /**
-     * Creates a human-friendly string represenation of the specified object.
+     * Creates a human-friendly string representation of the specified object.
      *
      * @param obj The object to create a string representation for, may be <code>null</code>.
      * @return The string representation, never <code>null</code>.
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
index 5d7a56c..b4f7a4d 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/DefaultBuildPluginManager.java
@@ -37,8 +37,8 @@ import org.codehaus.plexus.component.annotations.Requirement;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 
-// TODO: the antrun plugin has its own configurator, the only plugin that does. might need to think about how that works
-// TODO: remove the coreArtifactFilterManager
+// TODO the antrun plugin has its own configurator, the only plugin that does. might need to think about how that works
+// TODO remove the coreArtifactFilterManager
 
 @Component( role = BuildPluginManager.class )
 public class DefaultBuildPluginManager
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java b/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java
index d50df0e..803b4b0 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/ExtensionRealmCache.java
@@ -49,14 +49,14 @@ public interface ExtensionRealmCache
 
         public final ClassRealm realm;
 
-        public final ExtensionDescriptor desciptor;
+        public final ExtensionDescriptor descriptor;
 
         public final List<Artifact> artifacts;
 
         public CacheRecord( ClassRealm realm, ExtensionDescriptor descriptor, List<Artifact> artifacts )
         {
             this.realm = realm;
-            this.desciptor = descriptor;
+            this.descriptor = descriptor;
             this.artifacts = artifacts;
         }
 
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java b/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
index bf053cc..71ece87 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/MojoExecution.java
@@ -175,7 +175,7 @@ public class MojoExecution
         {
             buffer.append( mojoDescriptor.getId() );
         }
-        buffer.append( " {execution: " ).append( executionId ).append( "}" );
+        buffer.append( " {execution: " ).append( executionId ).append( '}' );
         return buffer.toString();
     }
 
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java
index dcf459e..5f431e0 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterException.java
@@ -151,7 +151,7 @@ public class PluginParameterException
 
         if ( StringUtils.isEmpty( expression ) )
         {
-            messageBuffer.append( "." );
+            messageBuffer.append( '.' );
         }
         else
         {
@@ -172,7 +172,7 @@ public class PluginParameterException
         MojoDescriptor mojo = getMojoDescriptor();
 
         messageBuffer.append( "One or more required plugin parameters are invalid/missing for \'" )
-            .append( mojo.getPluginDescriptor().getGoalPrefix() ).append( ":" ).append( mojo.getGoal() )
+            .append( mojo.getPluginDescriptor().getGoalPrefix() ).append( ':' ).append( mojo.getGoal() )
             .append( "\'\n" );
 
         int idx = 0;
@@ -184,7 +184,7 @@ public class PluginParameterException
 
             decomposeParameterIntoUserInstructions( mojo, param, messageBuffer );
 
-            messageBuffer.append( "\n" );
+            messageBuffer.append( '\n' );
         }
 
         return messageBuffer.toString();
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
index 9199ba5..e701ec1 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
@@ -34,7 +34,7 @@ import org.codehaus.plexus.util.introspection.ReflectionValueExtractor;
 
 /**
  * Evaluator for plugin parameters expressions. Content surrounded by <code>${</code> and <code>}</code> is evaluated.
- * Recognized values are:<table border="1">
+ * Recognized values are:<table border="1" summary="Expression matrix">
  * <tr><th>expression</th>                     <th></th>               <th>evaluation result</th></tr>
  * <tr><td><code>session</code></td>           <td></td>               <td>the actual {@link MavenSession}</td></tr>
  * <tr><td><code>session.*</code></td>         <td>(since Maven 3)</td><td></td></tr>
@@ -83,7 +83,7 @@ public class PluginParameterExpressionEvaluator
 
     private Properties properties;
 
-    @Deprecated //TODO: used by the Enforcer plugin
+    @Deprecated //TODO used by the Enforcer plugin
     public PluginParameterExpressionEvaluator( MavenSession session, MojoExecution mojoExecution,
                                                PathTranslator pathTranslator, Logger logger, MavenProject project,
                                                Properties properties )
@@ -160,7 +160,7 @@ public class PluginParameterExpressionEvaluator
             int index = expr.indexOf( "${" );
             if ( index >= 0 )
             {
-                int lastIndex = expr.indexOf( "}", index );
+                int lastIndex = expr.indexOf( '}', index );
                 if ( lastIndex >= 0 )
                 {
                     String retVal = expr.substring( 0, index );
@@ -213,7 +213,7 @@ public class PluginParameterExpressionEvaluator
         {
             try
             {
-                int pathSeparator = expression.indexOf( "/" );
+                int pathSeparator = expression.indexOf( '/' );
 
                 if ( pathSeparator > 0 )
                 {
@@ -228,7 +228,7 @@ public class PluginParameterExpressionEvaluator
             }
             catch ( Exception e )
             {
-                // TODO: don't catch exception
+                // TODO don't catch exception
                 throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
                                                          e );
             }
@@ -253,7 +253,7 @@ public class PluginParameterExpressionEvaluator
         {
             try
             {
-                int pathSeparator = expression.indexOf( "/" );
+                int pathSeparator = expression.indexOf( '/' );
 
                 if ( pathSeparator > 0 )
                 {
@@ -268,7 +268,7 @@ public class PluginParameterExpressionEvaluator
             }
             catch ( Exception e )
             {
-                // TODO: don't catch exception
+                // TODO don't catch exception
                 throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
                                                          e );
             }
@@ -285,7 +285,7 @@ public class PluginParameterExpressionEvaluator
         {
             try
             {
-                int pathSeparator = expression.indexOf( "/" );
+                int pathSeparator = expression.indexOf( '/' );
 
                 if ( pathSeparator > 0 )
                 {
@@ -300,7 +300,7 @@ public class PluginParameterExpressionEvaluator
             }
             catch ( Exception e )
             {
-                // TODO: don't catch exception
+                // TODO don't catch exception
                 throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
                                                          e );
             }
@@ -313,7 +313,7 @@ public class PluginParameterExpressionEvaluator
         {
             try
             {
-                int pathSeparator = expression.indexOf( "/" );
+                int pathSeparator = expression.indexOf( '/' );
 
                 PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor();
 
@@ -342,7 +342,7 @@ public class PluginParameterExpressionEvaluator
         {
             try
             {
-                int pathSeparator = expression.indexOf( "/" );
+                int pathSeparator = expression.indexOf( '/' );
 
                 if ( pathSeparator > 0 )
                 {
@@ -357,7 +357,7 @@ public class PluginParameterExpressionEvaluator
             }
             catch ( Exception e )
             {
-                // TODO: don't catch exception
+                // TODO don't catch exception
                 throw new ExpressionEvaluationException( "Error evaluating plugin parameter expression: " + expression,
                                                          e );
             }
@@ -368,7 +368,7 @@ public class PluginParameterExpressionEvaluator
         }
         else if ( expression.startsWith( "basedir" ) )
         {
-            int pathSeparator = expression.indexOf( "/" );
+            int pathSeparator = expression.indexOf( '/' );
 
             if ( pathSeparator > 0 )
             {
@@ -412,7 +412,7 @@ public class PluginParameterExpressionEvaluator
 
         if ( value instanceof String )
         {
-            // TODO: without #, this could just be an evaluate call...
+            // TODO without #, this could just be an evaluate call...
 
             String val = (String) value;
 
@@ -447,7 +447,7 @@ public class PluginParameterExpressionEvaluator
 
     private String stripTokens( String expr )
     {
-        if ( expr.startsWith( "${" ) && ( expr.indexOf( "}" ) == expr.length() - 1 ) )
+        if ( expr.startsWith( "${" ) && ( expr.indexOf( '}' ) == expr.length() - 1 ) )
         {
             expr = expr.substring( 2, expr.length() - 1 );
         }
@@ -457,7 +457,7 @@ public class PluginParameterExpressionEvaluator
     @Override
     public File alignToBaseDirectory( File file )
     {
-        // TODO: Copied from the DefaultInterpolator. We likely want to resurrect the PathTranslator or at least a
+        // TODO Copied from the DefaultInterpolator. We likely want to resurrect the PathTranslator or at least a
         // similar component for re-usage
         if ( file != null )
         {
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
index b87994e..612684b 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/internal/DefaultMavenPluginManager.java
@@ -121,10 +121,12 @@ public class DefaultMavenPluginManager
 {
 
     /**
-     * PluginId=>ExtensionRealmCache.CacheRecord map MavenProject context value key. The map is used to ensure the same
-     * class realm is used to load build extensions and load mojos for extensions=true plugins.
-     *
-     * @noreference this is part of internal implementation and may be changed or removed without notice
+     * <p>
+     * PluginId => ExtensionRealmCache.CacheRecord map MavenProject context value key. The map is used to ensure the
+     * same class realm is used to load build extensions and load mojos for extensions=true plugins.
+     * </p>
+     * <strong>Note:</strong> This is part of internal implementation and may be changed or removed without notice
+     * 
      * @since 3.3.0
      */
     public static final String KEY_EXTENSIONS_REALMS = DefaultMavenPluginManager.class.getName() + "/extensionsRealms";
@@ -617,7 +619,7 @@ public class DefaultMavenPluginManager
 
         try
         {
-            // TODO: could the configuration be passed to lookup and the configurator known to plexus via the descriptor
+            // TODO could the configuration be passed to lookup and the configurator known to plexus via the descriptor
             // so that this method could entirely be handled by a plexus lookup?
             configurator = container.lookup( ComponentConfigurator.class, configuratorId );
 
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
index b22f9e1..d947b2a 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/PluginVersionRequest.java
@@ -67,7 +67,7 @@ public interface PluginVersionRequest
     /**
      * Gets the POM whose build plugins are to be scanned for the version.
      *
-     * @return The POM whose build plugins are to be scanned for the verion or {@code null} to only search the plugin
+     * @return The POM whose build plugins are to be scanned for the version or {@code null} to only search the plugin
      *         repositories.
      */
     Model getPom();
diff --git a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
index f11ee95..82e32fb 100644
--- a/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/plugin/version/internal/DefaultPluginVersionResolver.java
@@ -87,8 +87,6 @@ public class DefaultPluginVersionResolver
     public PluginVersionResult resolve( PluginVersionRequest request )
         throws PluginVersionResolutionException
     {
-        logger.debug( "Resolving plugin version for " + request.getGroupId() + ":" + request.getArtifactId() );
-
         PluginVersionResult result = resolveFromProject( request );
 
         if ( result == null )
@@ -103,8 +101,8 @@ public class DefaultPluginVersionResolver
         }
         else if ( logger.isDebugEnabled() )
         {
-            logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId()
-                + " to " + result.getVersion() + " from POM " + request.getPom() );
+            logger.debug( "Resolved plugin version for " + request.getGroupId() + ":" + request.getArtifactId() + " to "
+                + result.getVersion() + " from POM " + request.getPom() );
         }
 
         return result;
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 9d51a6d..ac38f5d 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -43,7 +43,6 @@ import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DeploymentRepository;
 import org.apache.maven.model.Extension;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.Parent;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.ReportPlugin;
@@ -73,9 +72,6 @@ import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.repository.WorkspaceRepository;
 import org.eclipse.aether.resolution.ArtifactRequest;
 import org.eclipse.aether.resolution.ArtifactResult;
-import org.eclipse.aether.resolution.VersionRangeRequest;
-import org.eclipse.aether.resolution.VersionRangeResolutionException;
-import org.eclipse.aether.resolution.VersionRangeResult;
 
 /**
  */
@@ -116,14 +112,14 @@ public class DefaultProjectBuilder
     public ProjectBuildingResult build( File pomFile, ProjectBuildingRequest request )
         throws ProjectBuildingException
     {
-        return build( pomFile, new FileModelSource( pomFile ), new InternalConfig( request, null ) );
+        return build( pomFile, new FileModelSource( pomFile ), new InternalConfig( request, null, null ) );
     }
 
     @Override
     public ProjectBuildingResult build( ModelSource modelSource, ProjectBuildingRequest request )
         throws ProjectBuildingException
     {
-        return build( null, modelSource, new InternalConfig( request, null ) );
+        return build( null, modelSource, new InternalConfig( request, null, null ) );
     }
 
     private ProjectBuildingResult build( File pomFile, ModelSource modelSource, InternalConfig config )
@@ -275,7 +271,7 @@ public class DefaultProjectBuilder
         request.setUserProperties( configuration.getUserProperties() );
         request.setBuildStartTime( configuration.getBuildStartTime() );
         request.setModelResolver( resolver );
-        request.setModelCache( new ReactorModelCache() );
+        request.setModelCache( config.modelCache );
 
         return request;
     }
@@ -294,48 +290,10 @@ public class DefaultProjectBuilder
         org.eclipse.aether.artifact.Artifact pomArtifact = RepositoryUtils.toArtifact( artifact );
         pomArtifact = ArtifactDescriptorUtils.toPomArtifact( pomArtifact );
 
-        InternalConfig config = new InternalConfig( request, null );
+        InternalConfig config = new InternalConfig( request, null, null );
 
         boolean localProject;
 
-        if ( request.isResolveVersionRanges() )
-        {
-            VersionRangeRequest versionRangeRequest = new VersionRangeRequest( pomArtifact, config.repositories, null );
-
-            try
-            {
-                VersionRangeResult versionRangeResult =
-                    repoSystem.resolveVersionRange( config.session, versionRangeRequest );
-
-                if ( versionRangeResult.getHighestVersion() == null )
-                {
-                    throw new ProjectBuildingException(
-                        artifact.getId(), "Error resolving project artifact: No versions matched the requested range",
-                        (Throwable) null );
-
-                }
-
-                if ( versionRangeResult.getVersionConstraint() != null
-                         && versionRangeResult.getVersionConstraint().getRange() != null
-                         && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
-                {
-                    throw new ProjectBuildingException(
-                        artifact.getId(),
-                        "Error resolving project artifact: The requested version range does not specify an upper bound",
-                        (Throwable) null );
-
-                }
-
-                pomArtifact = pomArtifact.setVersion( versionRangeResult.getHighestVersion().toString() );
-            }
-            catch ( VersionRangeResolutionException e )
-            {
-                throw new ProjectBuildingException(
-                    artifact.getId(), "Error resolving project artifact: " + e.getMessage(), e );
-
-            }
-        }
-
         try
         {
             ArtifactRequest pomRequest = new ArtifactRequest();
@@ -394,7 +352,9 @@ public class DefaultProjectBuilder
 
         ReactorModelPool modelPool = new ReactorModelPool();
 
-        InternalConfig config = new InternalConfig( request, modelPool );
+        ReactorModelCache modelCache = new ReactorModelCache();
+
+        InternalConfig config = new InternalConfig( request, modelPool, modelCache );
 
         Map<String, MavenProject> projectIndex = new HashMap<>( 256 );
 
@@ -654,11 +614,20 @@ public class DefaultProjectBuilder
         project.setModel( model );
         project.setOriginalModel( result.getRawModel() );
         project.setFile( model.getPomFile() );
-        Parent p = model.getParent();
-        if ( p != null )
+
+        Model parentModel = result.getModelIds().size() > 1 && !result.getModelIds().get( 1 ).isEmpty()
+                                ? result.getRawModel( result.getModelIds().get( 1 ) )
+                                : null;
+
+        if ( parentModel != null )
         {
-            project.setParentArtifact( repositorySystem.createProjectArtifact( p.getGroupId(), p.getArtifactId(),
-                                                                               p.getVersion() ) );
+            final String parentGroupId = inheritedGroupId( result, 1 );
+            final String parentVersion = inheritedVersion( result, 1 );
+
+            project.setParentArtifact( repositorySystem.createProjectArtifact( parentGroupId,
+                                                                               parentModel.getArtifactId(),
+                                                                               parentVersion ) );
+
             // org.apache.maven.its.mng4834:parent:0.1
             String parentModelId = result.getModelIds().get( 1 );
             File parentPomFile = result.getRawModel( parentModelId ).getPomFile();
@@ -681,7 +650,16 @@ public class DefaultProjectBuilder
                     catch ( ProjectBuildingException e )
                     {
                         // MNG-4488 where let invalid parents slide on by
-                        logger.warn( "Failed to build parent project for " + project.getId() );
+                        if ( logger.isDebugEnabled() )
+                        {
+                            // Message below is checked for in the MNG-2199 core IT.
+                            logger.warn( "Failed to build parent project for " + project.getId(), e );
+                        }
+                        else
+                        {
+                            // Message below is checked for in the MNG-2199 core IT.
+                            logger.warn( "Failed to build parent project for " + project.getId() );
+                        }
                     }
                 }
                 else
@@ -694,7 +672,16 @@ public class DefaultProjectBuilder
                     catch ( ProjectBuildingException e )
                     {
                         // MNG-4488 where let invalid parents slide on by
-                        logger.warn( "Failed to build parent project for " + project.getId() );
+                        if ( logger.isDebugEnabled() )
+                        {
+                            // Message below is checked for in the MNG-2199 core IT.
+                            logger.warn( "Failed to build parent project for " + project.getId(), e );
+                        }
+                        else
+                        {
+                            // Message below is checked for in the MNG-2199 core IT.
+                            logger.warn( "Failed to build parent project for " + project.getId() );
+                        }
                     }
                 }
             }
@@ -876,6 +863,40 @@ public class DefaultProjectBuilder
         }
     }
 
+    private static String inheritedGroupId( final ModelBuildingResult result, final int modelIndex )
+    {
+        String groupId = null;
+        final String modelId = result.getModelIds().get( modelIndex );
+
+        if ( !modelId.isEmpty() )
+        {
+            final Model model = result.getRawModel( modelId );
+            groupId = model.getGroupId() != null
+                          ? model.getGroupId()
+                          : inheritedGroupId( result, modelIndex + 1 );
+
+        }
+
+        return groupId;
+    }
+
+    private static String inheritedVersion( final ModelBuildingResult result, final int modelIndex )
+    {
+        String version = null;
+        final String modelId = result.getModelIds().get( modelIndex );
+
+        if ( !modelId.isEmpty() )
+        {
+            final Model model = result.getRawModel( modelId );
+            version = model.getVersion() != null
+                          ? model.getVersion()
+                          : inheritedVersion( result, modelIndex + 1 );
+
+        }
+
+        return version;
+    }
+
     private String findProfilesXml( ModelBuildingResult result, Map<File, Boolean> profilesXmls )
     {
         for ( String modelId : result.getModelIds() )
@@ -913,11 +934,14 @@ public class DefaultProjectBuilder
         public final List<RemoteRepository> repositories;
 
         public final ReactorModelPool modelPool;
+        
+        public final ReactorModelCache modelCache;
 
-        InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool )
+        InternalConfig( ProjectBuildingRequest request, ReactorModelPool modelPool, ReactorModelCache modelCache )
         {
             this.request = request;
             this.modelPool = modelPool;
+            this.modelCache = modelCache;
             session =
                 LegacyLocalRepositoryManager.overlay( request.getLocalRepository(), request.getRepositorySession(),
                                                       repoSystem );
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
index 7004feb..d0e3f6b 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingHelper.java
@@ -197,7 +197,7 @@ public class DefaultProjectBuildingHelper
                 pluginManager.setupExtensionsRealm( project, plugin, request.getRepositorySession() );
 
             final ClassRealm extensionRealm = recordRealm.realm;
-            final ExtensionDescriptor extensionDescriptor = recordRealm.desciptor;
+            final ExtensionDescriptor extensionDescriptor = recordRealm.descriptor;
             final List<Artifact> artifacts = recordRealm.artifacts;
 
             extensionRealms.add( extensionRealm );
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
index f439240..dafbefd 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingRequest.java
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.Validate;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.properties.internal.SystemProperties;
 import org.eclipse.aether.RepositorySystemSession;
 
 public class DefaultProjectBuildingRequest
@@ -62,6 +63,7 @@ public class DefaultProjectBuildingRequest
 
     private boolean resolveDependencies;
 
+    @Deprecated
     private boolean resolveVersionRanges;
 
     private RepositoryMerging repositoryMerging = RepositoryMerging.POM_DOMINANT;
@@ -165,11 +167,7 @@ public class DefaultProjectBuildingRequest
     {
         if ( systemProperties != null )
         {
-            this.systemProperties = new Properties();
-            synchronized ( systemProperties )
-            { // avoid concurrentmodification if someone else sets/removes an unrelated system property
-                this.systemProperties.putAll( systemProperties );
-            }
+            this.systemProperties = SystemProperties.copyProperties( systemProperties );
         }
         else
         {
@@ -221,14 +219,24 @@ public class DefaultProjectBuildingRequest
         return resolveDependencies;
     }
 
-    /** @since 3.2.2 */
+    /**
+     * @since 3.2.2
+     * @deprecated This got added when implementing MNG-2199 and is no longer used.
+     * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized.
+     */
+    @Deprecated
     public ProjectBuildingRequest setResolveVersionRanges( boolean value )
     {
         this.resolveVersionRanges = value;
         return this;
     }
 
-    /** @since 3.2.2 */
+    /**
+     * @since 3.2.2
+     * @deprecated This got added when implementing MNG-2199 and is no longer used.
+     * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized.
+     */
+    @Deprecated
     public boolean isResolveVersionRanges()
     {
         return this.resolveVersionRanges;
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
index 7d02810..06e4101 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuildingResult.java
@@ -48,7 +48,7 @@ class DefaultProjectBuildingResult
      * Creates a new result with the specified contents.
      *
      * @param project The project that was built, may be {@code null}.
-     * @param problems The problems that were encouterned, may be {@code null}.
+     * @param problems The problems that were encountered, may be {@code null}.
      * @param dependencyResolutionResult The result of the resolution for the project dependencies, may be {@code null}.
      */
     public DefaultProjectBuildingResult( MavenProject project, List<ModelProblem> problems,
@@ -68,7 +68,7 @@ class DefaultProjectBuildingResult
      *
      * @param projectId The identifier of the project, may be {@code null}.
      * @param pomFile The POM file from which the project was built, may be {@code null}.
-     * @param problems The problems that were encouterned, may be {@code null}.
+     * @param problems The problems that were encountered, may be {@code null}.
      */
     public DefaultProjectBuildingResult( String projectId, File pomFile, List<ModelProblem> problems )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
index 50c9e35..5a803af 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectDependenciesResolver.java
@@ -29,8 +29,6 @@ import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Exclusion;
-import org.apache.maven.model.InputLocation;
-import org.apache.maven.model.InputSource;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
@@ -39,7 +37,6 @@ import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.RequestTrace;
-import org.eclipse.aether.artifact.ArtifactProperties;
 import org.eclipse.aether.artifact.ArtifactType;
 import org.eclipse.aether.artifact.ArtifactTypeRegistry;
 import org.eclipse.aether.collection.CollectRequest;
@@ -153,10 +150,10 @@ public class DefaultProjectDependenciesResolver
             }
         }
 
-        DependencyManagement depMngt = project.getDependencyManagement();
-        if ( depMngt != null )
+        DependencyManagement depMgmt = project.getDependencyManagement();
+        if ( depMgmt != null )
         {
-            for ( Dependency dependency : depMngt.getDependencies() )
+            for ( Dependency dependency : depMgmt.getDependencies() )
             {
                 collect.addManagedDependency( RepositoryUtils.toDependency( dependency, stereotypes ) );
             }
@@ -239,8 +236,6 @@ public class DefaultProjectDependenciesResolver
 
         private String indent = "";
 
-        private Map<String, Dependency> managed;
-
         public GraphLogger( MavenProject project )
         {
             this.project = project;
@@ -258,20 +253,47 @@ public class DefaultProjectDependenciesResolver
                 buffer.append( art );
                 buffer.append( ':' ).append( dep.getScope() );
 
-                String premanagedScope = DependencyManagerUtils.getPremanagedScope( node );
-                if ( premanagedScope != null && !premanagedScope.equals( dep.getScope() ) )
+                // TODO We currently cannot tell which <dependencyManagement> section contained the management
+                //      information. When resolver 1.1 provides this information, these log messages should be updated
+                //      to contain it.
+                if ( ( node.getManagedBits() & DependencyNode.MANAGED_SCOPE ) == DependencyNode.MANAGED_SCOPE )
+                {
+                    final String premanagedScope = DependencyManagerUtils.getPremanagedScope( node );
+                    buffer.append( " (scope managed from " );
+                    buffer.append( StringUtils.defaultString( premanagedScope, "default" ) );
+                    buffer.append( ')' );
+                }
+
+                if ( ( node.getManagedBits() & DependencyNode.MANAGED_VERSION ) == DependencyNode.MANAGED_VERSION )
+                {
+                    final String premanagedVersion = DependencyManagerUtils.getPremanagedVersion( node );
+                    buffer.append( " (version managed from " );
+                    buffer.append( StringUtils.defaultString( premanagedVersion, "default" ) );
+                    buffer.append( ')' );
+                }
+
+                if ( ( node.getManagedBits() & DependencyNode.MANAGED_OPTIONAL ) == DependencyNode.MANAGED_OPTIONAL )
                 {
-                    buffer.append( " (scope managed from " ).append( premanagedScope );
-                    appendManagementSource( buffer, art, "scope" );
-                    buffer.append( ")" );
+                    final Boolean premanagedOptional = DependencyManagerUtils.getPremanagedOptional( node );
+                    buffer.append( " (optionality managed from " );
+                    buffer.append( StringUtils.defaultString( premanagedOptional, "default" ) );
+                    buffer.append( ')' );
                 }
 
-                String premanagedVersion = DependencyManagerUtils.getPremanagedVersion( node );
-                if ( premanagedVersion != null && !premanagedVersion.equals( art.getVersion() ) )
+                if ( ( node.getManagedBits() & DependencyNode.MANAGED_EXCLUSIONS )
+                        == DependencyNode.MANAGED_EXCLUSIONS )
                 {
-                    buffer.append( " (version managed from " ).append( premanagedVersion );
-                    appendManagementSource( buffer, art, "version" );
-                    buffer.append( ")" );
+                    // TODO As of resolver 1.1, use DependencyManagerUtils.getPremanagedExclusions( node ).
+                    //      The resolver 1.0.x releases do not record premanaged state of exclusions.
+                    buffer.append( " (exclusions managed)" );
+                }
+
+                if ( ( node.getManagedBits() & DependencyNode.MANAGED_PROPERTIES )
+                        == DependencyNode.MANAGED_PROPERTIES )
+                {
+                    // TODO As of resolver 1.1, use DependencyManagerUtils.getPremanagedProperties( node ).
+                    //      The resolver 1.0.x releases do not record premanaged state of properties.
+                    buffer.append( " (properties managed)" );
                 }
             }
             else
@@ -293,41 +315,6 @@ public class DefaultProjectDependenciesResolver
             return true;
         }
 
-        private void appendManagementSource( StringBuilder buffer, org.eclipse.aether.artifact.Artifact artifact,
-                                             String field )
-        {
-            if ( managed == null )
-            {
-                managed = new HashMap<>();
-                if ( project.getDependencyManagement() != null )
-                {
-                    for ( Dependency dep : project.getDependencyManagement().getDependencies() )
-                    {
-                        managed.put( dep.getManagementKey(), dep );
-                    }
-                }
-            }
-
-            String key =
-                ArtifactIdUtils.toVersionlessId( artifact.getGroupId(), artifact.getArtifactId(),
-                                                artifact.getProperty( ArtifactProperties.TYPE, "jar" ),
-                                                artifact.getClassifier() );
-
-            Dependency dependency = managed.get( key );
-            if ( dependency != null )
-            {
-                InputLocation location = dependency.getLocation( field );
-                if ( location != null )
-                {
-                    InputSource source = location.getSource();
-                    if ( source != null )
-                    {
-                        buffer.append( " by " ).append( source.getModelId() );
-                    }
-                }
-            }
-        }
-
     }
 
 }
diff --git a/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java b/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java
index 6121473..d263c28 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DuplicateArtifactAttachmentException.java
@@ -27,7 +27,7 @@ import org.apache.maven.artifact.Artifact;
  *
  * @author pgier
  * @author jdcasey
- * @todo Make this a checked exception, and modify the API of MavenProjectHelper.
+ * TODO Make this a checked exception, and modify the API of MavenProjectHelper.
  * Currently, this modification would create compatibility problems for existing plugins.
  */
 public class DuplicateArtifactAttachmentException
diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index 952622f..80a5193 100644
--- a/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -74,11 +74,11 @@ import org.eclipse.aether.repository.RemoteRepository;
 
 /**
  * The concern of the project is provide runtime values based on the model.
- * <p/>
+ * <p>
  * The values in the model remain untouched but during the process of building a project notions like inheritance and
  * interpolation can be added. This allows to have an entity which is useful in a runtime while preserving the model so
  * that it can be marshalled and unmarshalled without being tainted by runtime requirements.
- * <p/>
+ * </p>
  * <p>
  * With changes during 3.2.2 release MavenProject is closer to being immutable after construction with the removal of
  * all components from this class, and the upfront construction taken care of entirely by the @{ProjectBuilder}. There
@@ -221,7 +221,7 @@ public class MavenProject
         this.artifact = artifact;
     }
 
-    // @todo I would like to get rid of this. jvz.
+    // TODO I would like to get rid of this. jvz.
     public Model getModel()
     {
         return model;
@@ -352,7 +352,7 @@ public class MavenProject
         {
             if ( a.getArtifactHandler().isAddedToClasspath() )
             {
-                // TODO: let the scope handler deal with this
+                // TODO let the scope handler deal with this
                 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
                     || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
@@ -364,7 +364,7 @@ public class MavenProject
         return list;
     }
 
-    // TODO: this checking for file == null happens because the resolver has been confused about the root
+    // TODO this checking for file == null happens because the resolver has been confused about the root
     // artifact or not. things like the stupid dummy artifact coming from surefire.
     public List<String> getTestClasspathElements()
         throws DependencyResolutionRequiredException
@@ -408,7 +408,7 @@ public class MavenProject
         for ( Artifact a : getArtifacts() )
         {
             if ( a.getArtifactHandler().isAddedToClasspath()
-            // TODO: let the scope handler deal with this
+            // TODO let the scope handler deal with this
                 && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) )
             {
                 addArtifactPath( a, list );
@@ -470,7 +470,7 @@ public class MavenProject
 
     public String getName()
     {
-        // TODO: this should not be allowed to be null.
+        // TODO this should not be allowed to be null.
         if ( getModel().getName() != null )
         {
             return getModel().getName();
@@ -696,7 +696,7 @@ public class MavenProject
      * what phases have run dependencies in some scopes won't be included. eg. if only compile phase has run,
      * dependencies with scope test won't be included.
      *
-     * @return {@link Set} < {@link Artifact} >
+     * @return {@link Set} < {@link Artifact} >
      * @see #getDependencyArtifacts() to get only direct dependencies
      */
     public Set<Artifact> getArtifacts()
@@ -992,7 +992,7 @@ public class MavenProject
     /**
      * Direct dependencies that this project has.
      *
-     * @return {@link Set} < {@link Artifact} >
+     * @return {@link Set} < {@link Artifact} >
      * @see #getArtifacts() to get all transitive dependencies
      */
     @Deprecated
@@ -1133,9 +1133,9 @@ public class MavenProject
         StringBuilder sb = new StringBuilder( 128 );
         sb.append( "MavenProject: " );
         sb.append( getGroupId() );
-        sb.append( ":" );
+        sb.append( ':' );
         sb.append( getArtifactId() );
-        sb.append( ":" );
+        sb.append( ':' );
         sb.append( getVersion() );
         sb.append( " @ " );
 
@@ -1152,7 +1152,6 @@ public class MavenProject
     }
 
     /**
-     * @throws CloneNotSupportedException
      * @since 2.0.9
      */
     @Override
@@ -1575,10 +1574,10 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts() )
         {
-            // TODO: classpath check doesn't belong here - that's the other method
+            // TODO classpath check doesn't belong here - that's the other method
             if ( a.getArtifactHandler().isAddedToClasspath() )
             {
-                // TODO: let the scope handler deal with this
+                // TODO let the scope handler deal with this
                 if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
                     || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
@@ -1603,7 +1602,7 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts() )
         {
-            // TODO: let the scope handler deal with this
+            // TODO let the scope handler deal with this
             if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_PROVIDED.equals( a.getScope() )
                 || Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
             {
@@ -1629,7 +1628,7 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts() )
         {
-            // TODO: classpath check doesn't belong here - that's the other method
+            // TODO classpath check doesn't belong here - that's the other method
             if ( a.getArtifactHandler().isAddedToClasspath() )
             {
                 list.add( a );
@@ -1680,7 +1679,7 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts()  )
         {
-            // TODO: let the scope handler deal with this
+            // TODO let the scope handler deal with this
             if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) )
             {
                 Dependency dependency = new Dependency();
@@ -1705,9 +1704,9 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts()  )
         {
-            // TODO: classpath check doesn't belong here - that's the other method
+            // TODO classpath check doesn't belong here - that's the other method
             if ( a.getArtifactHandler().isAddedToClasspath()
-            // TODO: let the scope handler deal with this
+            // TODO let the scope handler deal with this
                 && ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) || Artifact.SCOPE_RUNTIME.equals( a.getScope() ) ) )
             {
                 list.add( a );
@@ -1732,7 +1731,7 @@ public class MavenProject
         {
             if ( a.getArtifactHandler().isAddedToClasspath() )
             {
-                // TODO: let the scope handler deal with this
+                // TODO let the scope handler deal with this
                 if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
                     addArtifactPath( a, list );
@@ -1749,10 +1748,10 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts() )
         {
-            // TODO: classpath check doesn't belong here - that's the other method
+            // TODO classpath check doesn't belong here - that's the other method
             if ( a.getArtifactHandler().isAddedToClasspath() )
             {
-                // TODO: let the scope handler deal with this
+                // TODO let the scope handler deal with this
                 if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
                 {
                     list.add( a );
@@ -1776,7 +1775,7 @@ public class MavenProject
 
         for ( Artifact a : getArtifacts() )
         {
-            // TODO: let the scope handler deal with this
+            // TODO let the scope handler deal with this
             if ( Artifact.SCOPE_SYSTEM.equals( a.getScope() ) )
             {
                 Dependency dependency = new Dependency();
diff --git a/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java b/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java
index 0b54c00..ec5c390 100644
--- a/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java
+++ b/maven-core/src/main/java/org/apache/maven/project/MavenProjectHelper.java
@@ -41,7 +41,7 @@ public interface MavenProjectHelper
      * * See {@link #attachArtifact(MavenProject, String, String, java.io.File)}, but with classifier set to null.
      * @param project project reference.
      * @param artifactType artifact type.
-     * @param artifactFile arrifact file.
+     * @param artifactFile artifact file.
      */
     void attachArtifact( MavenProject project, String artifactType, File artifactFile );
 
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
index 0380278..d0e4afe 100644
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectBuildingRequest.java
@@ -38,7 +38,7 @@ public interface ProjectBuildingRequest
 
     List<ArtifactRepository> getRemoteRepositories();
 
-    ProjectBuildingRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifacgRepositories );
+    ProjectBuildingRequest setPluginArtifactRepositories( List<ArtifactRepository> pluginArtifactRepositories );
 
     List<ArtifactRepository> getPluginArtifactRepositories();
 
@@ -168,10 +168,20 @@ public interface ProjectBuildingRequest
      */
     RepositoryMerging getRepositoryMerging();
 
-    /** @since 3.2.2 */
+    /**
+     * @since 3.2.2
+     * @deprecated This got added when implementing MNG-2199 and is no longer used.
+     * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized.
+     */
+    @Deprecated
     boolean isResolveVersionRanges();
 
-    /** @since 3.2.2 */
+    /**
+     * @since 3.2.2
+     * @deprecated This got added when implementing MNG-2199 and is no longer used.
+     * Commit 6cf9320942c34bc68205425ab696b1712ace9ba4 updated the way 'MavenProject' objects are initialized.
+     */
+    @Deprecated
     ProjectBuildingRequest setResolveVersionRanges( boolean value );
 
     /**
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
index 184be70..3a31d33 100644
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
@@ -28,7 +28,7 @@ import java.util.Set;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
-
+import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Parent;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.building.FileModelSource;
@@ -203,24 +203,26 @@ public class ProjectModelResolver
         return new FileModelSource( pomFile );
     }
 
-    public ModelSource resolveModel( Parent parent )
+    @Override
+    public ModelSource resolveModel( final Parent parent )
         throws UnresolvableModelException
     {
-        Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
-                                                 parent.getVersion() );
-
-        VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
-        versionRangeRequest.setTrace( trace );
-
         try
         {
-            VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
+            final Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+                                                           parent.getVersion() );
+
+            final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+            versionRangeRequest.setTrace( trace );
+
+            final VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
 
             if ( versionRangeResult.getHighestVersion() == null )
             {
-                throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
-                                                          + "'", parent.getGroupId(), parent.getArtifactId(),
-                                                      parent.getVersion() );
+                throw new UnresolvableModelException(
+                    String.format( "No versions matched the requested parent version range '%s'",
+                                   parent.getVersion() ),
+                    parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
 
             }
 
@@ -228,21 +230,70 @@ public class ProjectModelResolver
                      && versionRangeResult.getVersionConstraint().getRange() != null
                      && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
             {
-                throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
-                                                          + "' does not specify an upper bound", parent.getGroupId(),
-                                                      parent.getArtifactId(), parent.getVersion() );
+                // Message below is checked for in the MNG-2199 core IT.
+                throw new UnresolvableModelException(
+                    String.format( "The requested parent version range '%s' does not specify an upper bound",
+                                   parent.getVersion() ),
+                    parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
 
             }
 
             parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+            return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
         }
-        catch ( VersionRangeResolutionException e )
+        catch ( final VersionRangeResolutionException e )
         {
             throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
                                                   parent.getVersion(), e );
 
         }
+    }
 
-        return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
+    @Override
+    public ModelSource resolveModel( final Dependency dependency )
+        throws UnresolvableModelException
+    {
+        try
+        {
+            final Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), "",
+                                                           "pom", dependency.getVersion() );
+
+            final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+            versionRangeRequest.setTrace( trace );
+
+            final VersionRangeResult versionRangeResult = resolver.resolveVersionRange( session, versionRangeRequest );
+
+            if ( versionRangeResult.getHighestVersion() == null )
+            {
+                throw new UnresolvableModelException(
+                    String.format( "No versions matched the requested dependency version range '%s'",
+                                   dependency.getVersion() ),
+                    dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+            }
+
+            if ( versionRangeResult.getVersionConstraint() != null
+                     && versionRangeResult.getVersionConstraint().getRange() != null
+                     && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+            {
+                // Message below is checked for in the MNG-4463 core IT.
+                throw new UnresolvableModelException(
+                    String.format( "The requested dependency version range '%s' does not specify an upper bound",
+                                   dependency.getVersion() ),
+                    dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+            }
+
+            dependency.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+            return resolveModel( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+        }
+        catch ( VersionRangeResolutionException e )
+        {
+            throw new UnresolvableModelException( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+                                                  dependency.getVersion(), e );
+
+        }
     }
 }
diff --git a/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java b/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
index 504097f..1ca35d8 100644
--- a/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
+++ b/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
@@ -233,7 +233,7 @@ public class ProjectSorter
         return !( StringUtils.isEmpty( version ) || version.startsWith( "[" ) || version.startsWith( "(" ) );
     }
 
-    // TODO: !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
+    // TODO !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.
     public MavenProject getTopLevelProject()
     {
         if ( topLevelProject == null )
diff --git a/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java b/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
index 679ee00..82d6c9d 100644
--- a/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
+++ b/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
@@ -24,8 +24,8 @@ import org.eclipse.aether.RepositorySystemSession;
 /**
  * Component interface that allows per-project customization of Aether repository system sessions.
  * 
+ * <strong>Note:</strong> This interface is part of work in progress and can be changed or removed without notice. 
  * @since 3.2.4
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
  */
 public interface RepositorySessionDecorator
 {
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java b/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
index 6e13d33..a1187c3 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/ActiveProjectArtifact.java
@@ -38,7 +38,7 @@ import java.util.List;
  * attributes of this artifact.
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
- * @todo I think this exposes a design flaw in that the immutable and mutable parts of an artifact are in one class and
+ * TODO I think this exposes a design flaw in that the immutable and mutable parts of an artifact are in one class and
  * should be split. ie scope, file, etc depend on the context of use, whereas everything else is immutable.
  */
 @Deprecated
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
index 05fba19..42bbe45 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
@@ -93,7 +93,7 @@ public class MavenMetadataSource
     @Requirement
     private ArtifactFactory repositorySystem;
 
-    //TODO: This prevents a cycle in the composition which shows us another problem we need to deal with.
+    //TODO This prevents a cycle in the composition which shows us another problem we need to deal with.
     //@Requirement
     private ProjectBuilder projectBuilder;
 
@@ -175,7 +175,7 @@ public class MavenMetadataSource
 
         Artifact relocatedArtifact = null;
 
-        //TODO: Not even sure this is really required as the project will be cached in the builder, we'll see this
+        //TODO Not even sure this is really required as the project will be cached in the builder, we'll see this
         // is currently the biggest hotspot
         if ( artifact instanceof ArtifactWithDependencies )
         {
@@ -208,8 +208,8 @@ public class MavenMetadataSource
             {
                 dependencies = rel.project.getDependencies();
 
-                DependencyManagement depMngt = rel.project.getDependencyManagement();
-                managedDependencies = ( depMngt != null ) ? depMngt.getDependencies() : null;
+                DependencyManagement depMgmt = rel.project.getDependencyManagement();
+                managedDependencies = ( depMgmt != null ) ? depMgmt.getDependencies() : null;
 
                 pomRepositories = rel.project.getRemoteArtifactRepositories();
             }
@@ -658,7 +658,7 @@ public class MavenMetadataSource
 
                         // MNG-2861: the artifact data has changed. If the available versions where previously
                         // retrieved, we need to update it.
-                        // TODO: shouldn't the versions be merged across relocations?
+                        // TODO shouldn't the versions be merged across relocations?
                         List<ArtifactVersion> available = artifact.getAvailableVersions();
                         if ( available != null && !available.isEmpty() )
                         {
diff --git a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java
index 1d4a2a3..924523f 100644
--- a/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java
+++ b/maven-core/src/main/java/org/apache/maven/project/artifact/ProjectArtifact.java
@@ -55,8 +55,8 @@ public class ProjectArtifact
 
     public List<Dependency> getManagedDependencies()
     {
-        DependencyManagement depMngt = project.getDependencyManagement();
-        return ( depMngt != null ) ? depMngt.getDependencies() : Collections.<Dependency>emptyList();
+        DependencyManagement depMgmt = project.getDependencyManagement();
+        return ( depMgmt != null ) ? depMgmt.getDependencies() : Collections.<Dependency>emptyList();
     }
 
     static class PomArtifactHandler
diff --git a/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java b/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java
index aa5fed9..c7ab086 100644
--- a/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java
+++ b/maven-core/src/main/java/org/apache/maven/properties/internal/SystemProperties.java
@@ -28,24 +28,36 @@ public class SystemProperties
 {
     /**
      * Thread-safe System.properties copy implementation.
-     *
-     * @see https://issues.apache.org/jira/browse/MNG-5670
      */
     public static void addSystemProperties( Properties props )
     {
-        for ( String key : System.getProperties().stringPropertyNames() )
-        {
-            props.put( key, System.getProperty( key ) );
-        }
+        props.putAll( getSystemProperties() );
     }
 
     /**
-     * Returns System.properties copy.
+     * Returns a copy of {@link System#getProperties()} in a thread-safe manner.
+     *
+     * @return {@link System#getProperties()} obtained in a thread-safe manner.
      */
     public static Properties getSystemProperties()
     {
-        Properties systemProperties = new Properties();
-        addSystemProperties( systemProperties );
-        return systemProperties;
+        return copyProperties( System.getProperties() );
+    }
+
+    /**
+     * Copies the given {@link Properties} object into a new {@link Properties} object, in a thread-safe manner.
+     * @param properties Properties to copy.
+     * @return Copy of the given properties.
+     */
+    public static Properties copyProperties( Properties properties )
+    {
+        final Properties copyProperties = new Properties();
+        // guard against modification/removal of keys in the given properties (MNG-5670, MNG-6053, MNG-6105)
+        synchronized ( properties )
+        {
+            copyProperties.putAll( properties );
+        }
+        return copyProperties;
     }
+
 }
diff --git a/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java b/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java
index 09729dd..c8150ec 100644
--- a/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java
+++ b/maven-core/src/main/java/org/apache/maven/repository/ArtifactTransferEvent.java
@@ -122,7 +122,7 @@ public class ArtifactTransferEvent
      * Returns the request type.
      *
      * @return Returns the request type. The Request type is one of
-     *         <code>TransferEvent.REQUEST_GET<code> or <code>TransferEvent.REQUEST_PUT<code>
+     *         <code>TransferEvent.REQUEST_GET</code> or <code>TransferEvent.REQUEST_PUT</code>
      */
     public int getRequestType()
     {
@@ -134,7 +134,7 @@ public class ArtifactTransferEvent
      *
      * @param requestType The requestType to set.
      *                    The Request type value should be either
-     *                    <code>TransferEvent.REQUEST_GET<code> or <code>TransferEvent.REQUEST_PUT<code>.
+     *                    <code>TransferEvent.REQUEST_GET</code> or <code>TransferEvent.REQUEST_PUT</code>.
      * @throws IllegalArgumentException when
      */
     public void setRequestType( final int requestType )
@@ -242,7 +242,7 @@ public class ArtifactTransferEvent
 
     public String toString()
     {
-        StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder( 64 );
 
         sb.append( "TransferEvent[" );
 
@@ -259,7 +259,7 @@ public class ArtifactTransferEvent
                 break;
         }
 
-        sb.append( "|" );
+        sb.append( '|' );
         switch ( this.getEventType() )
         {
             case TRANSFER_COMPLETED:
@@ -282,9 +282,9 @@ public class ArtifactTransferEvent
                 break;
         }
 
-        sb.append( "|" );
-        sb.append( this.getLocalFile() ).append( "|" );
-        sb.append( "]" );
+        sb.append( '|' );
+        sb.append( this.getLocalFile() ).append( '|' );
+        sb.append( ']' );
 
         return sb.toString();
     }
diff --git a/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java b/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
index 90c1fa9..eb8f5ea 100644
--- a/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
+++ b/maven-core/src/main/java/org/apache/maven/repository/DelegatingLocalArtifactRepository.java
@@ -61,11 +61,20 @@ public class DelegatingLocalArtifactRepository
         this.ideWorkspace = localRepository;
     }
 
+    /**
+     * @deprecated instead use {@link #getIdeWorkspace()}
+     */
+    @Deprecated
     public LocalArtifactRepository getIdeWorspace()
     {
         return ideWorkspace;
     }
 
+    public LocalArtifactRepository getIdeWorkspace()
+    {
+        return getIdeWorspace();
+    }
+
     @Override
     public Artifact find( Artifact artifact )
     {
diff --git a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java
index 352e5bb..def20e4 100644
--- a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java
+++ b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/AbstractArtifactMetadata.java
@@ -53,7 +53,7 @@ public abstract class AbstractArtifactMetadata
 
     public String extendedToString()
     {
-        StringBuilder buffer = new StringBuilder();
+        StringBuilder buffer = new StringBuilder( 256 );
 
         buffer.append( "\nArtifact Metadata\n--------------------------" );
         buffer.append( "\nGroupId: " ).append( getGroupId() );
diff --git a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
index aaa0ee3..e46e33b 100644
--- a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
+++ b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/ArtifactMetadataSource.java
@@ -48,8 +48,8 @@ public interface ArtifactMetadataSource
      *                           are needed, for instance the following code will work
      *                           <code>artifactFactory.createProjectArtifact( "org.apache.maven", "maven", "" )</code>
      * @param localRepository    local repository
-     * @param remoteRepositories remote repositories, {@link List} $lt; {@link ArtifactRepository} >
-     * @return {@link List} $lt; {@link ArtifactVersion} >
+     * @param remoteRepositories remote repositories, {@link List} $lt; {@link ArtifactRepository} >
+     * @return {@link List} $lt; {@link ArtifactVersion} >
      * @throws ArtifactMetadataRetrievalException
      *          in case of error while retrieving repository metadata from the repository.
      */
@@ -66,7 +66,7 @@ public interface ArtifactMetadataSource
      *            <code>artifactFactory.createProjectArtifact( "org.apache.maven", "maven", "" )</code>
      * @param localRepository    local repository
      * @param remoteRepository   remote repository
-     * @return {@link List} $lt; {@link ArtifactVersion} >
+     * @return {@link List} $lt; {@link ArtifactVersion} >
      * @throws ArtifactMetadataRetrievalException
      *          in case of error while retrieving repository metadata from the repository.
      */
diff --git a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java
index a652c97..028c4d4 100644
--- a/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java
+++ b/maven-core/src/main/java/org/apache/maven/repository/legacy/metadata/MetadataResolutionRequest.java
@@ -102,7 +102,7 @@ public interface MetadataResolutionRequest
     boolean isResolveManagedVersions();
 
     /**
-     * Enables/disables resolution of the dependency manageemnt information.
+     * Enables/disables resolution of the dependency management information.
      *
      * @param resolveManagedVersions {@code true} if the dependency management information should be retrieved, {@code
      *            false} otherwise.
diff --git a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
index 820d886..d3ffd92 100644
--- a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
@@ -66,7 +66,7 @@ public class DefaultMavenSettingsBuilder
         throws IOException, XmlPullParserException
     {
         File globalSettingsFile =
-            getFile( "${maven.home}/conf/settings.xml", "maven.home",
+            getFile( "${maven.conf}/settings.xml", "maven.conf",
                      MavenSettingsBuilder.ALT_GLOBAL_SETTINGS_XML_LOCATION );
 
         SettingsBuildingRequest request = new DefaultSettingsBuildingRequest();
@@ -127,7 +127,7 @@ public class DefaultMavenSettingsBuilder
 
         if ( StringUtils.isEmpty( path ) )
         {
-            // TODO: This replacing shouldn't be necessary as user.home should be in the
+            // TODO This replacing shouldn't be necessary as user.home should be in the
             // context of the container and thus the value would be interpolated by Plexus
             String basedir = System.getProperty( basedirSysProp );
             if ( basedir == null )
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
index 9f7a26b..0bdee11 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/DefaultToolchainManager.java
@@ -124,7 +124,7 @@ public class DefaultToolchainManager
 
             if ( current != null )
             {
-                //TODO: why is this using the context
+                //TODO why is this using the context
                 context = session.getPluginContext( desc, current );
             }
         }
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java b/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java
index 8eddac5..134c24d 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainManager.java
@@ -44,16 +44,16 @@ public interface ToolchainManager
      * <code>maven-toolchains-plugin</code> contains the configuration to select the appropriate
      * toolchain and is executed at the beginning of the build.
      *
-     * @param session the Maven session, must not be {@code null}
      * @param type the type, must not be {@code null}
+     * @param context the Maven session, must not be {@code null}
      * @return the toolchain selected by <code>maven-toolchains-plugin</code>
      */
     Toolchain getToolchainFromBuildContext( String type, MavenSession context );
-    
+
     /**
      * Select all toolchains available in user settings matching the type and requirements,
      * independently from <code>maven-toolchains-plugin</code>.
-     * 
+     *
      * @param session the Maven session, must not be {@code null}
      * @param type the type, must not be {@code null}
      * @param requirements the requirements, may be {@code null}
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java b/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java
index 756cd95..3b73910 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/ToolchainPrivate.java
@@ -34,7 +34,7 @@ public interface ToolchainPrivate
     /**
      * Let the toolchain decide if it matches requirements defined
      * in the toolchain plugin configuration.
-     * @param requirements Map<String, String> key value pair, may not be {@code null}
+     * @param requirements Map<String, String> key value pair, may not be {@code null}
      * @return {@code true} if the requirements match, otherwise {@code false}
      */
     boolean matchesRequirements( Map<String, String> requirements );
diff --git a/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java b/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java
index 9b5bdd7..86a1784 100644
--- a/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java
+++ b/maven-core/src/main/java/org/apache/maven/toolchain/io/DefaultToolchainsReader.java
@@ -31,7 +31,6 @@ import javax.inject.Singleton;
 import org.apache.commons.lang3.Validate;
 import org.apache.maven.toolchain.model.PersistedToolchains;
 import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -62,19 +61,14 @@ public class DefaultToolchainsReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final Reader in = input )
         {
-            MavenToolchainsXpp3Reader r = new MavenToolchainsXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new MavenToolchainsXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new ToolchainsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     @Override
@@ -83,19 +77,14 @@ public class DefaultToolchainsReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final InputStream in = input )
         {
-            MavenToolchainsXpp3Reader r = new MavenToolchainsXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new MavenToolchainsXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new ToolchainsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     private boolean isStrict( Map<String, ?> options )
diff --git a/maven-core/src/main/mdo/toolchains.mdo b/maven-core/src/main/mdo/toolchains.mdo
index 9b2aa90..9a8b0c4 100644
--- a/maven-core/src/main/mdo/toolchains.mdo
+++ b/maven-core/src/main/mdo/toolchains.mdo
@@ -124,9 +124,9 @@
                     <description>
                     <![CDATA[Type of toolchain:<ul>
                     <li><code>jdk</code> for
-                    <a href="http://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/jdk.html">JDK Standard Toolchain</a>,</li>
+                    <a href="https://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/jdk.html">JDK Standard Toolchain</a>,</li>
                     <li>other value for
-                    <a href="http://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/custom.html">Custom Toolchain</a></li>
+                    <a href="https://maven.apache.org/plugins/maven-toolchains-plugin/toolchains/custom.html">Custom Toolchain</a></li>
                     </ul>
                     ]]></description>
                     <type>String</type>
@@ -168,7 +168,7 @@
                     <description>
                     <![CDATA[
                     <p>Toolchain configuration information, like location or any information that is to be retrieved.</p>
-                    <p>Actual content structure is completely open: each toochain type will define its own format and semantics.</p>
+                    <p>Actual content structure is completely open: each toolchain type will define its own format and semantics.</p>
                     <p>In general, this is a properties format: <code><name>value</name></code> with
                     per-toolchain defined properties names.</p>
                     ]]></description>
diff --git a/maven-core/src/main/resources/META-INF/maven/extension.xml b/maven-core/src/main/resources/META-INF/maven/extension.xml
index e3af5a0..1d24d92 100644
--- a/maven-core/src/main/resources/META-INF/maven/extension.xml
+++ b/maven-core/src/main/resources/META-INF/maven/extension.xml
@@ -18,7 +18,7 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 -->
-
+<!-- START SNIPPET: core-extension -->
 <extension>
   <exportedPackages>
     <!-- maven-* -->
@@ -54,7 +54,7 @@ under the License.
     <exportedPackage>org.apache.maven.wagon.repository</exportedPackage>
     <exportedPackage>org.apache.maven.wagon.resource</exportedPackage>
 
-    <!-- aether-api, aether-spi, aether-impl -->
+    <!-- maven-resolver-api, maven-resolver-spi, maven-resolver-impl -->
     <exportedPackage>org.eclipse.aether.*</exportedPackage>
     <exportedPackage>org.eclipse.aether.artifact</exportedPackage>
     <exportedPackage>org.eclipse.aether.collection</exportedPackage>
@@ -118,6 +118,8 @@ under the License.
     <exportedPackage>org.slf4j.spi.*</exportedPackage>
     <exportedPackage>org.slf4j.helpers.*</exportedPackage>
 
+    <!-- JAnsi -->
+    <exportedPackage>org.fusesource.jansi.*</exportedPackage>
   </exportedPackages>
 
   <exportedArtifacts>
@@ -130,7 +132,7 @@ under the License.
     <exportedArtifact>org.sonatype.sisu:sisu-inject-plexus</exportedArtifact>
     <exportedArtifact>org.eclipse.sisu:org.eclipse.sisu.plexus</exportedArtifact>
     <exportedArtifact>org.apache.maven:maven-artifact</exportedArtifact>
-    <exportedArtifact>org.apache.maven:maven-aether-provider</exportedArtifact>
+    <exportedArtifact>org.apache.maven:maven-resolver-provider</exportedArtifact>
     <exportedArtifact>org.apache.maven:maven-artifact-manager</exportedArtifact>
     <exportedArtifact>org.apache.maven:maven-compat</exportedArtifact>
     <exportedArtifact>org.apache.maven:maven-core</exportedArtifact>
@@ -150,19 +152,23 @@ under the License.
     <exportedArtifact>org.apache.maven:maven-settings-builder</exportedArtifact>
     <exportedArtifact>org.apache.maven:maven-toolchain</exportedArtifact>
     <exportedArtifact>org.apache.maven.wagon:wagon-provider-api</exportedArtifact>
-    <exportedArtifact>org.eclipse.aether:aether-api</exportedArtifact>
-    <exportedArtifact>org.eclipse.aether:aether-spi</exportedArtifact>
-    <exportedArtifact>org.eclipse.aether:aether-impl</exportedArtifact>
+    <exportedArtifact>org.apache.maven.resolver:maven-resolver-api</exportedArtifact>
+    <exportedArtifact>org.apache.maven.resolver:maven-resolver-spi</exportedArtifact>
+    <exportedArtifact>org.apache.maven.resolver:maven-resolver-impl</exportedArtifact>
 
     <exportedArtifact>javax.inject:javax.inject</exportedArtifact>
     <exportedArtifact>org.slf4j:slf4j-api</exportedArtifact>
+    <exportedArtifact>org.fusesource.jansi:jansi</exportedArtifact>
 
     <!--
-      | We must also filter out the old or NoClassDefFoundErrors will surface  
+      | We must also filter out the old Aether or NoClassDefFoundErrors will surface  
      -->
     <exportedArtifact>org.sonatype.aether:aether-api</exportedArtifact>
     <exportedArtifact>org.sonatype.aether:aether-spi</exportedArtifact>
     <exportedArtifact>org.sonatype.aether:aether-impl</exportedArtifact>
+    <exportedArtifact>org.eclipse.aether:aether-api</exportedArtifact>
+    <exportedArtifact>org.eclipse.aether:aether-spi</exportedArtifact>
+    <exportedArtifact>org.eclipse.aether:aether-impl</exportedArtifact>
 
     <!--
       | NOTE: Don't exclude the wagons or any of their dependencies (apart from the wagon API). This would otherwise
@@ -171,4 +177,5 @@ under the License.
       | wagon from their plugin realm. 
      -->
   </exportedArtifacts>
-</extension>
\ No newline at end of file
+</extension>
+<!-- END SNIPPET: core-extension -->
diff --git a/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml b/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml
index 05795be..2f26ce2 100644
--- a/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml
+++ b/maven-core/src/main/resources/META-INF/plexus/artifact-handlers.xml
@@ -80,17 +80,6 @@ Artifact handlers are required by the dependency resolution mechanism.
         <addedToClasspath>true</addedToClasspath>
       </configuration>
     </component>
-    <component>
-      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
-      <role-hint>ejb3</role-hint>
-      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
-      <configuration>
-        <type>ejb3</type>
-        <includesDependencies>true</includesDependencies>
-        <language>java</language>
-        <addedToClasspath>false</addedToClasspath>
-      </configuration>
-    </component>
 
     <!--
      | TEST JAR
@@ -201,19 +190,5 @@ Artifact handlers are required by the dependency resolution mechanism.
       </configuration>
     </component>
 
-    <!--
-     | PAR
-     |-->
-    <component>
-      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
-      <role-hint>par</role-hint>
-      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
-      <configuration>
-        <type>par</type>
-        <includesDependencies>true</includesDependencies>
-        <language>java</language>
-        <addedToClasspath>false</addedToClasspath>
-      </configuration>
-    </component>
   </components>
 </component-set>
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages.properties
deleted file mode 100644
index d576d7a..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=WARNING: Failed to download {0}.
-remote.repository.disabled.warning=The use of the remote repository has been disabled.
-directory.nonexistant.warning=Directory {0} does not exist. Attempting to create.
-not.directory.warning={0} is not a directory.
-not.writable.warning={0} is not writable.
-cannot.create.directory.warning=Unable to create directory {0}
-maven.repo.local.unset.warning=maven.repo.local is not set.
-single.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependency:
-multiple.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependencies:
-offline.snapshot.warning=You are working offline so the build will continue, but {0} may be out of date!
-download.message=Attempting to download {0}.
-plugin.loading.error=The plugin {0} could not be loaded.
-empty.descriptor.error=The file {0} you specified has zero length.
-checksum.verification.error=The follow artifact is corrupt: {0}.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties
deleted file mode 100644
index d5c7dad..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_de.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=WARNUNG: Herunterladen von {0} fehlgeschlagen.
-remote.repository.disabled.warning=Verwendung entfernter Repositories deaktiviert.
-directory.nonexistant.warning=Verzeichnis {0} existiert nicht, es wird erstellt.
-not.directory.warning={0} ist kein Verzeichnis.
-not.writable.warning=Kann {0} nicht schreiben.
-cannot.create.directory.warning=Kann Verzeichnis {0} nicht erstellen.
-maven.repo.local.unset.warning=maven.repo.local ist nicht gesetzt.
-single.unsatisfied.dependency.error=Der Vorgang wurde aufgrund der folgenden nicht erf\u00FCllten Abh\u00E4ngigkeit abgebrochen:
-multiple.unsatisfied.dependency.error=Der Vorgang wurde aufgrund der folgenden nicht erf\u00FCllten Abh\u00E4ngigkeiten abgebrochen:
-offline.snapshot.warning={0} ist unter Umst\u00E4nden veraltet. Da Sie offline arbeiten, wird der Vorgang fortgesetzt.
-download.message=Versuche {0} herunterzuladen.
-plugin.loading.error=Kann Plugin {0} nicht laden.
-empty.descriptor.error=Datei {0} ist leer.
-checksum.verification.error=Artefakt {0} ist defekt.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties
deleted file mode 100644
index 40a239e..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_el.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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.
-
-# --------------------------------------------------------------------------
-# \u00c5\u00eb\u00e5\u00e3\u00ea\u00f4\u00de\u00f2 \u00d3\u00f7\u00e5\u00e4\u00df\u00ef\u00f5
-# --------------------------------------------------------------------------
-failed.download.warning=\u00d0\u00f1\u00ef\u00f3\u00f9\u00f7\u00de! \u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00ec\u00e5\u00f4\u00e1\u00f6\u00ef\u00f1\u00dc \u00f4\u00ef\u00f5 {0}!
-remote.repository.disabled.warning=\u00c7 \u00f7\u00f1\u00de\u00f3\u00e7 \u00e1\u00f0\u00ef\u00ec\u00e1\u00ea\u00f1\u00f5\u00f3\u00ec\u00dd\u00ed\u00f9\u00ed \u00e1\u00f0\u00ef\u00e8\u00e7\u00ea\u00fe\u00ed \u00dd\u00f7\u00e5\u00e9 \u00e1\u00f0\u00e5\u00ed\u00e5\u00f1\u00e3\u00ef\u00f0\u00ef\u00e9\u00e7\u00e8\u00e5\u00df..
-directory.nonexistant.warning=\u00cf \u00ea\u00e1\u00f4\u00dc\u00eb\u00ef\u00e3\u00ef\u00f2 {0} \u00e4\u00e5\u00ed \u00f5\u00f0\u00dc\u00f1\u00f7\u00e5\u00e9! \u00c4\u00ef\u00ea\u00e9\u00ec\u00dc\u00e6\u00f9 \u00e4\u00e7\u00ec\u00e9\u00ef\u00fd\u00f1\u00e3\u00e7\u00f3\u00e7...
-not.directory.warning={0} \u00e4\u00e5\u00ed \u00e5\u00df\u00ed\u00e1\u00e9 \u00ea\u00e1\u00f4\u00dc\u00eb\u00ef\u00e3\u00ef\u00f2!
-not.writable.warning=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00e4\u00e9\u00e5\u00e3\u00e3\u00f1\u00e1\u00f6\u00de \u00f3\u00f4\u00ef {0}!
-cannot.create.directory.warning=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00e7 \u00e4\u00e7\u00ec\u00e9\u00ef\u00f5\u00f1\u00e3\u00e5\u00df\u00e1 \u00f4\u00ef\u00fd \u00ea\u00e1\u00f4\u00e1\u00eb\u00fc\u00e3\u00ef\u00f5 {0}!
-maven.repo.local.unset.warning=maven.repo.local \u00e4\u00e5\u00ed \u00dd\u00f7\u00e5\u00e9 \u00ef\u00f1\u00e9\u00f3\u00f4\u00e5\u00df.
-single.unsatisfied.dependency.error= \u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e4\u00e5\u00ed \u00ec\u00f0\u00ef\u00f1\u00e5\u00df \u00ed\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00e9\u00f3\u00f4\u00e5\u00df! \u00cb\u00e5\u00df\u00f0\u00e5\u00e9 \u00e7 \u00e1\u00ea\u00fc\u00eb\u00ef\u00f5\u00e8\u00e7 \u00e5\u00ee\u00dc\u00f1\u00f4\u00e7\u00f3\u00e5\u00e9:
-multiple.unsatisfied.dependency.error=\u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e4\u00e5\u00ed \u00ec\u00f0\u00ef\u00f1\u00e5\u00df \u00ed\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00e9\u00f3\u00f4\u00e5\u00df! \u00cb\u00e5\u00df\u00f0\u00ef\u00f5\u00ed \u00e7 \u00e1\u00ea\u00fc\u00eb\u00ef\u00f5\u00e8\u00e5\u00f2 \u00e5\u00ee\u00e1\u00f1\u00f4\u00de\u00f3\u00e5\u00e9\u00f2:
-offline.snapshot.warning=\u00c5\u00f1\u00e3\u00dc\u00e6\u00e5\u00f3\u00e1\u00e9 \u00e1\u00f0\u00ef\u00f3\u00f5\u00ed\u00e4\u00e5\u00e4\u00ef\u00ec\u00dd\u00ed\u00ef\u00f2! \u00c7 \u00e4\u00e9\u00e1\u00e4\u00e9\u00ea\u00e1\u00f3\u00df\u00e1 \u00e8\u00e1 \u00f3\u00f5\u00ed\u00e5\u00f7\u00df\u00f3\u00e5\u00e9 \u00e1\u00eb\u00eb\u00dc \u00e5\u00df\u00ed\u00e1\u00e9 \u00e4\u00f5\u00ed\u00e1\u00f4\u00fe\u00ed  {0} \u00ed\u00e1 \u00ec\u00e7\u00ed \u00e5\u00df\u00ed\u00e1\u00e9 \u00e5\u00ed\u00e [...]
-download.message=\u00d0\u00f1\u00f9\u00f3\u00f0\u00e1\u00e8\u00fe \u00ed\u00e1 \u00ec\u00e5\u00f4\u00e1\u00f6\u00dd\u00f1\u00f9 {0}.
-plugin.loading.error=\u00c1\u00e4\u00fd\u00ed\u00e1\u00f4\u00f9\u00ed \u00ed\u00e1 \u00f6\u00ef\u00f1\u00f4\u00f9\u00e8\u00e5\u00df \u00f4\u00ef plugin {0}!
-empty.descriptor.error=\u00d4\u00ef \u00e1\u00f1\u00f7\u00e5\u00df\u00ef {0} \u00f0\u00ef\u00fd \u00ea\u00e1\u00e8\u00ef\u00f1\u00df\u00f3\u00e1\u00f4\u00e5 \u00dd\u00f7\u00e5\u00e9 \u00ec\u00dd\u00e3\u00e5\u00e8\u00ef\u00f2 \u00ec\u00e7\u00e4\u00dd\u00ed.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties
deleted file mode 100644
index aaf95bf..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_en.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-# NOTE:
-# This bundle is intentionally empty because English strings are provided by the base bundle via the parent chain. It
-# must be provided nevertheless such that a request for locale "en" will not erroneously pick up the bundle for the
-# JVM's default locale (which need not be "en"). See the method javadoc about
-#   ResourceBundle.getBundle(String, Locale, ClassLoader)
-# for a full description of the lookup strategy.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties
deleted file mode 100644
index d54395e..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_es.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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.
-
-# --------------------------------------------------------------------------
-# Verificador de Proyecto
-# --------------------------------------------------------------------------
-failed.download.warning=\u00a1ATENCION!: \u00a1Imposible descargar {0}!
-remote.repository.disabled.warning=El uso de repositorios remotos est\u00e1 desactivado..
-directory.nonexistant.warning=\u00a1El directorio {0} no existe! Intentando crear...
-not.directory.warning=\u00a1{0} no es un directorio!
-not.writable.warning=\u00a1Imposible escribir en {0}!
-cannot.create.directory.warning=\u00a1Imposible crear el directorio {0}!
-maven.repo.local.unset.warning=\u00a1maven.repo.local no est\u00e1 definido!
-single.unsatisfied.dependency.error=\u00a1El proceso no puede seguir! Falta la siguiente dependencia:
-multiple.unsatisfied.dependency.error=\u00a1El proceso no puede seguir! Faltan las siguientes dependencias:
-offline.snapshot.warning=\u00a1Est\u00e1s trabajando fuera de linea! \u00a1El proceso seguir\u00e1, pero es posible que {0} no est\u00e9 actualizado!
-download.message=Intentando descargar {0}.
-plugin.loading.error=\u00a1No se ha podido cargar el plugin {0}!
-empty.descriptor.error=El fichero especificado, {0} , tiene longitud cero.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties
deleted file mode 100644
index 06eb48f..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_fr.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=ATTENTION: Impossible de t\u00e9l\u00e9charger {0}.
-remote.repository.disabled.warning=L'utilisation du d\u00e9p\u00f4t distant est d\u00e9sactiv\u00e9e.
-directory.nonexistant.warning=Le r\u00e9pertoire {0} n'existe pas. Tentative de cr\u00e9ation.
-not.directory.warning={0} n'est pas un r\u00e9pertoire.
-not.writable.warning=Impossible d'\u00e9crire sur {0}.
-cannot.create.directory.warning=Impossible de cr\u00e9er le r\u00e9pertoire {0}.
-maven.repo.local.unset.warning=maven.repo.local n'est pas d\u00e9fini.
-single.unsatisfied.dependency.error=Le processus ne peut continuer \u00e0 cause de la d\u00e9pendance manquante suivante:
-multiple.unsatisfied.dependency.error=Le processus ne peut continuer \u00e0 cause des d\u00e9pendances manquantes suivantes:
-offline.snapshot.warning=Vous travaillez hors-connexion, alors le processus va continuer, mais {0} peut ne pas \u00eatre \u00e0 jour!
-download.message=Tentative de t\u00e9l\u00e9chargement de {0}.
-plugin.loading.error=Impossible de charger le plugin {0}.
-empty.descriptor.error=Le fichier {0} que vous avez sp\u00e9cifi\u00e9 est vide.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties
deleted file mode 100644
index e1b6566..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_ja.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=WARNING: {0} \u306e\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f.
-remote.repository.disabled.warning=\u30ea\u30e2\u30fc\u30c8\u30ea\u30dd\u30b8\u30c8\u30ea\u304c\u7121\u52b9\u3067\u3059.
-directory.nonexistant.warning=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {0} \u304c\u5b58\u5728\u3057\u307e\u305b\u3093. \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059.
-not.directory.warning={0} \u306f\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3067\u306f\u3042\u308a\u307e\u305b\u3093.
-not.writable.warning={0} \u306f\u66f8\u304d\u8fbc\u307f\u53ef\u80fd\u3067\u306f\u3042\u308a\u307e\u305b\u3093.
-cannot.create.directory.warning=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea {0} \u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093.
-maven.repo.local.unset.warning=maven.repo.local \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093.
-single.unsatisfied.dependency.error=\u4ee5\u4e0b\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u6e80\u305f\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30d3\u30eb\u30c9\u3092\u7d9a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093:
-multiple.unsatisfied.dependency.error=\u4ee5\u4e0b\u306e\u3044\u304f\u3064\u304b\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u6e80\u305f\u3055\u308c\u306a\u304b\u3063\u305f\u305f\u3081\u3001\u30d3\u30eb\u30c9\u3092\u7d9a\u884c\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093:
-offline.snapshot.warning=\u30aa\u30d5\u30e9\u30a4\u30f3\u30e2\u30fc\u30c9\u3067\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059. {0} \u306f\u53e4\u3044\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u5229\u7528\u3055\u308c\u307e\u3059.
-download.message={0} \u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3059.
-plugin.loading.error=\u30d7\u30e9\u30b0\u30a4\u30f3 {0} \u3092\u30ed\u30fc\u30c9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093.
-empty.descriptor.error=\u6307\u5b9a\u3057\u305f\u30d5\u30a1\u30a4\u30eb {0} \u306f\u7a7a\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3059.
-checksum.verification.error=\u30a2\u30fc\u30c6\u30a3\u30d5\u30a1\u30af\u30c8 {0} \u304c\u4e0d\u6b63\u3067\u3059.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties
deleted file mode 100644
index b3f1efa..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_ko.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-cannot.create.directory.warning = \uB514\uB809\uD130\uB9AC {0} \uC744/\uB97C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-checksum.verification.error = \uB2E4\uC74C\uC758 \uC544\uB9AC\uD329\uD2B8(artifact)\uC5D0\uC11C \uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD569\uB2C8\uB2E4: {0}
-directory.nonexistant.warning = \uB514\uB809\uD130\uB9AC {0} \uC774/\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC0DD\uC131\uC744 \uC2DC\uB3C4\uD569\uB2C8\uB2E4.
-download.message = {0} \uC744/\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD569\uB2C8\uB2E4.
-empty.descriptor.error = \uD30C\uC77C {0} \uC758 \uAE38\uC774\uAC00 0\uC785\uB2C8\uB2E4.
-failed.download.warning = \uACBD\uACE0: {0} \uC744/\uB97C \uB2E4\uC6B4\uB85C\uB4DC \uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.
-maven.repo.local.unset.warning = maven.repo.local \uC774 \uC124\uC815\uB418\uC5B4\uC788\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-multiple.unsatisfied.dependency.error = \uB2E4\uC74C\uC758 \uC758\uC874\uC131\uB4E4\uC744 \uB9CC\uC871\uC2DC\uD0A4\uC9C0 \uBABB\uD588\uAE30 \uB54C\uBB38\uC5D0, \uBE4C\uB4DC\uB97C \uACC4\uC18D \uC9C4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-not.directory.warning = {0} \uC740/\uB294 \uB514\uB809\uD130\uB9AC\uAC00 \uC544\uB2D9\uB2C8\uB2E4.
-not.writable.warning  = {0} \uC740/\uB294 \uC4F0\uAE30\uB97C \uD5C8\uC6A9\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
-offline.snapshot.warning = \uC624\uD504\uB77C\uC778\uC73C\uB85C \uC791\uC5C5\uD558\uACE0 \uC788\uAE30 \uB54C\uBB38\uC5D0 \uBE4C\uB4DC\uB294 \uACC4\uC18D \uC9C4\uD589\uD558\uC9C0\uB9CC, {0} \uC740/\uB294 \uCD5C\uC2E0 \uBC84\uC804\uC774 \uC544\uB2D0 \uC218\uB3C4 \uC788\uC2B5\uB2C8\uB2E4!
-plugin.loading.error = \uD50C\uB7EC\uADF8\uC778 {0} \uC744/\uB97C \uC77D\uC5B4\uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
-remote.repository.disabled.warning = \uC6D0\uACA9 \uC800\uC7A5\uC18C \uC0AC\uC6A9\uC744 \uD5C8\uAC00\uD558\uC9C0 \uC54A\uC740(disabled) \uC0C1\uD0DC\uC785\uB2C8\uB2E4.
-single.unsatisfied.dependency.error = \uB2E4\uC74C\uC758 \uC758\uC874\uC131\uB4E4\uC744 \uB9CC\uC871\uC2DC\uD0A4\uC9C0 \uBABB\uD588\uAE30 \uB54C\uBB38\uC5D0, \uBE4C\uB4DC\uB97C \uACC4\uC18D \uC9C4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties
deleted file mode 100644
index 0e22d6c..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_nl.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=WAARSCHUWING: Kan {0} niet downloaden.
-remote.repository.disabled.warning=Het gebruik van de remote repository is uitgezet.
-directory.nonexistant.warning=Directory {0} bestaat niet. Probeer hem aan te maken.
-not.directory.warning={0} is geen  directory.
-not.writable.warning={0} is niet schrijfbaar.
-cannot.create.directory.warning=Kan {0} directory niet aanmaken
-maven.repo.local.unset.warning=maven.repo.local is niet ingesteld.
-single.unsatisfied.dependency.error=Het bouwen kan niet doorgaan, omdat de volgende afhankelijkheid niet achterhaald kan worden:
-multiple.unsatisfied.dependency.error=Het bouwen kan niet doorgaan, omdat de volgende afhankelijkheden niet achterhaald kunnen worden:
-offline.snapshot.warning=Je werkt offline, dus het bouwen gaat verder, maar {0} kan eventueel niet up-to-date zijn!
-download.message=Probeer {0} te downloaden.
-plugin.loading.error=De {0} plugin kan niet worden geladen.
-empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties
deleted file mode 100644
index af320f6..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_no.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=ADVARSEL: Mislykket nedlasting av {0}.
-remote.repository.disabled.warning=Bruk av fjernlager er deaktivert.
-directory.nonexistant.warning=Mappen {0} finnes ikke. Fors\u00f8ker \u00e5 opprette.
-not.directory.warning={0} er ikke en mappe.
-not.writable.warning=Kan ikke skirve til {0}.
-cannot.create.directory.warning=Kan ikke opprette mappen {0}.
-maven.repo.local.unset.warning=maven.repo.local er ikke definert.
-single.unsatisfied.dependency.error=Byggeprosessen kan ikke fortsette p\u00e5 grunn av f\u00f8lgende mislykkede avhengighet:
-multiple.unsatisfied.dependency.error=The build cannot continue because of the following unsatisfied dependencies:
-offline.snapshot.warning=Du arbeider frakoblet. Byggeprosessen vil fortsette, men {0} kan bli utdatert!
-download.message=Fors\u00f8ker \u00e5 laste ned {0}.
-plugin.loading.error=Plugin {0} kunne ikke lastes.
-empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties
deleted file mode 100644
index 36a292b..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_pl.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-# 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 Verifier
-# --------------------------------------------------------------------------
-failed.download.warning=UWAGA: Nie uda\u0142o si\u0119 sci\u0105gn\u0105\u0107 {0}.
-remote.repository.disabled.warning=Korzystanie ze zdalnego repozytorium jest wy\u0142\u0105czone.
-directory.nonexistant.warning=Katalog {0} nie istnieje. Pr\u00f3buj\u0119 utworzy\u0107.
-not.directory.warning={0} nie jest katalogiem.
-not.writable.warning=Nie mo\u017cesz zapisa\u0107 {0}.
-cannot.create.directory.warning=Nie mo\u017cesz utworzy\u0107 katalogu {0}.
-maven.repo.local.unset.warning=maven.repo.local nie jest zdefiniowane.
-single.unsatisfied.dependency.error=Budownaie przerwane z powodu nast\u0119puj\u0105cej niespe\u0142nionej zale\u017cno\u015bci:
-multiple.unsatisfied.dependency.error=Budownaie przerwane z powodu nast\u0119puj\u0105cych niespe\u0142nionych zale\u017cno\u015bci:
-offline.snapshot.warning=Pracujesz w trybie offline, wi\u0119c budowanie b\u0119dzie kontunuowane, cho\u0107 {0} mo\u017ce by\u0107 nieaktualny!
-download.message=Pr\u00f3buj\u0119 \u015bci\u0105gn\u0105\u0107 {0}.
-plugin.loading.error=Nie uda\u0142o si\u0119 za\u0142adowa\u0107 pluginu {0}.
-empty.descriptor.error=The {0} file you specified has zero length.
diff --git a/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties b/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties
deleted file mode 100644
index 9369518..0000000
--- a/maven-core/src/main/resources/org/apache/maven/messages/messages_zh_CN.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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.
-
-# --------------------------------------------------------------------------
-# \u9879\u76ee\u9a8c\u8bc1
-# --------------------------------------------------------------------------
-failed.download.warning=\u8b66\u544a\uff1a {0} \u4e0b\u8f7d\u5931\u8d25\u3002
-remote.repository.disabled.warning=\u7981\u6b62\u4f7f\u7528\u8fdc\u7a0b\u8d44\u6e90\u4ed3\u5e93\u3002
-directory.nonexistant.warning=\u76ee\u5f55 {0} \u4e0d\u5b58\u5728\u3002 \u5c1d\u8bd5\u65b0\u5efa\u4e2d\u2026\u2026
-not.directory.warning={0} \u4e0d\u662f\u76ee\u5f55\u3002
-not.writable.warning={0} \u53ea\u8bfb\u3002
-cannot.create.directory.warning=\u521b\u5efa\u76ee\u5f55 {0} \u5931\u8d25\u3002
-maven.repo.local.unset.warning=\u6ca1\u6709\u8bbe\u7f6e maven.repo.local \u5c5e\u6027\u3002
-single.unsatisfied.dependency.error=\u7531\u4e8e\u4ee5\u4e0b\u7684\u4f9d\u8d56\u7f3a\u5c11\uff0c\u521b\u5efa\u4e0d\u80fd\u8fdb\u884c\uff1a
-multiple.unsatisfied.dependency.error=\u7531\u4e8e\u4ee5\u4e0b\u7684\u4f9d\u8d56\u7f3a\u5c11\uff0c\u521b\u5efa\u4e0d\u80fd\u8fdb\u884c\uff1a
-offline.snapshot.warning=\u79bb\u7ebf\u65f6\u521b\u5efa\uff0c\u53ef\u80fd  {0} \u8fc7\u671f\uff01
-download.message=\u5c1d\u8bd5\u4e0b\u8f7d {0}\u2026\u2026
-plugin.loading.error=\u88c5\u5165 plugin {0} \u5931\u8d25\u3002
-empty.descriptor.error=\u6587\u4ef6 {0} \u7684\u957f\u5ea6\u4e3a0\u3002
-checksum.verification.error=\u4ee5\u4e0b\u8d44\u6e90\u5df2\u88ab\u7834\u574f\uff1a{0}\u3002
diff --git a/maven-core/src/site/apt/artifact-handlers.apt b/maven-core/src/site/apt/artifact-handlers.apt
index 916161b..1a4b344 100644
--- a/maven-core/src/site/apt/artifact-handlers.apt
+++ b/maven-core/src/site/apt/artifact-handlers.apt
@@ -39,16 +39,12 @@ Default Artifact Handlers Reference
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<ejb>>>          | <<<jar>>>  | <= type>   |               | java      | <<<true>>>          |                       |
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
-| <<<ejb3>>>         | <= type>   | <= type>   |               | java      |                     | <<<true>>>            |
-*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<war>>>          | <= type>   | <= type>   |               | java      |                     | <<<true>>>            |
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<ear>>>          | <= type>   | <= type>   |               | java      |                     | <<<true>>>            |
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<rar>>>          | <= type>   | <= type>   |               | java      |                     | <<<true>>>            |
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
-| <<<par>>>          | <= type>   | <= type>   |               | java      |                     | <<<true>>>            |
-*--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<java-source>>>  | <<<jar>>>  | <= type>   | <<<sources>>> | java      |                     |                       |
 *--------------------+------------+------------+---------------+-----------+---------------------+-----------------------+
 | <<<javadoc>>>      | <<<jar>>>  | <= type>   | <<<javadoc>>> | java      | <<<true>>>          |                       |
diff --git a/maven-core/src/site/apt/configuration-management.apt b/maven-core/src/site/apt/configuration-management.apt
index 4af0f0b..695ea99 100644
--- a/maven-core/src/site/apt/configuration-management.apt
+++ b/maven-core/src/site/apt/configuration-management.apt
@@ -66,7 +66,7 @@ ${maven.home}
  We once had a document that Vincent and I agreed upon and I was about to
  implement it and then I disappeared for 8 months so it never came to pass.
 
- So I guess it's important to figure out what people are using propeties
+ So I guess it's important to figure out what people are using properties
  files for and see if we can't incorporate it all into the POM. Or if we do
  have properties file (something I would like to avoid) say they don't
  contribute in any meaningful way to information in the POM. For example a
@@ -110,9 +110,9 @@ Unified source directory
  itself. This way locations of intermediary artifacts of a build would be
  in a known location. This would also help with developer setup i.e. getting
  new developers up and running. They could run a maven command and have all
- their source trees set up in the same way as their collegues.
+ their source trees set up in the same way as their colleagues.
 
- here's what I do currently in the netbeans part of the mevenide project to
+ here's what I do currently in the netbeans part of the mavenide project to
  find the relevant subprojects/sibling projects. I check if the user has
  defined the maven.multiproject.includes property in any of his properties
  files for the current project. if yes. then I'm able to find projects that
@@ -120,7 +120,7 @@ Unified source directory
  problems with the current solution are:
  1. information is duplicate. once in POM's dependencies and once in the
  maven.multiproject.includes property.
- 2. it works without problems only for projects with relative paths, eg. from
+ 2. it works without problems only for projects with relative paths, e.g., from
  one CVS repository.. for projects from multiple SCM repositories it's harder
  to maintain the same relative links on all developer computers.
  not sure the unified source directory structure addresses this issue.
diff --git a/maven-settings/src/site/apt/index.apt b/maven-core/src/site/apt/core-extensions.apt.vm
similarity index 67%
copy from maven-settings/src/site/apt/index.apt
copy to maven-core/src/site/apt/core-extensions.apt.vm
index 6e404e8..3d7abca 100644
--- a/maven-settings/src/site/apt/index.apt
+++ b/maven-core/src/site/apt/core-extensions.apt.vm
@@ -15,22 +15,16 @@
 ~~ specific language governing permissions and limitations
 ~~ under the License.
 
- -----
- Introduction
- -----
- Vincent Siveton
- -----
- 2006-11-04
- -----
+ ---
+ Maven Core Extensions Reference
+ ---
+ Hervé Boutemy
+ ---
+ 2016-06-25
+ ---
 
-Maven Settings Model
+Maven Core Extensions Reference
 
- This is strictly the model for Maven settings.
+  Maven core provides default extensions as defined in <<</META-INF/maven/extension.xml>>>:
 
- The following are generated from this model:
-
-   * {{{./apidocs/index.html}Java sources}} with Reader and Writers for the Xpp3 XML parser
-
-   * A {{{./settings.html}Descriptor Reference}}
-
-   * An {{{http://maven.apache.org/xsd/settings-1.0.0.xsd}XSD}}
+%{snippet|id=core-extension|file=${project.basedir}/src/main/resources/META-INF/maven/extension.xml}
diff --git a/maven-core/src/site/apt/default-bindings.apt.vm b/maven-core/src/site/apt/default-bindings.apt.vm
index 02d6c4a..50c4654 100644
--- a/maven-core/src/site/apt/default-bindings.apt.vm
+++ b/maven-core/src/site/apt/default-bindings.apt.vm
@@ -42,10 +42,6 @@ Plugin Bindings for <<<default>>> Lifecycle Reference
 
 %{snippet|id=ejb-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
 
-* Plugin bindings for <<<ejb3>>> packaging
-
-%{snippet|id=ejb3-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
-
 * Plugin bindings for <<<maven-plugin>>> packaging
 
 %{snippet|id=maven-plugin-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
@@ -62,6 +58,3 @@ Plugin Bindings for <<<default>>> Lifecycle Reference
 
 %{snippet|id=rar-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
 
-* Plugin bindings for <<<par>>> packaging
-
-%{snippet|id=par-lifecycle|file=${project.basedir}/src/main/resources/META-INF/plexus/default-bindings.xml}
diff --git a/maven-core/src/site/apt/index.apt b/maven-core/src/site/apt/index.apt
index f6c26fd..1e7a68e 100644
--- a/maven-core/src/site/apt/index.apt
+++ b/maven-core/src/site/apt/index.apt
@@ -27,14 +27,25 @@ Maven Core
 
  Maven Core classes managing the whole build process.
 
-* Useful entry points
+* Reference Documentation
 
  * {{{./lifecycles.html}lifecycles}} and {{{./default-bindings.html}plugin bindings to <<<default>>> lifecycle}},
 
  * {{{./artifact-handlers.html}default artifact handlers}},
 
+ * {{{./extension.html}extension descriptor}} and {{{./core-extensions.html}core extensions}},
+
+ * {{{/guides/mini/guide-maven-classloading.html}classloader hierarchy}} done by <<<ClassRealmManager>>> component
+ ({{{./apidocs/org/apache/maven/classrealm/ClassRealmManager.html}javadoc}}),
+ with its <<<DefaultClassRealmManager>>> implementation
+ ({{{./xref/org/apache/maven/classrealm/DefaultClassRealmManager.html}source}}), using
+ {{{https://codehaus-plexus.github.io/plexus-classworlds/}Plexus Classworlds}},
+
+* Useful entry points
+
  * <<<Maven>>> component ({{{./apidocs/org/apache/maven/Maven.html}javadoc}}),
- with its <<<DefaultMaven>>> implementation ({{{./xref/org/apache/maven/DefaultMaven.html}source}}),
+ with its <<<DefaultMaven>>> implementation ({{{./xref/org/apache/maven/DefaultMaven.html}source}}), to drive
+ a full <<<MavenSession>>> execution ({{{./apidocs/org/apache/maven/execution/MavenSession.html}javadoc}}
 
  * <<<ProjectBuilder>>> component ({{{./apidocs/org/apache/maven/project/ProjectBuilder.html}javadoc}}),
  with its <<<DefaultProjectBuilder>>> implementation
@@ -47,14 +58,6 @@ Maven Core
  * {{{./apidocs/org/apache/maven/plugin/PluginParameterExpressionEvaluator.html}PluginParameterExpressionEvaluator}}, used to
  evaluate plugin parameters values during Mojo configuration,
 
- * {{{/guides/mini/guide-maven-classloading.html}classloader hierarchy}} done by <<<ClassRealmManager>>> component
- ({{{./apidocs/org/apache/maven/classrealm/ClassRealmManager.html}javadoc}}),
- with its <<<DefaultClassRealmManager>>> implementation
- ({{{./xref/org/apache/maven/classrealm/DefaultClassRealmManager.html}source}}), using
- {{{http://plexus.codehaus.org/plexus-classworlds/}Plexus Classworlds}},
-
- * {{{./extension.html}extension descriptor}},
-
  * <<<ExceptionHandler>>> component ({{{./apidocs/org/apache/maven/exception/ExceptionHandler.html}javadoc}}),
  with its <<<DefaultExceptionHandler>>> implementation
  ({{{./xref/org/apache/maven/exception/DefaultExceptionHandler.html}source}}), use to transform exception into useful end-user messages.
diff --git a/maven-core/src/site/apt/offline-mode.apt b/maven-core/src/site/apt/offline-mode.apt
index faec70f..ff91bb5 100644
--- a/maven-core/src/site/apt/offline-mode.apt
+++ b/maven-core/src/site/apt/offline-mode.apt
@@ -167,7 +167,7 @@ Offline Mode Design
   This is wholly dependent on Maven-Wagon, above.
 
   We could possibly use a flag on a particular Wagon to see whether it supports
-  offline mode, and then test to see if the file-based basedir for an aritfact
+  offline mode, and then test to see if the file-based basedir for an artifact
   repository works...if it doesn't work, we can mark that repository offline...
 
   OTOH, all offline-mode checks can probably be run from Wagon-based APIs.
@@ -201,7 +201,7 @@ Offline Mode Design
   The majority of mojos will leave the requiresOnline == false,
   since online/offline status will be irrelevant, provided they have
   access to their required artifacts and other classpath elements. In the case
-  of required artifacts and other classpath elemtents, this is assumed by the
+  of required artifacts and other classpath elements, this is assumed by the
   mojo API to be in a correct state, and will be handled by the Wagon
   modifications.
 
diff --git a/maven-core/src/site/apt/plugin-execution-isolation.apt b/maven-core/src/site/apt/plugin-execution-isolation.apt
index 983a9fd..b298312 100644
--- a/maven-core/src/site/apt/plugin-execution-isolation.apt
+++ b/maven-core/src/site/apt/plugin-execution-isolation.apt
@@ -40,9 +40,9 @@ Maven plugin execution isolation
 
  The <<<plexus.core>>> realm contains the resources required to run any
  plexus application; The <<<plexus.core.maven>>> realm contains all of the
- resources required to run Maven. Each subseqent plugin realm contains the
+ resources required to run Maven. Each subsequent plugin realm contains the
  JAR plugin as well as its dependencies. The realms noted above are setup
- in a hierachical structure where the resources in the parent realms are
+ in a hierarchical structure where the resources in the parent realms are
  available but the <<realm is searched first before a search is made in
  the parent realm>>.
 
diff --git a/maven-core/src/site/apt/scripting-support/marmalade-support.apt b/maven-core/src/site/apt/scripting-support/marmalade-support.apt
deleted file mode 100644
index 7a80966..0000000
--- a/maven-core/src/site/apt/scripting-support/marmalade-support.apt
+++ /dev/null
@@ -1,196 +0,0 @@
-~~ 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.
-
-  ---
-  Marmalade Mojo Support - Notes
-  ---
-  John Casey
-  ---
-  07-Feb-2005
-  ---
-
-Marmalade Support
-
-*Abstract
-
-  This document will track the design and implementation issues involved in
-  adding support to m2 for marmalade-based mojos.
-
-*Design Notes
-
-  [[1]] <<Marmalade mojo descriptor specification.>>
-
-        As in all mojo specifications, it is ideal that the descriptor for
-        a marmalade-based mojo be inline with the source code. This centralizes
-        all maintenance related to a single mojo to a single point of maintenance.
-
-        The following is what I'm thinking as of now:
-
-        - a marmalade-based mojo should look something like:
-
-+---+
-        <mojo xmlns="m2:mojo" xmlns:marmalade-control="marmalade:marmalade-control" marmalade-control:el="none">
-
-          <metadata>
-            <id>mmld</id>
-            <name>mmldCompile</name>
-            <lifecyclePhase>compile</lifecyclePhase>
-            <description>Used to compile marmalade scripts into java beans.</description>
-
-            <requiresDependencyResolution/>
-            <instantiationStrategy/>
-            <executionStrategy/>
-
-            <parameters>
-
-              <parameter>
-                <name>classpath</name>
-                <description>The compilation classpath</description>
-                <type>java.util.List</type>
-                <expression>#pom.artifacts</expression>
-
-                <required/>
-                <validator/>
-                <default/>
-
-              </parameter>
-
-            </parameters>
-
-          </metadata>
-
-          <execute>
-            <!-- Do some stuff. -->
-          </execute>
-
-        </mojo>
-+---+
-[NOTE] All empty elements above signify optional elements, usage specification.
-
-  [[2]] <<Marmalade mojo packager.>>
-
-        The marmalade mojo packager will:
-
-        [[a]] Locate all *.mmld files within the scripts directory of the project.
-
-              The scripts directory should be tied to the script language within
-              the POM. Until we have multiple language support in the POM, we'll
-              use something like: <<<xpath(build/marmaladeSourceDirectory)>>>.
-
-        [[b]] For each script found:
-
-              [[i]]   Execute the script with "gatherMetadata=true" in the context.
-
-              [[ii]]  Retrieve the mojo descriptor from the resulting "metadata"
-                      variable in the context.
-
-              [[iii]] Cache the mojo descriptor in aggregator for subsequent
-                      output to plugin descriptor file.
-
-        [[c]] Copy all scripts to the target directory. Preserve relative paths.
-
-        [[d]] <<Process Disjoint:>> <Allow other mojo-descriptor collectors to
-              run, aggregating their descriptors in similar fashion to [b.iii]
-              above.>
-
-        [[e]] Use the project's dependencies and other info to form the plugin
-              descriptor's header (non-mojo-specific info).
-
-        [[f]] Use the PluginGenerator from maven-plugin-tools to generate a
-              META-INF/plexus/plugin.xml to the target directory.
-
-        [[g]] Continue with lifecycle.
-
-              This may include compilation of java helper classes, etc. and
-              plugin-artifact packaging, presumably via 'jar:jar' or similar.
-
-  [[3]] <<Marmalade mojo loader.>>
-
-        The marmalade mojo loader will:
-
-        [[a]] Retrieve the implementation spec (this is the path of the script,
-              relative to the root of the plugin filesystem...jar, etc.) to
-              $path.
-
-        [[b]] Use the context classloader to retrieve a reader to $path.
-
-        [[c]] Build the ScriptBuilder corresponding to the script.
-
-        [[d]] Create a new MarmaladeMojo instance which adapts the mojo calling
-              semantics to the creation/execution of a marmalade script.
-
-              Execution involves:
-
-              [[i]]   Creating a new MarmaladeScript instance.
-
-              [[ii]]  Creating an execution context which references all I/O
-                      from the main Maven execution thread, and embeds:
-
-                      - #request == MavenExecutionRequest
-
-                      - #response == MavenExecutionResponse
-
-                      - Any globally configured environmental constraints, such
-                        as a global preserve-whitespace setting
-
-              [[iii]] Execution of the script using the execution context.
-
-              [[iv]]  Export of the resulting context, minus any surviving input
-                      variables, to the MavenExecutionResponse's out-params.
-
-*Implementation Issues
-
-  [[1]] How do we make Maven smart enough to switch loader implementations based
-        on some sub-type of maven-plugin?
-
-        This is important, since the default mojo loader will not be smart
-        enough to do the job, and embedding this behavior in that loader is not
-        scalable or extensible enough to accommodate future expansion into the
-        realms of jython, groovy, etc...
-
-        <<UPDATE:07-FEB-2005>>
-
-        We'll plan on using some sort of language specification in the mojo
-        descriptor to determine which mojo loader to use, then we'll populate
-        the PluginLoader/PluginManager with a map of known languages->loaders.
-
-  [[2]] How do we make the plugin:install process smart enough to switch
-        generator implementations based on some sub-type of maven-plugin?
-
-        This is closely related to [1] above.
-
-        <<UPDATE:07-FEB-2005>>
-
-        See update in [3].
-
-  [[3]] Do we want to allow mixed-bag plugin implementations?
-
-        These might include a mix of standard-java and marmalade mojos. It
-        strikes me that many  marmalade-based mojos may use beans/tags that are
-        actually adapter classes for other third-party APIs (why they wouldn't
-        implement everything as java mojos in this cases is beyond me). If they
-        have java source inside the plugin source directory, we should probably
-        compile it and bundle it with the plugin scripts; but what if this source
-        also has mojo annotations? This will have implications for [1] and [2]
-        above.
-
-        <<UPDATE:07-FEB-2005>>
-
-        We will plan on allowing this sort of implementation, and simply start
-        by applying all known generators which have a source directory set in
-        the POM (or later, have a <language/> section, maybe). At any rate,
-        helper classes will be allowed for script-based mojos.
diff --git a/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle b/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle
index 722bc03..58811ba 100755
--- a/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle
+++ b/maven-core/src/site/resources/design/2.1-lifecycle-refactor.graffle
@@ -3548,7 +3548,7 @@ uses plugin prefix}</string>
 {\colortbl;\red255\green255\blue255;}
 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
 
-\f0\b\fs24 \cf0 \ul \ulc0 LifecyleBindingManager}</string>
+\f0\b\fs24 \cf0 \ul \ulc0 LifecycleBindingManager}</string>
 							</dict>
 						</dict>
 					</array>
diff --git a/maven-core/src/site/site.xml b/maven-core/src/site/site.xml
index 2c38d2a..9eb3ad0 100644
--- a/maven-core/src/site/site.xml
+++ b/maven-core/src/site/site.xml
@@ -34,6 +34,7 @@ under the License.
       <item name="Lifecycles" href="lifecycles.html"/>
       <item name="Plugin Bindings to Default Lifecycle" href="default-bindings.html"/>
       <item name="Artifact Handlers" href="artifact-handlers.html"/>
+      <item name="Core Extensions" href="core-extensions.html"/>
     </menu>
 
     <menu ref="parent"/>
diff --git a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
index 57d374f..157a5ec 100644
--- a/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
+++ b/maven-core/src/test/java/org/apache/maven/AbstractCoreMavenComponentTestCase.java
@@ -157,6 +157,7 @@ public abstract class AbstractCoreMavenComponentTestCase
             new MavenSession( getContainer(), configuration.getRepositorySession(), request,
                               new DefaultMavenExecutionResult() );
         session.setProjects( Arrays.asList( project ) );
+        session.setAllProjects( session.getProjects() );
 
         return session;
     }
diff --git a/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java b/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java
index e2caaeb..6ce201d 100644
--- a/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java
+++ b/maven-core/src/test/java/org/apache/maven/graph/DefaultProjectDependencyGraphTest.java
@@ -57,7 +57,7 @@ public class DefaultProjectDependencyGraphTest
     public void testVerifyExpectedParentStructure()
         throws CycleDetectedException, DuplicateProjectException
     {
-        // This test verifies the baseline structure used in susequent tests. If this fails, the rest will fail.
+        // This test verifies the baseline structure used in subsequent tests. If this fails, the rest will fail.
         ProjectDependencyGraph graph = threeProjectsDependingOnASingle();
         final List<MavenProject> sortedProjects = graph.getSortedProjects();
         assertEquals( aProject, sortedProjects.get( 0 ) );
@@ -66,7 +66,7 @@ public class DefaultProjectDependencyGraphTest
         assertEquals( depender3, sortedProjects.get( 3 ) );
     }
 
-    public void testVerifyThatDownsteamProjectsComeInSortedOrder()
+    public void testVerifyThatDownstreamProjectsComeInSortedOrder()
         throws CycleDetectedException, DuplicateProjectException
     {
         final List<MavenProject> downstreamProjects =
@@ -102,7 +102,7 @@ public class DefaultProjectDependencyGraphTest
         assertEquals( depender2, downstreamProjects.get( 3 ) );
     }
 
-    public void testWithTranistiveOnly()
+    public void testWithTransitiveOnly()
         throws CycleDetectedException, DuplicateProjectException
     {
         final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
@@ -115,7 +115,7 @@ public class DefaultProjectDependencyGraphTest
         assertEquals( depender2, downstreamProjects.get( 3 ) );
     }
 
-    public void testWithMissingTranistiveOnly()
+    public void testWithMissingTransitiveOnly()
         throws CycleDetectedException, DuplicateProjectException
     {
         final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
index 01ebeac..df585fb 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorSubModulesTest.java
@@ -83,7 +83,7 @@ public class LifecycleExecutorSubModulesTest
         return "src/test/projects/lifecycle-executor";
     }
 
-    public void testCrweation()
+    public void testCreation()
         throws Exception
     {
         assertNotNull( defaultLifeCycles );
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
index 951f133..5252a21 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/LifecycleExecutorTest.java
@@ -400,6 +400,11 @@ public class LifecycleExecutorTest
                 return Collections.emptyList();
             }
 
+            public List<MavenProject> getAllProjects()
+            {
+                return session.getAllProjects();
+            }
+
             public List<MavenProject> getSortedProjects()
             {
                 return Collections.singletonList( session.getCurrentProject() );
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
index a9af566..0e1c3c7 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/LifecycleExecutionPlanCalculatorTest.java
@@ -25,7 +25,7 @@ import org.apache.maven.lifecycle.internal.stub.PluginVersionResolverStub;
 import org.apache.maven.lifecycle.internal.stub.ProjectDependencyGraphStub;
 
 /**
- * @author Kristian Rosenvold>
+ * @author Kristian Rosenvold
  */
 public class LifecycleExecutionPlanCalculatorTest
     extends AbstractCoreMavenComponentTestCase
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
index 047ef9f..fd1baf7 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/ProjectBuildListTest.java
@@ -36,7 +36,7 @@ public class ProjectBuildListTest
 
         final ProjectBuildList byTaskSegment = projectBuildList.getByTaskSegment( taskSegment );
         assertEquals( projectBuildList.size(),
-                      byTaskSegment.size() ); // Todo: Make multiple segments on projectBuildList
+                      byTaskSegment.size() ); // TODO Make multiple segments on projectBuildList
     }
 
 }
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
index 8ad74b9..621318d 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/AboutTheStubs.html
@@ -25,7 +25,7 @@ under the License.
 </head>
 <body>
 <h2>Design</h2>
-These stubs can be thought of as hand-coded mock obects. They allow unit tests to test only specific
+These stubs can be thought of as hand-coded mock objects. They allow unit tests to test only specific
 aspects of a component while ignoring others.
 
 These stubs form an internally consistent data-set that is not expected to change. They are
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
index ad08549..90de4d8 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/LifecycleExecutionPlanCalculatorStub.java
@@ -87,7 +87,10 @@ public class LifecycleExecutionPlanCalculatorStub
 
     public final static MojoDescriptor SITE_DEPLOY = createMojoDescriptor( "site-deploy" );
 
-
+    /**
+     * @deprecated instead use {@link #getNumberOfExecutions(ProjectBuildList)}
+     */
+    @Deprecated
     public int getNumberOfExceutions( ProjectBuildList projectBuildList )
         throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
         NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
@@ -103,6 +106,14 @@ public class LifecycleExecutionPlanCalculatorStub
         return result;
     }
 
+    public int getNumberOfExecutions( ProjectBuildList projectBuildList )
+        throws InvalidPluginDescriptorException, PluginVersionResolutionException, PluginDescriptorParsingException,
+        NoPluginFoundForPrefixException, MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
+        LifecyclePhaseNotFoundException, LifecycleNotFoundException
+    {
+        return getNumberOfExceutions( projectBuildList );
+    }
+
     public void calculateForkedExecutions( MojoExecution mojoExecution, MavenSession session )
         throws MojoNotFoundException, PluginNotFoundException, PluginResolutionException,
         PluginDescriptorParsingException, NoPluginFoundForPrefixException, InvalidPluginDescriptorException,
diff --git a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
index 92c3adb..8df5055 100644
--- a/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
+++ b/maven-core/src/test/java/org/apache/maven/lifecycle/internal/stub/ProjectDependencyGraphStub.java
@@ -42,14 +42,15 @@ import java.util.List;
 
 /**
  * A stub dependency graph that is custom made for testing concurrent build graph evaluations.
- * <p/>
+ * <p>
  * Implements a graph as follows:
  * A has no dependencies
  * B depends on A
  * C depends on A
- * X depends on B & C
+ * X depends on B & C
  * Y depends on B
  * Z depends on C
+ * </p>
  *
  * @author Kristian Rosenvold
  */
@@ -169,9 +170,14 @@ public class ProjectDependencyGraphStub
         return dependencies;
     }
 
+    public List<MavenProject> getAllProjects()
+    {
+        return Arrays.asList( A, B, C, X, Y, Z, UNKNOWN );
+    }
+
     public List<MavenProject> getSortedProjects()
     {
-        return Arrays.asList( A, B, C, X, Y, Z ); // I'm not entirely sure about the order but this shold do...
+        return Arrays.asList( A, B, C, X, Y, Z ); // I'm not entirely sure about the order but this should do...
     }
 
     public List<MavenProject> getDownstreamProjects( MavenProject project, boolean transitive )
diff --git a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
index 025e772..ad9a192 100644
--- a/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/plugin/PluginManagerTest.java
@@ -103,7 +103,7 @@ public class PluginManagerTest
     // Tests which exercise the lifecycle executor when it is dealing with individual goals.
     // -----------------------------------------------------------------------------------------------
 
-    //TODO: These two tests display a lack of symmetry with respect to the input which is a free form string and the
+    //TODO These two tests display a lack of symmetry with respect to the input which is a free form string and the
     //      mojo descriptor which comes back. All the free form parsing needs to be done somewhere else, this is
     //      really the function of the CLI, and then the pre-processing of that output still needs to be fed into
     //      a hinting process which helps flesh out the full specification of the plugin. The plugin manager should
@@ -113,13 +113,13 @@ public class PluginManagerTest
     public void testRemoteResourcesPlugin()
         throws Exception
     {
-        //TODO: turn an equivalent back on when the RR plugin is released.
+        //TODO turn an equivalent back on when the RR plugin is released.
 
         /*
 
         This will not work until the RR plugin is released to get rid of the binding to the reporting exception which is a mistake.
 
-        This happpens after removing the reporting API from the core:
+        This happens after removing the reporting API from the core:
 
         java.lang.NoClassDefFoundError: org/apache/maven/reporting/MavenReportException
 
@@ -138,7 +138,7 @@ public class PluginManagerTest
         */
     }
 
-    //TODO: this will be the basis of the customizable lifecycle execution so need to figure this out quickly.
+    //TODO this will be the basis of the customizable lifecycle execution so need to figure this out quickly.
     public void testSurefirePlugin()
         throws Exception
     {
diff --git a/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
index d350770..25aa176 100644
--- a/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
+++ b/maven-core/src/test/java/org/apache/maven/plugin/internal/DefaultLegacySupportTest.java
@@ -59,7 +59,7 @@ public class DefaultLegacySupportTest extends TestCase {
             {
                 latch.await();
             }
-            catch (InterruptedException ingore)
+            catch (InterruptedException ignore)
             {
                 // Test may fail if we get interrupted
             }
diff --git a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
index 73bdbca..71616fa 100644
--- a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
+++ b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
@@ -169,6 +169,17 @@ public abstract class AbstractMavenProjectTestCase
         return projectBuilder.build( pom, configuration ).getProject();
     }
 
+    protected MavenProject getProjectFromRemoteRepository( final File pom )
+        throws Exception
+    {
+        final ProjectBuildingRequest configuration = new DefaultProjectBuildingRequest();
+        configuration.setLocalRepository( this.getLocalRepository() );
+        configuration.setRemoteRepositories( Arrays.asList( this.repositorySystem.createDefaultRemoteRepository() ) );
+        initRepoSession( configuration );
+
+        return projectBuilder.build( pom, configuration ).getProject();
+    }
+
     protected ProjectBuildingRequest newBuildingRequest()
         throws Exception
     {
diff --git a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
index d61fc6e..73629bc 100644
--- a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
@@ -86,7 +86,7 @@ public class DefaultMavenProjectBuilderTest
     }
 
     /**
-     * Check that we can build ok from the middle pom of a (parent,child,grandchild) heirarchy
+     * Check that we can build ok from the middle pom of a (parent,child,grandchild) hierarchy
      * @throws Exception
      */
     public void testBuildFromMiddlePom() throws Exception
@@ -189,4 +189,134 @@ public class DefaultMavenProjectBuilderTest
         request.setResolveDependencies( true );
         projectBuilder.build( pomFile, request );
     }
+
+    /**
+     * Tests whether local version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildValidParentVersionRangeLocally() throws Exception
+    {
+        File f1 = getTestFile( "src/test/resources/projects/parent-version-range-local-valid/child/pom.xml" );
+
+        final MavenProject childProject = getProject( f1 );
+
+        assertNotNull( childProject.getParentArtifact() );
+        assertEquals( childProject.getParentArtifact().getVersion(), "1" );
+        assertNotNull( childProject.getParent() );
+        assertEquals( childProject.getParent().getVersion(), "1" );
+        assertNotNull( childProject.getModel().getParent() );
+        assertEquals( childProject.getModel().getParent().getVersion(), "[1,10]" );
+    }
+
+    /**
+     * Tests whether local version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildParentVersionRangeLocallyWithoutChildVersion() throws Exception
+    {
+        File f1 =
+            getTestFile( "src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml" );
+
+        try
+        {
+            getProject( f1 );
+            fail( "Expected 'ProjectBuildingException' not thrown." );
+        }
+        catch ( final ProjectBuildingException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().contains( "Version must be a constant" ) );
+        }
+    }
+
+    /**
+     * Tests whether local version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildParentVersionRangeLocallyWithChildVersionExpression() throws Exception
+    {
+        File f1 =
+            getTestFile(
+                "src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml" );
+
+        try
+        {
+            getProject( f1 );
+            fail( "Expected 'ProjectBuildingException' not thrown." );
+        }
+        catch ( final ProjectBuildingException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().contains( "Version must be a constant" ) );
+        }
+    }
+
+    /**
+     * Tests whether external version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildParentVersionRangeExternally() throws Exception
+    {
+        File f1 = getTestFile( "src/test/resources/projects/parent-version-range-external-valid/pom.xml" );
+
+        final MavenProject childProject = this.getProjectFromRemoteRepository( f1 );
+
+        assertNotNull( childProject.getParentArtifact() );
+        assertEquals( childProject.getParentArtifact().getVersion(), "1" );
+        assertNotNull( childProject.getParent() );
+        assertEquals( childProject.getParent().getVersion(), "1" );
+        assertNotNull( childProject.getModel().getParent() );
+        assertEquals( childProject.getModel().getParent().getVersion(), "[1,1]" );
+    }
+
+    /**
+     * Tests whether external version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildParentVersionRangeExternallyWithoutChildVersion() throws Exception
+    {
+        File f1 =
+            getTestFile(
+                "src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml" );
+
+        try
+        {
+            this.getProjectFromRemoteRepository( f1 );
+            fail( "Expected 'ProjectBuildingException' not thrown." );
+        }
+        catch ( final ProjectBuildingException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().contains( "Version must be a constant" ) );
+        }
+    }
+
+    /**
+     * Tests whether external version range parent references are build correctly.
+     *
+     * @throws Exception
+     */
+    public void testBuildParentVersionRangeExternallyWithChildVersionExpression() throws Exception
+    {
+        File f1 =
+            getTestFile(
+                "src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml" );
+
+        try
+        {
+            this.getProjectFromRemoteRepository( f1 );
+            fail( "Expected 'ProjectBuildingException' not thrown." );
+        }
+        catch ( final ProjectBuildingException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().contains( "Version must be a constant" ) );
+        }
+    }
+
 }
diff --git a/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java b/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
index fb5c4c0..c843ca7 100644
--- a/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
+++ b/maven-core/src/test/java/org/apache/maven/project/EmptyProjectBuildingHelper.java
@@ -49,7 +49,7 @@ public class EmptyProjectBuildingHelper
         }
     }
 
-    public ProjectRealmCache.CacheRecord createProjectRealm( MavenProject proejct,
+    public ProjectRealmCache.CacheRecord createProjectRealm( MavenProject project,
                                                              Model model, ProjectBuildingRequest request )
     {
         return new ProjectRealmCache.CacheRecord( null, null );
diff --git a/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java b/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
index 52fdd80..c919cdf 100644
--- a/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
+++ b/maven-core/src/test/java/org/apache/maven/project/LegacyLocalRepositoryManager.java
@@ -59,7 +59,7 @@ public class LegacyLocalRepositoryManager
 
         path.append( artifact.getGroupId() ).append( '/' );
 
-        path.append( artifact.getExtension() ).append( 's' ).append( '/' );
+        path.append( artifact.getExtension() ).append( "s/" );
 
         path.append( artifact.getArtifactId() ).append( '-' ).append( artifact.getVersion() );
 
diff --git a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
index 988df76..ba5e3a0 100644
--- a/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
@@ -94,7 +94,7 @@ public class PomConstructionTest
     }
 
     /**
-     * Tests that modules is not overriden by profile
+     * Tests that modules is not overridden by profile
      *
      * @throws Exception
      */
@@ -207,7 +207,7 @@ public class PomConstructionTest
     {
         try
         {
-            buildPom( "unique-dependency-key/dep-mngt" );
+            buildPom( "unique-dependency-key/dep-mgmt" );
             fail( "Non-unique dependency keys did not cause validation error" );
         }
         catch ( ProjectBuildingException e )
@@ -235,7 +235,7 @@ public class PomConstructionTest
     {
         try
         {
-            buildPom( "unique-dependency-key/dep-mngt-in-profile" );
+            buildPom( "unique-dependency-key/dep-mgmt-in-profile" );
             fail( "Non-unique dependency keys did not cause validation error" );
         }
         catch ( ProjectBuildingException e )
@@ -414,7 +414,7 @@ public class PomConstructionTest
     public void testOrderOfGoalsFromPluginExecutionWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-goals-order/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-goals-order/wo-plugin-mgmt" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
         assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
@@ -427,7 +427,7 @@ public class PomConstructionTest
     public void testOrderOfGoalsFromPluginExecutionWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-goals-order/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-goals-order/w-plugin-mgmt" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
         assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "a", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
@@ -439,7 +439,7 @@ public class PomConstructionTest
     public void testOrderOfPluginExecutionsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-order/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-order/wo-plugin-mgmt" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
         assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
@@ -452,7 +452,7 @@ public class PomConstructionTest
     public void testOrderOfPluginExecutionsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-order/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-order/w-plugin-mgmt" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "b", pom.getValue( "build/plugins[1]/executions[1]/id" ) );
         assertEquals( "a", pom.getValue( "build/plugins[1]/executions[2]/id" ) );
@@ -488,7 +488,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginExecutionsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-exec-order/wo-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-exec-order/wo-plugin-mgmt/sub" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
@@ -500,7 +500,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginExecutionsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-exec-order/w-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-exec-order/w-plugin-mgmt/sub" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "parent-1", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "parent-2", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
@@ -522,7 +522,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginExecutionGoalsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/wo-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/wo-plugin-mgmt/sub" );
 
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
         assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
@@ -535,7 +535,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginExecutionGoalsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/w-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-exec-goals-order/w-plugin-mgmt/sub" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/executions[1]/goals" ) ).size() );
         assertEquals( "child-a", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "merged", pom.getValue( "build/plugins[1]/executions[1]/goals[2]" ) );
@@ -548,7 +548,7 @@ public class PomConstructionTest
     public void testOverridingOfInheritedPluginExecutionsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-merging/wo-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "plugin-exec-merging/wo-plugin-mgmt/sub" );
         assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
         assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
@@ -558,7 +558,7 @@ public class PomConstructionTest
     public void testOverridingOfInheritedPluginExecutionsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-merging/w-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "plugin-exec-merging/w-plugin-mgmt/sub" );
         assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "child-default", pom.getValue( "build/plugins[1]/executions[@id='default']/phase" ) );
         assertEquals( "child-non-default", pom.getValue( "build/plugins[1]/executions[@id='non-default']/phase" ) );
@@ -569,7 +569,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginDependenciesWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/wo-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/wo-plugin-mgmt/sub" );
 
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
         assertNotNull( pom.getValue( "build/plugins[1]/dependencies[1]" ) );
@@ -588,7 +588,7 @@ public class PomConstructionTest
     public void testOrderOfMergedPluginDependenciesWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/w-plugin-mngt/sub" );
+        PomTestWrapper pom = buildPom( "merged-plugin-class-path-order/w-plugin-mgmt/sub" );
         assertEquals( 5, ( (List<?>) pom.getValue( "build/plugins[1]/dependencies" ) ).size() );
         assertEquals( "c", pom.getValue( "build/plugins[1]/dependencies[1]/artifactId" ) );
         assertEquals( "1", pom.getValue( "build/plugins[1]/dependencies[1]/version" ) );
@@ -769,7 +769,7 @@ public class PomConstructionTest
     public void testOrderOfPluginConfigurationElementsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-config-order/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-config-order/wo-plugin-mgmt" );
         assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
         assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
         assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
@@ -780,7 +780,7 @@ public class PomConstructionTest
     public void testOrderOfPluginConfigurationElementsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-config-order/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-config-order/w-plugin-mgmt" );
         assertEquals( "one", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[1]" ) );
         assertEquals( "two", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[2]" ) );
         assertEquals( "three", pom.getValue( "build/plugins[1]/configuration/stringParams/stringParam[3]" ) );
@@ -790,7 +790,7 @@ public class PomConstructionTest
     public void testOrderOfPluginExecutionConfigurationElementsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-config-order/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-config-order/wo-plugin-mgmt" );
         String prefix = "build/plugins[1]/executions[1]/configuration/";
         assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
         assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
@@ -804,7 +804,7 @@ public class PomConstructionTest
     public void testOrderOfPluginExecutionConfigurationElementsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-config-order/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-config-order/w-plugin-mgmt" );
         String prefix = "build/plugins[1]/executions[1]/configuration/";
         assertEquals( "one", pom.getValue( prefix + "stringParams/stringParam[1]" ) );
         assertEquals( "two", pom.getValue( prefix + "stringParams/stringParam[2]" ) );
@@ -876,7 +876,7 @@ public class PomConstructionTest
     public void testMultiplePluginExecutionsWithAndWithoutIdsWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/wo-plugin-mgmt" );
         assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
@@ -885,7 +885,7 @@ public class PomConstructionTest
     public void testMultiplePluginExecutionsWithAndWithoutIdsWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-exec-w-and-wo-id/w-plugin-mgmt" );
         assertEquals( 2, ( (List<?>) pom.getValue( "build/plugins[1]/executions" ) ).size() );
         assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[1]/goals[1]" ) );
         assertEquals( "log-string", pom.getValue( "build/plugins[1]/executions[2]/goals[1]" ) );
@@ -894,7 +894,7 @@ public class PomConstructionTest
     public void testDependencyOrderWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "dependency-order/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "dependency-order/wo-plugin-mgmt" );
         assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
         assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
         assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
@@ -905,7 +905,7 @@ public class PomConstructionTest
     public void testDependencyOrderWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "dependency-order/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "dependency-order/w-plugin-mgmt" );
         assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
         assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
         assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
@@ -1033,7 +1033,7 @@ public class PomConstructionTest
     public void testPluginConfigurationUsingAttributesWithoutPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-config-attributes/wo-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-config-attributes/wo-plugin-mgmt" );
         assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
         assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
         assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
@@ -1045,7 +1045,7 @@ public class PomConstructionTest
     public void testPluginConfigurationUsingAttributesWithPluginManagement()
         throws Exception
     {
-        PomTestWrapper pom = buildPom( "plugin-config-attributes/w-plugin-mngt" );
+        PomTestWrapper pom = buildPom( "plugin-config-attributes/w-plugin-mgmt" );
         assertEquals( "src", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@todir" ) );
         assertEquals( "true", pom.getValue( "build/plugins[1]/configuration/domParam/copy/@overwrite" ) );
         assertEquals( "target", pom.getValue( "build/plugins[1]/configuration/domParam/copy/fileset/@dir" ) );
@@ -1518,7 +1518,7 @@ public class PomConstructionTest
     {
         Properties sysProps = new Properties();
         sysProps.setProperty( "system.property", "PASSED" );
-        PomTestWrapper pom = buildPom( "sytem-property-interpolation", sysProps );
+        PomTestWrapper pom = buildPom( "system-property-interpolation", sysProps );
         assertEquals( "PASSED", pom.getValue( "name" ) );
     }
 
diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java
new file mode 100644
index 0000000..6302a82
--- /dev/null
+++ b/maven-core/src/test/java/org/apache/maven/project/ProjectModelResolverTest.java
@@ -0,0 +1,246 @@
+package org.apache.maven.project;
+
+/*
+ * 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.Collections;
+import java.util.List;
+
+import org.apache.maven.artifact.InvalidRepositoryException;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertNotNull;
+import static junit.framework.TestCase.assertTrue;
+import static junit.framework.TestCase.fail;
+import static org.codehaus.plexus.PlexusTestCase.getBasedir;
+
+/**
+ * Test cases for the project {@code ModelResolver} implementation.
+ *
+ * @author Christian Schulte
+ * @since 3.5.0
+ */
+public class ProjectModelResolverTest extends AbstractMavenProjectTestCase
+{
+
+    /**
+     * Creates a new {@code ProjectModelResolverTest} instance.
+     */
+    public ProjectModelResolverTest()
+    {
+        super();
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenNotFound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "org.apache" );
+        parent.setArtifactId( "apache" );
+        parent.setVersion( "0" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().startsWith( "Could not find artifact org.apache:apache:pom:0 in central" ) );
+        }
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenNoMatchingVersionFound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "org.apache" );
+        parent.setArtifactId( "apache" );
+        parent.setVersion( "[2.0,2.1)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "No versions matched the requested parent version range '[2.0,2.1)'",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenUsingRangesWithoutUpperBound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "org.apache" );
+        parent.setArtifactId( "apache" );
+        parent.setVersion( "[1,)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "The requested parent version range '[1,)' does not specify an upper bound",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveParentSuccessfullyResolvesExistingParentWithoutRange() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "org.apache" );
+        parent.setArtifactId( "apache" );
+        parent.setVersion( "1" );
+
+        assertNotNull( this.newModelResolver().resolveModel( parent ) );
+        assertEquals( "1", parent.getVersion() );
+    }
+
+    public void testResolveParentSuccessfullyResolvesExistingParentUsingHighestVersion() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "org.apache" );
+        parent.setArtifactId( "apache" );
+        parent.setVersion( "(,2.0)" );
+
+        assertNotNull( this.newModelResolver().resolveModel( parent ) );
+        assertEquals( "1", parent.getVersion() );
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenNotFound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "org.apache" );
+        dependency.setArtifactId( "apache" );
+        dependency.setVersion( "0" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().startsWith( "Could not find artifact org.apache:apache:pom:0 in central" ) );
+        }
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenNoMatchingVersionFound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "org.apache" );
+        dependency.setArtifactId( "apache" );
+        dependency.setVersion( "[2.0,2.1)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "No versions matched the requested dependency version range '[2.0,2.1)'",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenUsingRangesWithoutUpperBound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "org.apache" );
+        dependency.setArtifactId( "apache" );
+        dependency.setVersion( "[1,)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "The requested dependency version range '[1,)' does not specify an upper bound",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveDependencySuccessfullyResolvesExistingDependencyWithoutRange() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "org.apache" );
+        dependency.setArtifactId( "apache" );
+        dependency.setVersion( "1" );
+
+        assertNotNull( this.newModelResolver().resolveModel( dependency ) );
+        assertEquals( "1", dependency.getVersion() );
+    }
+
+    public void testResolveDependencySuccessfullyResolvesExistingDependencyUsingHighestVersion() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "org.apache" );
+        dependency.setArtifactId( "apache" );
+        dependency.setVersion( "(,2.0)" );
+
+        assertNotNull( this.newModelResolver().resolveModel( dependency ) );
+        assertEquals( "1", dependency.getVersion() );
+    }
+
+    private ModelResolver newModelResolver() throws Exception
+    {
+        final File localRepo = new File( this.getLocalRepository().getBasedir() );
+        final DefaultRepositorySystemSession repoSession = MavenRepositorySystemUtils.newSession();
+        repoSession.setLocalRepositoryManager( new LegacyLocalRepositoryManager( localRepo ) );
+
+        return new ProjectModelResolver( repoSession, null, lookup( RepositorySystem.class ),
+                                         lookup( RemoteRepositoryManager.class ),
+                                         this.getRemoteRepositories(),
+                                         ProjectBuildingRequest.RepositoryMerging.REQUEST_DOMINANT, null );
+
+    }
+
+    private List<RemoteRepository> getRemoteRepositories()
+        throws InvalidRepositoryException
+    {
+        final File repoDir = new File( getBasedir(), "src/test/remote-repo" ).getAbsoluteFile();
+        final RemoteRepository remoteRepository =
+            new RemoteRepository.Builder( org.apache.maven.repository.RepositorySystem.DEFAULT_REMOTE_REPO_ID,
+                                          "default", repoDir.toURI().toASCIIString() ).build();
+
+        return Collections.singletonList( remoteRepository );
+    }
+
+}
diff --git a/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java b/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
index eda9010..c145ee0 100644
--- a/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
@@ -64,11 +64,11 @@ public class ProjectSorterTest
 
     private Dependency createDependency( String groupId, String artifactId, String version )
     {
-        Dependency depdendency = new Dependency();
-        depdendency.setGroupId( groupId );
-        depdendency.setArtifactId( artifactId );
-        depdendency.setVersion( version );
-        return depdendency;
+        Dependency dependency = new Dependency();
+        dependency.setGroupId( groupId );
+        dependency.setArtifactId( artifactId );
+        dependency.setVersion( version );
+        return dependency;
     }
 
     private Plugin createPlugin( MavenProject project )
diff --git a/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java b/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
index 9c770da..5486e96 100644
--- a/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/artifact/MavenMetadataSourceTest.java
@@ -90,7 +90,7 @@ public class MavenMetadataSourceTest
         */
     }
 
-    //TODO: restore these if it makes sense
+    //TODO restore these if it makes sense
     /*
     public void testShouldUseCompileScopeIfDependencyScopeEmpty()
         throws Exception
diff --git a/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java b/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
index 91ace4f..cb1243c 100644
--- a/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
+++ b/maven-core/src/test/java/org/apache/maven/repository/TestRepositoryConnector.java
@@ -27,6 +27,7 @@ import java.util.Collection;
 
 import org.codehaus.plexus.util.FileUtils;
 import org.eclipse.aether.artifact.Artifact;
+import org.eclipse.aether.metadata.Metadata;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.spi.connector.ArtifactDownload;
 import org.eclipse.aether.spi.connector.ArtifactUpload;
@@ -35,6 +36,8 @@ import org.eclipse.aether.spi.connector.MetadataUpload;
 import org.eclipse.aether.spi.connector.RepositoryConnector;
 import org.eclipse.aether.transfer.ArtifactNotFoundException;
 import org.eclipse.aether.transfer.ArtifactTransferException;
+import org.eclipse.aether.transfer.MetadataNotFoundException;
+import org.eclipse.aether.transfer.MetadataTransferException;
 
 /**
  * @author Benjamin Bentmann
@@ -89,6 +92,28 @@ public class TestRepositoryConnector
                 }
             }
         }
+        if ( metadataDownloads != null )
+        {
+            for ( final MetadataDownload download : metadataDownloads )
+            {
+                File remoteFile = new File( basedir, path( download.getMetadata() ) );
+                try
+                {
+                    FileUtils.copyFile( remoteFile, download.getFile() );
+                }
+                catch ( IOException e )
+                {
+                    if ( !remoteFile.exists() )
+                    {
+                        download.setException( new MetadataNotFoundException( download.getMetadata(), repository ) );
+                    }
+                    else
+                    {
+                        download.setException( new MetadataTransferException( download.getMetadata(), repository, e ) );
+                    }
+                }
+            }
+        }
     }
 
     private String path( Artifact artifact )
@@ -113,6 +138,19 @@ public class TestRepositoryConnector
         return path.toString();
     }
 
+    private String path( Metadata metadata )
+    {
+        StringBuilder path = new StringBuilder( 128 );
+
+        path.append( metadata.getGroupId().replace( '.', '/' ) ).append( '/' );
+
+        path.append( metadata.getArtifactId() ).append( '/' );
+
+        path.append( "maven-metadata.xml" );
+
+        return path.toString();
+    }
+
     public void put( Collection<? extends ArtifactUpload> artifactUploads,
                      Collection<? extends MetadataUpload> metadataUploads )
     {
diff --git a/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java b/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java
index 536e1a6..5ad762a 100644
--- a/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/toolchain/merge/MavenToolchainMergerTest.java
@@ -84,7 +84,7 @@ public class MavenToolchainMergerTest
             PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
             assertEquals( 2, jdks.getToolchains().size() );
 
-            // switch dominant with reccessive
+            // switch dominant with recessive
             merger.merge( jdksExtra, jdks, TrackableBase.USER_LEVEL );
             assertEquals( 4, jdksExtra.getToolchains().size() );
             assertEquals( 2, jdks.getToolchains().size() );
@@ -119,7 +119,7 @@ public class MavenToolchainMergerTest
             PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
             assertEquals( 2, jdks.getToolchains().size() );
 
-            // switch dominant with reccessive
+            // switch dominant with recessive
             merger.merge( jdksExtend, jdks, TrackableBase.USER_LEVEL );
             assertEquals( 2, jdksExtend.getToolchains().size() );
             Xpp3Dom config0 = (Xpp3Dom) jdksExtend.getToolchains().get( 0 ).getConfiguration();
diff --git a/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java b/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java
index 469cb2c..b1ae1ed 100644
--- a/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java
+++ b/maven-core/src/test/projects/lifecycle-executor/project-with-additional-lifecycle-elements/src/test/java/org/apache/maven/lifecycle/test/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom b/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom
new file mode 100644
index 0000000..ad6b854
--- /dev/null
+++ b/maven-core/src/test/remote-repo/org/apache/apache/1/apache-1.pom
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  ~ Copyright 2005-2006 The Apache Software Foundation.
+  ~
+  ~ 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.
+  -->
+
+<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 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <!-- Shared parent. Doesn't define a lot of things about Apache like general mailing lists, but does
+       define the settings common to all projects at Apache -->
+  <groupId>org.apache</groupId>
+  <artifactId>apache</artifactId>
+  <version>1</version>
+  <packaging>pom</packaging>
+  <name>The Apache Software Foundation</name>
+  <description>
+    The Apache Software Foundation provides support for the Apache community of open-source software projects.
+    The Apache projects are characterized by a collaborative, consensus based development process, an open and
+    pragmatic software license, and a desire to create high quality software that leads the way in its field.
+    We consider ourselves not simply a group of projects sharing a server, but rather a community of developers
+    and users.
+  </description>
+  <licenses>
+    <license>
+      <name>The Apache Software License, Version 2.0</name>
+      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+      <distribution>repo</distribution>
+    </license>
+  </licenses>
+  <organization>
+    <name>Apache Software Foundation</name>
+    <url>http://www.apache.org/</url>
+  </organization>
+  <url>http://www.apache.org/</url>
+  <repositories>
+    <repository>
+      <id>apache.snapshots</id>
+      <name>Apache Snapshot Repository</name>
+      <url>http://svn.apache.org/maven-snapshot-repository</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+    </repository>
+  </repositories>
+  <distributionManagement>
+    <!-- Site omitted - each project must provide their own -->
+    <repository>
+      <id>apache.releases</id>
+      <name>Apache Release Distribution Repository</name>
+      <url>scp://minotaur.apache.org/www/www.apache.org/dist/maven-repository</url>
+    </repository>
+    <snapshotRepository>
+      <id>apache.snapshots</id>
+      <name>Apache Development Snapshot Repository</name>
+      <url>scp://minotaur.apache.org/www/cvs.apache.org/maven-snapshot-repository</url>
+    </snapshotRepository>
+  </distributionManagement>
+  <mailingLists>
+    <mailingList>
+      <name>Apache Announce List</name>
+      <subscribe>announce-subscribe at apache.org</subscribe>
+      <unsubscribe>announce-unsubscribe at apache.org</unsubscribe>
+      <post>announce at apache.org</post>
+      <archive>http://mail-archives.apache.org/mod_mbox/www-announce/</archive>
+    </mailingList>
+  </mailingLists>
+</project>
+
diff --git a/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml b/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml
new file mode 100644
index 0000000..596f967
--- /dev/null
+++ b/maven-core/src/test/remote-repo/org/apache/apache/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metadata>
+  <groupId>org.apache</groupId>
+  <artifactId>apache</artifactId>
+  <versioning>
+    <latest>1</latest>
+    <release>1</release>
+    <versions>
+      <version>1</version>
+    </versions>
+    <lastUpdated>20150428055824</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/dependency-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/dependency-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/foo/sub/pom.xml b/maven-core/src/test/resources-project-builder/foo/sub/pom.xml
index c5e3d9a..dc10bd1 100644
--- a/maven-core/src/test/resources-project-builder/foo/sub/pom.xml
+++ b/maven-core/src/test/resources-project-builder/foo/sub/pom.xml
@@ -25,10 +25,6 @@
       <artifactId>dom4j</artifactId>
     </dependency>
     <dependency>
-      <groupId>jdom</groupId>
-      <artifactId>jdom</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-model</artifactId>
     </dependency>
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/w-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-class-path-order/wo-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/w-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-goals-order/wo-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-order/w-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/merged-plugin-exec-order/wo-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-config-attributes/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-config-attributes/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-config-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-config-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-config-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-config-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-goals-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-goals-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-merging/w-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mgmt/sub/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mngt/sub/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-merging/wo-plugin-mgmt/sub/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-order/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-order/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/w-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml b/maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/plugin-exec-w-and-wo-id/wo-plugin-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml b/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
index f66ae25..477a759 100644
--- a/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
+++ b/maven-core/src/test/resources-project-builder/plugin-inheritance-order/pom.xml
@@ -29,7 +29,7 @@ under the License.
 
   <name>Maven Integration Test :: MNG-3808</name>
   <description>
-    Test the reports are executeed in the order given in the POM.
+    Test the reports are executed in the order given in the POM.
   </description>
 
   <build>
diff --git a/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml b/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml
index ae74902..2dbddd6 100644
--- a/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml
+++ b/maven-core/src/test/resources-project-builder/pom-inheritance/sub/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <modelVersion>4.0.0</modelVersion>
 
   <!--
-  This minimalistic POM tests mere inheritance from its parent.
+  This minimalist POM tests mere inheritance from its parent.
   -->
 
   <parent>
diff --git a/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml b/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml
index 349a0c3..910018a 100644
--- a/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml
+++ b/maven-core/src/test/resources-project-builder/prerequisites-inheritance/child/pom.xml
@@ -23,7 +23,7 @@ under the License.
   <modelVersion>4.0.0</modelVersion>
 
   <!--
-  This minimalistic POM tests mere inheritance from its parent. The <prerequisites> should not be inherited.
+  This minimalist POM tests mere inheritance from its parent. The <prerequisites> should not be inherited.
   -->
 
   <parent>
diff --git a/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml b/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml
index 5c1daca..5905657 100644
--- a/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml
+++ b/maven-core/src/test/resources-project-builder/repo-inheritance/pom.xml
@@ -27,7 +27,7 @@ under the License.
   <version>1.0-SNAPSHOT</version>
 
   <name>Maven Integration Test :: it0043</name>
-  <description>Test for repository inheritence - ensure using the same id overrides the defaults</description>
+  <description>Test for repository inheritance - ensure using the same id overrides the defaults</description>
 
   <repositories>
     <repository>
diff --git a/maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml b/maven-core/src/test/resources-project-builder/system-property-interpolation/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/sytem-property-interpolation/pom.xml
rename to maven-core/src/test/resources-project-builder/system-property-interpolation/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml b/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mgmt-in-profile/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt-in-profile/pom.xml
rename to maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mgmt-in-profile/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml b/maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mgmt/pom.xml
similarity index 100%
rename from maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mngt/pom.xml
rename to maven-core/src/test/resources-project-builder/unique-dependency-key/dep-mgmt/pom.xml
diff --git a/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml b/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml
index 5822d8d..c5df7aa 100644
--- a/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml
+++ b/maven-core/src/test/resources-project-builder/xml-coalesce-text/pom.xml
@@ -47,7 +47,7 @@ under the License.
     <!--
     This checks the coalescing of CHARACTERS events which would otherwise be reported in chunks of the internal parser
     buffer size (usually 4 or 8 KB). The text block is designed such that its length is exactly 32 KB after leading
-    and traling whitespace has been removed and all line terminators have been removed.
+    and trailing whitespace has been removed and all line terminators have been removed.
     -->
     <prop2>
 00 KB     1         2         3         4         5         6  X
diff --git a/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom b/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom
index b335040..e6100b4 100644
--- a/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom
+++ b/maven-core/src/test/resources/org/apache/maven/extension/test-extension-repo/org/apache/maven/maven-parent/5/maven-parent-5.pom
@@ -295,7 +295,7 @@ under the License.
           <artifactId>maven-release-plugin</artifactId>
           <version>2.0-beta-4</version>          
           <configuration>
-            <!-- This element will be overriden by children -->
+            <!-- This element will be overridden by children -->
             <tagBase>https://svn.apache.org/repos/asf/maven/pom/tags</tagBase>
             <useReleaseProfile>false</useReleaseProfile>
             <goals>deploy</goals>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
new file mode 100644
index 0000000..d07ad6e
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-version-expression/pom.xml
@@ -0,0 +1,12 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>[1,1]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <!-- Must not use expressions from parent due to version range. -->
+  <version>${some.property}</version>
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml
new file mode 100644
index 0000000..4f5a004
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-external-child-without-version/pom.xml
@@ -0,0 +1,11 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>[1,1]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <!-- version>2</version Must not inherit version from parent due to version range. -->
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml
new file mode 100644
index 0000000..54eea90
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-external-valid/pom.xml
@@ -0,0 +1,11 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>[1,1]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <version>2</version>
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml
new file mode 100644
index 0000000..066a11e
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/child/pom.xml
@@ -0,0 +1,12 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>parent-version-range-local</groupId>
+    <artifactId>parent</artifactId>
+    <version>[1,10]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <!-- Must not use expressions from parent due to version range. -->
+  <version>${some.property}</version>
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml
new file mode 100644
index 0000000..a82bbf2
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-version-expression/pom.xml
@@ -0,0 +1,7 @@
+<project>
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>parent-version-range-local</groupId>
+	<artifactId>parent</artifactId>
+	<version>1</version>
+	<packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml
new file mode 100644
index 0000000..645a8f1
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/child/pom.xml
@@ -0,0 +1,11 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>parent-version-range-local</groupId>
+    <artifactId>parent</artifactId>
+    <version>[1,10]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <!-- version>1</version Must not inherit version from parent due to version range. -->
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml
new file mode 100644
index 0000000..a82bbf2
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-child-without-version/pom.xml
@@ -0,0 +1,7 @@
+<project>
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>parent-version-range-local</groupId>
+	<artifactId>parent</artifactId>
+	<version>1</version>
+	<packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml
new file mode 100644
index 0000000..886bcdf
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-valid/child/pom.xml
@@ -0,0 +1,11 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>parent-version-range-local</groupId>
+    <artifactId>parent</artifactId>
+    <version>[1,10]</version>
+  </parent>
+  <artifactId>child</artifactId>
+  <version>1</version>
+  <packaging>pom</packaging>
+</project>
diff --git a/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml b/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml
new file mode 100644
index 0000000..a82bbf2
--- /dev/null
+++ b/maven-core/src/test/resources/projects/parent-version-range-local-valid/pom.xml
@@ -0,0 +1,7 @@
+<project>
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>parent-version-range-local</groupId>
+	<artifactId>parent</artifactId>
+	<version>1</version>
+	<packaging>pom</packaging>
+</project>
diff --git a/maven-embedder/pom.xml b/maven-embedder/pom.xml
index beb84c2..3e778b3 100644
--- a/maven-embedder/pom.xml
+++ b/maven-embedder/pom.xml
@@ -1,14 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -16,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-embedder</artifactId>
@@ -42,11 +51,23 @@
       <artifactId>maven-model-builder</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-compat</artifactId>
       <scope>runtime</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-utils</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
     </dependency>
diff --git a/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java b/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java
index ee90c20..ab1b1a0 100644
--- a/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java
+++ b/maven-embedder/src/examples/simple-project/src/test/java/org/apache/maven/embedder/AppTest.java
@@ -44,7 +44,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
index f461835..a9038bf 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -108,7 +108,7 @@ public class CLIManager
     {
         options = new Options();
         options.addOption( OptionBuilder.withLongOpt( "help" ).withDescription( "Display help information" ).create( HELP ) );
-        options.addOption( OptionBuilder.withLongOpt( "file" ).hasArg().withDescription( "Force the use of an alternate POM file (or directory with pom.xml)." ).create( ALTERNATE_POM_FILE ) );
+        options.addOption( OptionBuilder.withLongOpt( "file" ).hasArg().withDescription( "Force the use of an alternate POM file (or directory with pom.xml)" ).create( ALTERNATE_POM_FILE ) );
         options.addOption( OptionBuilder.withLongOpt( "define" ).hasArg().withDescription( "Define a system property" ).create( SET_SYSTEM_PROPERTY ) );
         options.addOption( OptionBuilder.withLongOpt( "offline" ).withDescription( "Work offline" ).create( OFFLINE ) );
         options.addOption( OptionBuilder.withLongOpt( "version" ).withDescription( "Display version information" ).create( VERSION ) );
@@ -118,7 +118,7 @@ public class CLIManager
         options.addOption( OptionBuilder.withLongOpt( "non-recursive" ).withDescription( "Do not recurse into sub-projects" ).create( NON_RECURSIVE ) );
         options.addOption( OptionBuilder.withLongOpt( "update-snapshots" ).withDescription( "Forces a check for missing releases and updated snapshots on remote repositories" ).create( UPDATE_SNAPSHOTS ) );
         options.addOption( OptionBuilder.withLongOpt( "activate-profiles" ).withDescription( "Comma-delimited list of profiles to activate" ).hasArg().create( ACTIVATE_PROFILES ) );
-        options.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( "Run in non-interactive (batch) mode" ).create( BATCH_MODE ) );
+        options.addOption( OptionBuilder.withLongOpt( "batch-mode" ).withDescription( "Run in non-interactive (batch) mode (disables output color)" ).create( BATCH_MODE ) );
         options.addOption( OptionBuilder.withLongOpt( "no-snapshot-updates" ).withDescription( "Suppress SNAPSHOT updates" ).create( SUPRESS_SNAPSHOT_UPDATES ) );
         options.addOption( OptionBuilder.withLongOpt( "strict-checksums" ).withDescription( "Fail the build if checksums don't match" ).create( CHECKSUM_FAILURE_POLICY ) );
         options.addOption( OptionBuilder.withLongOpt( "lax-checksums" ).withDescription( "Warn if checksums don't match" ).create( CHECKSUM_WARNING_POLICY ) );
@@ -130,16 +130,16 @@ public class CLIManager
         options.addOption( OptionBuilder.withLongOpt( "fail-at-end" ).withDescription( "Only fail the build afterwards; allow all non-impacted builds to continue" ).create( FAIL_AT_END ) );
         options.addOption( OptionBuilder.withLongOpt( "fail-never" ).withDescription( "NEVER fail the build, regardless of project result" ).create( FAIL_NEVER ) );
         options.addOption( OptionBuilder.withLongOpt( "resume-from" ).hasArg().withDescription( "Resume reactor from specified project" ).create( RESUME_FROM ) );
-        options.addOption( OptionBuilder.withLongOpt( "projects" ).withDescription( "Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path." ).hasArg().create( PROJECT_LIST ) );
+        options.addOption( OptionBuilder.withLongOpt( "projects" ).withDescription( "Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path" ).hasArg().create( PROJECT_LIST ) );
         options.addOption( OptionBuilder.withLongOpt( "also-make" ).withDescription( "If project list is specified, also build projects required by the list" ).create( ALSO_MAKE ) );
         options.addOption( OptionBuilder.withLongOpt( "also-make-dependents" ).withDescription( "If project list is specified, also build projects that depend on projects on the list" ).create( ALSO_MAKE_DEPENDENTS ) );
-        options.addOption( OptionBuilder.withLongOpt( "log-file" ).hasArg().withDescription( "Log file where all build output will go." ).create( LOG_FILE ) );
+        options.addOption( OptionBuilder.withLongOpt( "log-file" ).hasArg().withDescription( "Log file where all build output will go (disables output color)" ).create( LOG_FILE ) );
         options.addOption( OptionBuilder.withLongOpt( "show-version" ).withDescription( "Display version information WITHOUT stopping build" ).create( SHOW_VERSION ) );
         options.addOption( OptionBuilder.withLongOpt( "encrypt-master-password" ).hasOptionalArg().withDescription( "Encrypt master security password" ).create( ENCRYPT_MASTER_PASSWORD ) );
         options.addOption( OptionBuilder.withLongOpt( "encrypt-password" ).hasOptionalArg().withDescription( "Encrypt server password" ).create( ENCRYPT_PASSWORD ) );
         options.addOption( OptionBuilder.withLongOpt( "threads" ).hasArg().withDescription( "Thread count, for instance 2.0C where C is core multiplied" ).create( THREADS ) );
         options.addOption( OptionBuilder.withLongOpt( "legacy-local-repository" ).withDescription( "Use Maven 2 Legacy Local Repository behaviour, ie no use of _remote.repositories. Can also be activated by using -Dmaven.legacyLocalRepo=true" ).create( LEGACY_LOCAL_REPOSITORY ) );
-        options.addOption( OptionBuilder.withLongOpt( "builder" ).hasArg().withDescription( "The id of the build strategy to use." ).create( BUILDER ) );
+        options.addOption( OptionBuilder.withLongOpt( "builder" ).hasArg().withDescription( "The id of the build strategy to use" ).create( BUILDER ) );
 
         // Adding this back in for compatibility with the verifier that hard codes this option.
         options.addOption( OptionBuilder.withLongOpt( "no-plugin-registry" ).withDescription( "Ineffective, only kept for backward compatibility" ).create( "npr" ) );
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
index 2397d5d..52f2053 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIReportingUtils.java
@@ -19,15 +19,18 @@ package org.apache.maven.cli;
  * under the License.
  */
 
-import org.codehaus.plexus.util.Os;
-import org.slf4j.Logger;
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Locale;
 import java.util.Properties;
-import java.util.TimeZone;
+
+import org.apache.commons.lang3.StringUtils;
+import org.codehaus.plexus.util.Os;
+import org.slf4j.Logger;
 
 /**
  * Utility class used to report errors, statistics, application version info, etc.
@@ -54,8 +57,8 @@ public final class CLIReportingUtils
     {
         final String ls = System.getProperty( "line.separator" );
         Properties properties = getBuildProperties();
-        StringBuilder version = new StringBuilder();
-        version.append( createMavenVersionString( properties ) ).append( ls );
+        StringBuilder version = new StringBuilder( 256 );
+        version.append( buffer().strong( createMavenVersionString( properties ) ) ).append( ls );
         version.append( reduce(
             properties.getProperty( "distributionShortName" ) + " home: " + System.getProperty( "maven.home",
                                                                                                 "<unknown Maven "
@@ -69,7 +72,7 @@ public final class CLIReportingUtils
         version.append( "Default locale: " ).append( Locale.getDefault() ).append( ", platform encoding: " ).append(
             System.getProperty( "file.encoding", "<unknown encoding>" ) ).append( ls );
         version.append( "OS name: \"" ).append( Os.OS_NAME ).append( "\", version: \"" ).append( Os.OS_VERSION ).append(
-            "\", arch: \"" ).append( Os.OS_ARCH ).append( "\", family: \"" ).append( Os.OS_FAMILY ).append( "\"" );
+            "\", arch: \"" ).append( Os.OS_ARCH ).append( "\", family: \"" ).append( Os.OS_FAMILY ).append( '\"' );
         return version.toString();
     }
 
@@ -92,7 +95,7 @@ public final class CLIReportingUtils
         {
             msg += " (";
             msg += ( rev != null ? rev : "" );
-            if ( timestamp != null )
+            if ( StringUtils.isNotBlank( timestamp ) )
             {
                 String ts = formatTimestamp( Long.valueOf( timestamp ) );
                 msg += ( rev != null ? "; " : "" ) + ts;
@@ -152,24 +155,8 @@ public final class CLIReportingUtils
 
     public static String formatTimestamp( long timestamp )
     {
-        // Manual construction of the tz offset because only Java 7 is aware of ISO 8601 time zones
-        TimeZone tz = TimeZone.getDefault();
-        int offset = tz.getRawOffset();
-
-        // Raw offset ignores DST, so check if we are in DST now and add the offset
-        if ( tz.inDaylightTime( new Date( timestamp ) ) )
-        {
-            offset += tz.getDSTSavings();
-        }
-
-        // CHECKSTYLE_OFF: MagicNumber
-        long m = Math.abs( ( offset / ONE_MINUTE ) % 60 );
-        long h = Math.abs( ( offset / ONE_HOUR ) % 24 );
-        // CHECKSTYLE_ON: MagicNumber
-
-        int offsetDir = (int) Math.signum( (float) offset );
-        char offsetSign = offsetDir >= 0 ? '+' : '-';
-        return String.format( "%tFT%<tT%s%02d:%02d", timestamp, offsetSign, h, m );
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssXXX" );
+        return sdf.format( new Date( timestamp ) );
     }
 
     public static String formatDuration( long duration )
@@ -185,18 +172,22 @@ public final class CLIReportingUtils
         String format;
         if ( d > 0 )
         {
+            // Length 11+ chars
             format = "%d d %02d:%02d h";
         }
         else if ( h > 0 )
         {
+            // Length 7 chars
             format = "%2$02d:%3$02d h";
         }
         else if ( m > 0 )
         {
+            // Length 9 chars
             format = "%3$02d:%4$02d min";
         }
         else
         {
+            // Length 7-8 chars
             format = "%4$d.%5$03d s";
         }
 
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CleanArgument.java b/maven-embedder/src/main/java/org/apache/maven/cli/CleanArgument.java
index 192ed3b..03ef00c 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CleanArgument.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CleanArgument.java
@@ -64,7 +64,7 @@ public class CleanArgument
                     // otherwise, we trim the trailing " and append to the buffer.
                     else
                     {
-                        // TODO: introducing a space here...not sure what else to do but collapse whitespace
+                        // TODO introducing a space here...not sure what else to do but collapse whitespace
                         currentArg.append( ' ' ).append( cleanArgPart );
                     }
 
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 176ce4d..004cf4e 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -23,6 +23,7 @@ import com.google.common.base.Charsets;
 import com.google.common.io.Files;
 import com.google.inject.AbstractModule;
 import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Option;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.cli.UnrecognizedOptionException;
 import org.apache.maven.BuildAbort;
@@ -62,6 +63,8 @@ import org.apache.maven.model.building.ModelProcessor;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.properties.internal.EnvironmentUtils;
 import org.apache.maven.properties.internal.SystemProperties;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
+import org.apache.maven.shared.utils.logging.MessageUtils;
 import org.apache.maven.toolchain.building.DefaultToolchainsBuildingRequest;
 import org.apache.maven.toolchain.building.ToolchainsBuilder;
 import org.apache.maven.toolchain.building.ToolchainsBuildingResult;
@@ -97,7 +100,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -107,12 +109,15 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
-// TODO: push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
+// TODO push all common bits back to plexus cli and prepare for transition to Guice. We don't need 50 ways to make CLIs
 
 /**
  * @author Jason van Zyl
- * @noinspection UseOfSystemOutOrSystemErr, ACCESS_STATIC_VIA_INSTANCE
  */
 public class MavenCli
 {
@@ -122,27 +127,14 @@ public class MavenCli
 
     public static final String MULTIMODULE_PROJECT_DIRECTORY = "maven.multiModuleProjectDirectory";
 
-    @SuppressWarnings( "checkstyle:constantname" )
-    public static final String userHome = System.getProperty( "user.home" );
-
-    @SuppressWarnings( "checkstyle:constantname" )
-    public static final File userMavenConfigurationHome = new File( userHome, ".m2" );
-
-    /**
-     * @deprecated use {@link SettingsXmlConfigurationProcessor#DEFAULT_USER_SETTINGS_FILE}
-     */
-    public static final File DEFAULT_USER_SETTINGS_FILE = SettingsXmlConfigurationProcessor.DEFAULT_USER_SETTINGS_FILE;
+    public static final String USER_HOME = System.getProperty( "user.home" );
 
-    /**
-     * @deprecated use {@link SettingsXmlConfigurationProcessor#DEFAULT_GLOBAL_SETTINGS_FILE}
-     */
-    public static final File DEFAULT_GLOBAL_SETTINGS_FILE =
-        SettingsXmlConfigurationProcessor.DEFAULT_GLOBAL_SETTINGS_FILE;
+    public static final File USER_MAVEN_CONFIGURATION_HOME = new File( USER_HOME, ".m2" );
 
-    public static final File DEFAULT_USER_TOOLCHAINS_FILE = new File( userMavenConfigurationHome, "toolchains.xml" );
+    public static final File DEFAULT_USER_TOOLCHAINS_FILE = new File( USER_MAVEN_CONFIGURATION_HOME, "toolchains.xml" );
 
     public static final File DEFAULT_GLOBAL_TOOLCHAINS_FILE =
-        new File( System.getProperty( "maven.home", System.getProperty( "user.dir", "" ) ), "conf/toolchains.xml" );
+        new File( System.getProperty( "maven.conf" ), "toolchains.xml" );
 
     private static final String EXT_CLASS_PATH = "maven.ext.class.path";
 
@@ -190,23 +182,88 @@ public class MavenCli
         System.exit( result );
     }
 
-    /**
-     * @noinspection ConfusingMainMethod
-     */
     public static int main( String[] args, ClassWorld classWorld )
     {
         MavenCli cli = new MavenCli();
-        return cli.doMain( new CliRequest( args, classWorld ) );
+
+        prepareJansiNative();
+        MessageUtils.systemInstall();
+        int result = cli.doMain( new CliRequest( args, classWorld ) );
+        MessageUtils.systemUninstall();
+
+        return result;
     }
 
-    // TODO: need to externalize CliRequest
+    /**
+     * temporary method while improvement reported to JAnsi+HawtJNI and integrated:
+     * library.jansi.path should point to lib/jansi-native and HawtJNI should be able to detect
+     * the platform instead of forcing the user having to point library.jansi.path to
+     * lib/jansi-native/[platform]
+     */
+    private static void prepareJansiNative()
+    {
+        if ( System.getProperty( "library.jansi.path" ) == null )
+        {
+            String mavenHome = System.getProperty( "maven.home" );
+
+            if ( mavenHome != null )
+            {
+                File jansiNative = new File( mavenHome, "lib/jansi-native/" + hawtJNIgetPlatform() );
+                System.setProperty( "library.jansi.path", jansiNative.getAbsolutePath() );
+            }
+        }
+    }
+
+    private static String hawtJNIgetOperatingSystem()
+    {
+        String name = System.getProperty( "os.name" ).toLowerCase().trim();
+        if ( name.startsWith( "linux" ) )
+        {
+            return "linux";
+        }
+        if ( name.startsWith( "mac os x" ) )
+        {
+            return "osx";
+        }
+        if ( name.startsWith( "win" ) )
+        {
+            return "windows";
+        }
+        return name.replaceAll( "\\W+", "_" );
+
+    }
+
+    private static String hawtJNIgetPlatform()
+    {
+        return hawtJNIgetOperatingSystem() + hawtJNIgetBitModel();
+    }
+
+    private static int hawtJNIgetBitModel()
+    {
+        String prop = System.getProperty( "sun.arch.data.model" );
+        if ( prop == null )
+        {
+            prop = System.getProperty( "com.ibm.vm.bitmode" );
+        }
+        if ( prop != null )
+        {
+            return Integer.parseInt( prop );
+        }
+        return -1; // we don't know..
+    }
+
+    // TODO need to externalize CliRequest
     public static int doMain( String[] args, ClassWorld classWorld )
     {
         MavenCli cli = new MavenCli();
         return cli.doMain( new CliRequest( args, classWorld ) );
     }
 
-    // This supports painless invocation by the Verifier during embedded execution of the core ITs
+    /**
+     * This supports painless invocation by the Verifier during embedded execution of the core ITs.
+     * See <a href="http://maven.apache.org/shared/maven-verifier/xref/org/apache/maven/it/Embedded3xLauncher.html">
+     * <code>Embedded3xLauncher</code> in <code>maven-verifier</code></a>
+     */
     public int doMain( String[] args, String workingDirectory, PrintStream stdout, PrintStream stderr )
     {
         PrintStream oldout = System.out;
@@ -267,7 +324,7 @@ public class MavenCli
         }
     }
 
-    // TODO: need to externalize CliRequest
+    // TODO need to externalize CliRequest
     public int doMain( CliRequest cliRequest )
     {
         PlexusContainer localContainer = null;
@@ -331,8 +388,7 @@ public class MavenCli
             if ( basedirProperty == null )
             {
                 System.err.format(
-                    "-D%s system property is not set." + " Check $M2_HOME environment variable and mvn script match.",
-                    MULTIMODULE_PROJECT_DIRECTORY );
+                    "-D%s system property is not set.", MULTIMODULE_PROJECT_DIRECTORY );
                 throw new ExitException( 1 );
             }
             File basedir = basedirProperty != null ? new File( basedirProperty ) : new File( "" );
@@ -370,7 +426,7 @@ public class MavenCli
         CLIManager cliManager = new CLIManager();
 
         List<String> args = new ArrayList<>();
-
+        CommandLine mavenConfig = null;
         try
         {
             File configFile = new File( cliRequest.multiModuleProjectDirectory, MVN_MAVEN_CONFIG );
@@ -385,8 +441,8 @@ public class MavenCli
                     }
                 }
 
-                CommandLine config = cliManager.parse( args.toArray( new String[args.size()] ) );
-                List<?> unrecongized = config.getArgList();
+                mavenConfig = cliManager.parse( args.toArray( new String[args.size()] ) );
+                List<?> unrecongized = mavenConfig.getArgList();
                 if ( !unrecongized.isEmpty() )
                 {
                     throw new ParseException( "Unrecognized maven.config entries: " + unrecongized );
@@ -402,8 +458,14 @@ public class MavenCli
 
         try
         {
-            args.addAll( 0, Arrays.asList( cliRequest.args ) );
-            cliRequest.commandLine = cliManager.parse( args.toArray( new String[args.size()] ) );
+            if ( mavenConfig == null )
+            {
+                cliRequest.commandLine = cliManager.parse( cliRequest.args );
+            }
+            else
+            {
+                cliRequest.commandLine = cliMerge( cliManager.parse( cliRequest.args ), mavenConfig );
+            }
         }
         catch ( ParseException e )
         {
@@ -425,6 +487,45 @@ public class MavenCli
         }
     }
 
+    private CommandLine cliMerge( CommandLine mavenArgs, CommandLine mavenConfig )
+    {
+        CommandLine.Builder commandLineBuilder = new CommandLine.Builder();
+        
+        // the args are easy, cli first then config file
+        for ( String arg : mavenArgs.getArgs() )
+        {
+            commandLineBuilder.addArg( arg );
+        }
+        for ( String arg : mavenConfig.getArgs() )
+        {
+            commandLineBuilder.addArg( arg );
+        }
+        
+        // now add all options, except for -D with cli first then config file
+        List<Option> setPropertyOptions = new ArrayList<>();
+        for ( Option opt : mavenArgs.getOptions() )
+        {
+            if ( String.valueOf( CLIManager.SET_SYSTEM_PROPERTY ).equals( opt.getOpt() ) )
+            {
+                setPropertyOptions.add( opt );
+            }
+            else
+            {
+                commandLineBuilder.addOption( opt );
+            }
+        }
+        for ( Option opt : mavenConfig.getOptions() )
+        {
+            commandLineBuilder.addOption( opt );
+        }
+        // finally add the CLI system properties
+        for ( Option opt : setPropertyOptions )
+        {
+            commandLineBuilder.addOption( opt );
+        }
+        return commandLineBuilder.build();
+    }
+
     /**
      * configure logging
      */
@@ -450,11 +551,18 @@ public class MavenCli
         // else fall back to default log level specified in conf
         // see https://issues.apache.org/jira/browse/MNG-2570
 
+        if ( cliRequest.commandLine.hasOption( CLIManager.BATCH_MODE ) )
+        {
+            MessageUtils.setColorEnabled( false );
+        }
+
         if ( cliRequest.commandLine.hasOption( CLIManager.LOG_FILE ) )
         {
             File logFile = new File( cliRequest.commandLine.getOptionValue( CLIManager.LOG_FILE ) );
             logFile = resolveFile( logFile, cliRequest.workingDirectory );
 
+            MessageUtils.setColorEnabled( false );
+
             // redirect stdout and stderr to file
             try
             {
@@ -499,9 +607,31 @@ public class MavenCli
         {
             slf4jLogger.info( "Enabling strict checksum verification on all artifact downloads." );
         }
+
+        if ( slf4jLogger.isDebugEnabled() )
+        {
+            slf4jLogger.debug( "Message scheme: " + ( MessageUtils.isColorEnabled() ? "color" : "plain" ) );
+            if ( MessageUtils.isColorEnabled() )
+            {
+                MessageBuilder buff = MessageUtils.buffer();
+                buff.a( "Message styles: " );
+                buff.debug( "debug" ).a( ' ' );
+                buff.info( "info" ).a( ' ' );
+                buff.warning( "warning" ).a( ' ' );
+                buff.error( "error" ).a( ' ' );
+                buff.success( "success" ).a( ' ' );
+                buff.failure( "failure" ).a( ' ' );
+                buff.strong( "strong" ).a( ' ' );
+                buff.mojo( "mojo" ).a( ' ' );
+                buff.project( "project" );
+                slf4jLogger.debug( buff.toString() );
+            }
+        }
     }
 
-    private void properties( CliRequest cliRequest )
+    //Needed to make this method package visible to make writing a unit test possible
+    //Maybe it's better to move some of those methods to separate class (SoC).
+    void properties( CliRequest cliRequest )
     {
         populateProperties( cliRequest.commandLine, cliRequest.systemProperties, cliRequest.userProperties );
     }
@@ -890,11 +1020,13 @@ public class MavenCli
 
             if ( !cliRequest.showErrors )
             {
-                slf4jLogger.error( "To see the full stack trace of the errors, re-run Maven with the -e switch." );
+                slf4jLogger.error( "To see the full stack trace of the errors, re-run Maven with the "
+                    + buffer().strong( "-e" ) + " switch." );
             }
             if ( !slf4jLogger.isDebugEnabled() )
             {
-                slf4jLogger.error( "Re-run Maven using the -X switch to enable full debug logging." );
+                slf4jLogger.error( "Re-run Maven using the " + buffer().strong( "-X" )
+                    + " switch to enable full debug logging." );
             }
 
             if ( !references.isEmpty() )
@@ -905,7 +1037,7 @@ public class MavenCli
 
                 for ( Map.Entry<String, String> entry : references.entrySet() )
                 {
-                    slf4jLogger.error( entry.getValue() + " " + entry.getKey() );
+                    slf4jLogger.error( buffer().strong( entry.getValue() ) + " " + entry.getKey() );
                 }
             }
 
@@ -913,7 +1045,8 @@ public class MavenCli
             {
                 slf4jLogger.error( "" );
                 slf4jLogger.error( "After correcting the problems, you can resume the build with the command" );
-                slf4jLogger.error( "  mvn <goals> -rf :" + project.getArtifactId() );
+                slf4jLogger.error( buffer().a( "  " ).strong( "mvn <goals> -rf :"
+                                + project.getArtifactId() ).toString() );
             }
 
             if ( MavenExecutionRequest.REACTOR_FAIL_NEVER.equals( cliRequest.request.getReactorFailureBehavior() ) )
@@ -954,19 +1087,37 @@ public class MavenCli
         {
             if ( msg.indexOf( '\n' ) < 0 )
             {
-                msg += " -> " + referenceKey;
+                msg += " -> " + buffer().strong( referenceKey );
             }
             else
             {
-                msg += "\n-> " + referenceKey;
+                msg += "\n-> " + buffer().strong( referenceKey );
             }
         }
 
         String[] lines = msg.split( "(\r\n)|(\r)|(\n)" );
+        String currentColor = "";
 
         for ( int i = 0; i < lines.length; i++ )
         {
-            String line = indent + lines[i].trim();
+            // add eventual current color inherited from previous line 
+            String line = currentColor + lines[i];
+
+            // look for last ANSI escape sequence to check if nextColor
+            Matcher matcher = LAST_ANSI_SEQUENCE.matcher( line );
+            String nextColor = "";
+            if ( matcher.find() )
+            {
+                nextColor = matcher.group( 1 );
+                if ( ANSI_RESET.equals( nextColor ) )
+                {
+                    // last ANSI escape code is reset: no next color
+                    nextColor = "";
+                }
+            }
+
+            // effective line, with indent and reset if end is colored
+            line = indent + line + ( "".equals( nextColor ) ? "" : ANSI_RESET );
 
             if ( ( i == lines.length - 1 ) && ( showErrors
                 || ( summary.getException() instanceof InternalErrorException ) ) )
@@ -977,6 +1128,8 @@ public class MavenCli
             {
                 slf4jLogger.error( line );
             }
+
+            currentColor = nextColor;
         }
 
         indent += "  ";
@@ -987,7 +1140,10 @@ public class MavenCli
         }
     }
 
-    @SuppressWarnings( "checkstyle:methodlength" )
+    private static final Pattern LAST_ANSI_SEQUENCE = Pattern.compile( "(\u001B\\[[;\\d]*[ -/]*[@-~])[^\u001B]*$" );
+
+    private static final String ANSI_RESET = "\u001B\u005Bm";
+
     private void configure( CliRequest cliRequest )
         throws Exception
     {
@@ -1005,13 +1161,13 @@ public class MavenCli
         // present supplied by the user. The rule is that we only allow the execution of one ConfigurationProcessor.
         // If there is more than one then we execute the one supplied by the user, otherwise we execute the
         // the default SettingsXmlConfigurationProcessor.
-        // 
+        //
         int userSuppliedConfigurationProcessorCount = configurationProcessors.size() - 1;
 
         if ( userSuppliedConfigurationProcessorCount == 0 )
         {
             //
-            // Our settings.xml source is historically how we have configured Maven from the CLI so we are going to 
+            // Our settings.xml source is historically how we have configured Maven from the CLI so we are going to
             // have to honour its existence forever. So let's run it.
             //
             configurationProcessors.get( SettingsXmlConfigurationProcessor.HINT ).process( cliRequest );
@@ -1053,7 +1209,6 @@ public class MavenCli
         }
     }
 
-    @SuppressWarnings( "checkstyle:methodlength" )
     private void toolchains( CliRequest cliRequest )
         throws Exception
     {
@@ -1188,7 +1343,7 @@ public class MavenCli
         //
         // ----------------------------------------------------------------------
 
-        @SuppressWarnings( "unchecked" ) List<String> goals = commandLine.getArgList();
+        List<String> goals = commandLine.getArgList();
 
         boolean recursive = true;
 
@@ -1288,7 +1443,7 @@ public class MavenCli
             // If we're logging to a file then we don't want the console transfer listener as it will spew
             // download progress all over the place
             //
-            transferListener = getConsoleTransferListener();
+            transferListener = getConsoleTransferListener( cliRequest.commandLine.hasOption( CLIManager.DEBUG ) );
         }
         else
         {
@@ -1441,7 +1596,7 @@ public class MavenCli
         final String threadConfiguration = commandLine.hasOption( CLIManager.THREADS )
             ? commandLine.getOptionValue( CLIManager.THREADS )
             : request.getSystemProperties().getProperty(
-                MavenCli.THREADS_DEPRECATED ); // TODO: Remove this setting. Note that the int-tests use it
+                MavenCli.THREADS_DEPRECATED ); // TODO Remove this setting. Note that the int-tests use it
 
         if ( threadConfiguration != null )
         {
@@ -1461,7 +1616,7 @@ public class MavenCli
         }
 
         //
-        // Allow the builder to be overriden by the user if requested. The builders are now pluggable.
+        // Allow the builder to be overridden by the user if requested. The builders are now pluggable.
         //
         if ( commandLine.hasOption( CLIManager.BUILDER ) )
         {
@@ -1515,7 +1670,7 @@ public class MavenCli
         if ( commandLine.hasOption( CLIManager.SET_SYSTEM_PROPERTY ) )
         {
             String[] defStrs = commandLine.getOptionValues( CLIManager.SET_SYSTEM_PROPERTY );
-
+            
             if ( defStrs != null )
             {
                 for ( String defStr : defStrs )
@@ -1547,7 +1702,7 @@ public class MavenCli
 
         String value;
 
-        int i = property.indexOf( "=" );
+        int i = property.indexOf( '=' );
 
         if ( i <= 0 )
         {
@@ -1588,9 +1743,9 @@ public class MavenCli
     // Customizations available via the CLI
     //
 
-    protected TransferListener getConsoleTransferListener()
+    protected TransferListener getConsoleTransferListener( boolean printResourceNames )
     {
-        return new ConsoleMavenTransferListener( System.out );
+        return new ConsoleMavenTransferListener( System.out, printResourceNames );
     }
 
     protected TransferListener getBatchTransferListener()
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
index 791a226..d9a6954 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/configuration/SettingsXmlConfigurationProcessor.java
@@ -59,8 +59,8 @@ public class SettingsXmlConfigurationProcessor
 
     public static final File DEFAULT_USER_SETTINGS_FILE = new File( USER_MAVEN_CONFIGURATION_HOME, "settings.xml" );
 
-    public static final File DEFAULT_GLOBAL_SETTINGS_FILE = new File( System.getProperty( "maven.home", System
-        .getProperty( "user.dir", "" ) ), "conf/settings.xml" );
+    public static final File DEFAULT_GLOBAL_SETTINGS_FILE =
+        new File( System.getProperty( "maven.conf" ), "settings.xml" );
 
     @Requirement
     private Logger logger;
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
index ce8d26c..2a089df 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/event/ExecutionEventLogger.java
@@ -21,6 +21,7 @@ package org.apache.maven.cli.event;
 
 import static org.apache.maven.cli.CLIReportingUtils.formatDuration;
 import static org.apache.maven.cli.CLIReportingUtils.formatTimestamp;
+import static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
 
 import org.apache.commons.lang3.Validate;
 import org.apache.maven.execution.AbstractExecutionListener;
@@ -33,6 +34,7 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoExecution;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.shared.utils.logging.MessageBuilder;
 import org.codehaus.plexus.util.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -74,6 +76,16 @@ public class ExecutionEventLogger
         return buffer.toString();
     }
 
+    private void infoLine( char c )
+    {
+        infoMain( chars( c, LINE_LENGTH ) );
+    }
+
+    private void infoMain( String msg )
+    {
+        logger.info( buffer().strong( msg ).toString() );
+    }
+
     @Override
     public void projectDiscoveryStarted( ExecutionEvent event )
     {
@@ -88,9 +100,9 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() && event.getSession().getProjects().size() > 1 )
         {
-            logger.info( chars( '-', LINE_LENGTH ) );
+            infoLine( '-' );
 
-            logger.info( "Reactor Build Order:" );
+            infoMain( "Reactor Build Order:" );
 
             logger.info( "" );
 
@@ -115,15 +127,15 @@ public class ExecutionEventLogger
 
             logStats( event.getSession() );
 
-            logger.info( chars( '-', LINE_LENGTH ) );
+            infoLine( '-' );
         }
     }
 
     private void logReactorSummary( MavenSession session )
     {
-        logger.info( chars( '-', LINE_LENGTH ) );
+        infoLine( '-' );
 
-        logger.info( "Reactor Summary:" );
+        infoMain( "Reactor Summary:" );
 
         logger.info( "" );
 
@@ -149,11 +161,12 @@ public class ExecutionEventLogger
 
             if ( buildSummary == null )
             {
-                buffer.append( "SKIPPED" );
+                buffer.append( buffer().warning( "SKIPPED" ) );
             }
             else if ( buildSummary instanceof BuildSuccess )
             {
-                buffer.append( "SUCCESS [" );
+                buffer.append( buffer().success( "SUCCESS" ) );
+                buffer.append( " [" );
                 String buildTimeDuration = formatDuration( buildSummary.getTime() );
                 int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
                 if ( padSize > 0 )
@@ -161,11 +174,12 @@ public class ExecutionEventLogger
                     buffer.append( chars( ' ', padSize ) );
                 }
                 buffer.append( buildTimeDuration );
-                buffer.append( "]" );
+                buffer.append( ']' );
             }
             else if ( buildSummary instanceof BuildFailure )
             {
-                buffer.append( "FAILURE [" );
+                buffer.append( buffer().failure( "FAILURE" ) );
+                buffer.append( " [" );
                 String buildTimeDuration = formatDuration( buildSummary.getTime() );
                 int padSize = MAX_PADDED_BUILD_TIME_DURATION_LENGTH - buildTimeDuration.length();
                 if ( padSize > 0 )
@@ -173,7 +187,7 @@ public class ExecutionEventLogger
                     buffer.append( chars( ' ', padSize ) );
                 }
                 buffer.append( buildTimeDuration );
-                buffer.append( "]" );
+                buffer.append( ']' );
             }
 
             logger.info( buffer.toString() );
@@ -182,21 +196,23 @@ public class ExecutionEventLogger
 
     private void logResult( MavenSession session )
     {
-        logger.info( chars( '-', LINE_LENGTH ) );
+        infoLine( '-' );
+        MessageBuilder buffer = buffer();
 
         if ( session.getResult().hasExceptions() )
         {
-            logger.info( "BUILD FAILURE" );
+            buffer.failure( "BUILD FAILURE" );
         }
         else
         {
-            logger.info( "BUILD SUCCESS" );
+            buffer.success( "BUILD SUCCESS" );
         }
+        logger.info( buffer.toString() );
     }
 
     private void logStats( MavenSession session )
     {
-        logger.info( chars( '-', LINE_LENGTH ) );
+        infoLine( '-' );
 
         long finish = System.currentTimeMillis();
 
@@ -222,13 +238,13 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() )
         {
-            logger.info( chars( ' ', LINE_LENGTH ) );
-            logger.info( chars( '-', LINE_LENGTH ) );
+            logger.info( "" );
+            infoLine( '-' );
 
-            logger.info( "Skipping " + event.getProject().getName() );
+            infoMain( "Skipping " + event.getProject().getName() );
             logger.info( "This project has been banned from the build due to previous failures." );
 
-            logger.info( chars( '-', LINE_LENGTH ) );
+            infoLine( '-' );
         }
     }
 
@@ -237,12 +253,12 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() )
         {
-            logger.info( chars( ' ', LINE_LENGTH ) );
-            logger.info( chars( '-', LINE_LENGTH ) );
+            logger.info( "" );
+            infoLine( '-' );
 
-            logger.info( "Building " + event.getProject().getName() + " " + event.getProject().getVersion() );
+            infoMain( "Building " + event.getProject().getName() + " " + event.getProject().getVersion() );
 
-            logger.info( chars( '-', LINE_LENGTH ) );
+            infoLine( '-' );
         }
     }
 
@@ -264,37 +280,37 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() )
         {
-            StringBuilder buffer = new StringBuilder( 128 );
+            logger.info( "" );
 
-            buffer.append( "--- " );
+            MessageBuilder buffer = buffer().strong( "--- " );
             append( buffer, event.getMojoExecution() );
             append( buffer, event.getProject() );
-            buffer.append( " ---" );
+            buffer.strong( " ---" );
 
-            logger.info( "" );
             logger.info( buffer.toString() );
         }
     }
 
+    // CHECKSTYLE_OFF: LineLength
     /**
-     * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > :forked-goal @ project-artifactId >>></pre>
-     * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > [lifecycle]phase @ project-artifactId >>></pre>
+     * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > :forked-goal @ project-artifactId >>></pre>
+     * <pre>>>> mojo-artifactId:version:goal (mojo-executionId) > [lifecycle]phase @ project-artifactId >>></pre>
      */
+    // CHECKSTYLE_ON: LineLength
     @Override
     public void forkStarted( ExecutionEvent event )
     {
         if ( logger.isInfoEnabled() )
         {
-            StringBuilder buffer = new StringBuilder( 128 );
+            logger.info( "" );
 
-            buffer.append( ">>> " );
+            MessageBuilder buffer = buffer().strong( ">>> " );
             append( buffer, event.getMojoExecution() );
-            buffer.append( " > " );
+            buffer.strong( " > " );
             appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
             append( buffer, event.getProject() );
-            buffer.append( " >>>" );
+            buffer.strong( " >>>" );
 
-            logger.info( "" );
             logger.info( buffer.toString() );
         }
     }
@@ -310,54 +326,56 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() )
         {
-            StringBuilder buffer = new StringBuilder( 128 );
+            logger.info( "" );
 
-            buffer.append( "<<< " );
+            MessageBuilder buffer = buffer().strong( "<<< " );
             append( buffer, event.getMojoExecution() );
-            buffer.append( " < " );
+            buffer.strong( " < " );
             appendForkInfo( buffer, event.getMojoExecution().getMojoDescriptor() );
             append( buffer, event.getProject() );
-            buffer.append( " <<<" );
+            buffer.strong( " <<<" );
 
-            logger.info( "" );
             logger.info( buffer.toString() );
+
+            logger.info( "" );
         }
     }
 
-    private void append( StringBuilder buffer, MojoExecution me )
+    private void append( MessageBuilder buffer, MojoExecution me )
     {
-        buffer.append( me.getArtifactId() ).append( ':' ).append( me.getVersion() );
-        buffer.append( ':' ).append( me.getGoal() );
+        buffer.mojo( me.getArtifactId() + ':' + me.getVersion() + ':' + me.getGoal() );
         if ( me.getExecutionId() != null )
         {
-            buffer.append( " (" ).append( me.getExecutionId() ).append( ')' );
+            buffer.a( ' ' ).strong( '(' + me.getExecutionId() + ')' );
         }
     }
 
-    private void appendForkInfo( StringBuilder buffer, MojoDescriptor md )
+    private void appendForkInfo( MessageBuilder buffer, MojoDescriptor md )
     {
+        StringBuilder buff = new StringBuilder();
         if ( StringUtils.isNotEmpty( md.getExecutePhase() ) )
         {
             // forked phase
             if ( StringUtils.isNotEmpty( md.getExecuteLifecycle() ) )
             {
-                buffer.append( '[' );
-                buffer.append( md.getExecuteLifecycle() );
-                buffer.append( ']' );
+                buff.append( '[' );
+                buff.append( md.getExecuteLifecycle() );
+                buff.append( ']' );
             }
-            buffer.append( md.getExecutePhase() );
+            buff.append( md.getExecutePhase() );
         }
         else
         {
             // forked goal
-            buffer.append( ':' );
-            buffer.append( md.getExecuteGoal() );
+            buff.append( ':' );
+            buff.append( md.getExecuteGoal() );
         }
+        buffer.strong( buff.toString() );
     }
 
-    private void append( StringBuilder buffer, MavenProject project )
+    private void append( MessageBuilder buffer, MavenProject project )
     {
-        buffer.append( " @ " ).append( project.getArtifactId() );
+        buffer.a( " @ " ).project( project.getArtifactId() );
     }
 
     @Override
@@ -365,13 +383,12 @@ public class ExecutionEventLogger
     {
         if ( logger.isInfoEnabled() && event.getMojoExecution().getForkedExecutions().size() > 1 )
         {
-            logger.info( chars( ' ', LINE_LENGTH ) );
-            logger.info( chars( '>', LINE_LENGTH ) );
+            logger.info( "" );
+            infoLine( '>' );
 
-            logger.info( "Forking " + event.getProject().getName() + " " + event.getProject().getVersion() );
+            infoMain( "Forking " + event.getProject().getName() + " " + event.getProject().getVersion() );
 
-            logger.info( chars( '>', LINE_LENGTH ) );
+            infoLine( '>' );
         }
     }
-
 }
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java
index 2e91b25..d269770 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/UnsupportedSlf4jBindingConfiguration.java
@@ -59,7 +59,7 @@ public class UnsupportedSlf4jBindingConfiguration
         for ( Map.Entry<URL, Set<Object>> entry : supported.entrySet() )
         {
             StringBuilder sb = new StringBuilder();
-            sb.append( "(from " ).append( entry.getKey().toExternalForm() ).append( ")" );
+            sb.append( "(from " ).append( entry.getKey().toExternalForm() ).append( ')' );
 
             for ( Object binding : entry.getValue() )
             {
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java
index 58b1a5d..21822be 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/AbstractMavenTransferListener.java
@@ -24,6 +24,7 @@ import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
 import java.util.Locale;
 
+import org.apache.commons.lang3.Validate;
 import org.eclipse.aether.transfer.AbstractTransferListener;
 import org.eclipse.aether.transfer.TransferCancelledException;
 import org.eclipse.aether.transfer.TransferEvent;
@@ -33,6 +34,178 @@ public abstract class AbstractMavenTransferListener
     extends AbstractTransferListener
 {
 
+    // CHECKSTYLE_OFF: LineLength
+    /**
+     * Formats file size with the associated <a href="https://en.wikipedia.org/wiki/Metric_prefix">SI</a> prefix
+     * (GB, MB, kB) and using the patterns <code>#0.0</code> for numbers between 1 and 10
+     * and <code>###0</code> for numbers between 10 and 1000+ by default.
+     *
+     * @see <a href="https://en.wikipedia.org/wiki/Metric_prefix">https://en.wikipedia.org/wiki/Metric_prefix</a>
+     * @see <a href="https://en.wikipedia.org/wiki/Binary_prefix">https://en.wikipedia.org/wiki/Binary_prefix</a>
+     * @see <a
+     *      href="https://en.wikipedia.org/wiki/Octet_%28computing%29">https://en.wikipedia.org/wiki/Octet_(computing)</a>
+     */
+    // CHECKSTYLE_ON: LineLength
+    // TODO Move me to Maven Shared Utils
+    static class FileSizeFormat
+    {
+        static enum ScaleUnit
+        {
+            BYTE
+            {
+                @Override
+                public long bytes()
+                {
+                    return 1L;
+                }
+
+                @Override
+                public String symbol()
+                {
+                    return "B";
+                }
+            },
+            KILOBYTE
+            {
+                @Override
+                public long bytes()
+                {
+                    return 1000L;
+                }
+
+                @Override
+                public String symbol()
+                {
+                    return "kB";
+                }
+            },
+            MEGABYTE
+            {
+                @Override
+                public long bytes()
+                {
+                    return KILOBYTE.bytes() * KILOBYTE.bytes();
+                }
+
+                @Override
+                public String symbol()
+                {
+                    return "MB";
+                }
+            },
+            GIGABYTE
+            {
+                @Override
+                public long bytes()
+                {
+                    return MEGABYTE.bytes() * KILOBYTE.bytes();
+                };
+
+                @Override
+                public String symbol()
+                {
+                    return "GB";
+                }
+            };
+
+            public abstract long bytes();
+            public abstract String symbol();
+
+            public static ScaleUnit getScaleUnit( long size )
+            {
+                Validate.isTrue( size >= 0L, "file size cannot be negative: %s", size );
+
+                if ( size >= GIGABYTE.bytes() )
+                {
+                    return GIGABYTE;
+                }
+                else if ( size >= MEGABYTE.bytes() )
+                {
+                    return MEGABYTE;
+                }
+                else if ( size >= KILOBYTE.bytes() )
+                {
+                    return KILOBYTE;
+                }
+                else
+                {
+                    return BYTE;
+                }
+            }
+        }
+
+        private DecimalFormat smallFormat;
+        private DecimalFormat largeFormat;
+
+        public FileSizeFormat( Locale locale )
+        {
+            smallFormat = new DecimalFormat( "#0.0", new DecimalFormatSymbols( locale ) );
+            largeFormat = new DecimalFormat( "###0", new DecimalFormatSymbols( locale ) );
+        }
+
+        public String format( long size )
+        {
+            return format( size, null );
+        }
+
+        public String format( long size, ScaleUnit unit )
+        {
+            return format( size, unit, false );
+        }
+
+        public String format( long size, ScaleUnit unit, boolean omitSymbol )
+        {
+            Validate.isTrue( size >= 0L, "file size cannot be negative: %s", size );
+
+            if ( unit == null )
+            {
+                unit = ScaleUnit.getScaleUnit( size );
+            }
+
+            double scaledSize = (double) size / unit.bytes();
+            String scaledSymbol = " " + unit.symbol();
+
+            if ( omitSymbol )
+            {
+                scaledSymbol = "";
+            }
+
+            if ( unit == ScaleUnit.BYTE )
+            {
+                return largeFormat.format( size ) + scaledSymbol;
+            }
+
+            if ( scaledSize < 0.05 || scaledSize >= 10.0 )
+            {
+                return largeFormat.format( scaledSize ) + scaledSymbol;
+            }
+            else
+            {
+                return smallFormat.format( scaledSize ) + scaledSymbol;
+            }
+        }
+
+        public String formatProgress( long progressedSize, long size )
+        {
+            Validate.isTrue( progressedSize >= 0L, "progressed file size cannot be negative: %s", progressedSize );
+            Validate.isTrue( size >= 0L && progressedSize <= size || size < 0L,
+                "progressed file size cannot be greater than size: %s > %s", progressedSize, size );
+
+            if ( size >= 0L && progressedSize != size )
+            {
+                ScaleUnit unit = ScaleUnit.getScaleUnit( size );
+                String formattedProgressedSize = format( progressedSize, unit, true );
+                String formattedSize = format( size, unit );
+
+                return formattedProgressedSize + "/" + formattedSize;
+            }
+            else
+            {
+                return format( progressedSize );
+            }
+        }
+    }
+
     protected PrintStream out;
 
     protected AbstractMavenTransferListener( PrintStream out )
@@ -43,9 +216,10 @@ public abstract class AbstractMavenTransferListener
     @Override
     public void transferInitiated( TransferEvent event )
     {
-        String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+        String action = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
 
-        out.println( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+        TransferResource resource = event.getResource();
+        out.println( action + ": " + resource.getRepositoryUrl() + resource.getResourceName() );
     }
 
     @Override
@@ -53,7 +227,7 @@ public abstract class AbstractMavenTransferListener
         throws TransferCancelledException
     {
         TransferResource resource = event.getResource();
-
+        // TODO This needs to be colorized
         out.println( "[WARNING] " + event.getException().getMessage() + " for " + resource.getRepositoryUrl()
             + resource.getResourceName() );
     }
@@ -63,28 +237,21 @@ public abstract class AbstractMavenTransferListener
     {
         TransferResource resource = event.getResource();
         long contentLength = event.getTransferredBytes();
-        if ( contentLength >= 0 )
-        {
-            String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
-            String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
 
-            String throughput = "";
-            long duration = System.currentTimeMillis() - resource.getTransferStartTime();
-            if ( duration > 0 )
-            {
-                DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
-                double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
-                throughput = " at " + format.format( kbPerSec ) + " KB/sec";
-            }
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+        String result = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+        String len = format.format( contentLength );
 
-            out.println( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
-                + throughput + ")" );
+        String throughput = "";
+        long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+        if ( duration > 0L )
+        {
+            double bytesPerSecond = contentLength / ( duration / 1000.0 );
+            throughput = " at " + format.format( (long) bytesPerSecond ) + "/s";
         }
-    }
 
-    protected long toKB( long bytes )
-    {
-        return ( bytes + 1023 ) / 1024;
+        out.println( result + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+            + throughput + ")" );
     }
 
 }
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java
index 5f87836..1ad943b 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/ConsoleMavenTransferListener.java
@@ -20,9 +20,13 @@ package org.apache.maven.cli.transfer;
  */
 
 import java.io.PrintStream;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.commons.lang3.StringUtils;
 import org.eclipse.aether.transfer.TransferCancelledException;
 import org.eclipse.aether.transfer.TransferEvent;
 import org.eclipse.aether.transfer.TransferResource;
@@ -36,32 +40,58 @@ public class ConsoleMavenTransferListener
     extends AbstractMavenTransferListener
 {
 
-    private Map<TransferResource, Long> downloads = new ConcurrentHashMap<>();
+    private Map<TransferResource, Long> transfers = Collections.synchronizedMap(
+                                                        new LinkedHashMap<TransferResource, Long>() );
 
+    private boolean printResourceNames;
     private int lastLength;
 
-    public ConsoleMavenTransferListener( PrintStream out )
+    public ConsoleMavenTransferListener( PrintStream out, boolean printResourceNames )
     {
         super( out );
+        this.printResourceNames = printResourceNames;
     }
 
     @Override
-    public void transferProgressed( TransferEvent event )
+    public synchronized void transferInitiated( TransferEvent event )
+    {
+        overridePreviousTransfer( event );
+
+        super.transferInitiated( event );
+    }
+
+    @Override
+    public synchronized void transferCorrupted( TransferEvent event )
+        throws TransferCancelledException
+    {
+        overridePreviousTransfer( event );
+
+        super.transferCorrupted( event );
+    }
+
+    @Override
+    public synchronized void transferProgressed( TransferEvent event )
         throws TransferCancelledException
     {
         TransferResource resource = event.getResource();
-        downloads.put( resource, event.getTransferredBytes() );
+        transfers.put( resource, event.getTransferredBytes() );
 
-        StringBuilder buffer = new StringBuilder( 64 );
+        StringBuilder buffer = new StringBuilder( 128 );
+        buffer.append( "Progress (" ).append(  transfers.size() ).append( "): " );
 
-        for ( Map.Entry<TransferResource, Long> entry : downloads.entrySet() )
+        synchronized ( transfers )
         {
-            long total = entry.getKey().getContentLength();
-            Long complete = entry.getValue();
-            // NOTE: This null check guards against http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6312056
-            if ( complete != null )
+            Iterator<Map.Entry<TransferResource, Long>> entries = transfers.entrySet().iterator();
+            while ( entries.hasNext() )
             {
-                buffer.append( getStatus( complete, total ) ).append( "  " );
+                Map.Entry<TransferResource, Long> entry = entries.next();
+                long total = entry.getKey().getContentLength();
+                Long complete = entry.getValue();
+                buffer.append( getStatus( entry.getKey().getResourceName(), complete, total ) );
+                if ( entries.hasNext() )
+                {
+                    buffer.append( " | " );
+                }
             }
         }
 
@@ -69,28 +99,29 @@ public class ConsoleMavenTransferListener
         lastLength = buffer.length();
         pad( buffer, pad );
         buffer.append( '\r' );
-
-        out.print( buffer.toString() );
+        out.print( buffer );
+        out.flush();
     }
 
-    private String getStatus( long complete, long total )
+    private String getStatus( String resourceName, long complete, long total )
     {
-        if ( total >= 1024 )
-        {
-            return toKB( complete ) + "/" + toKB( total ) + " KB ";
-        }
-        else if ( total >= 0 )
-        {
-            return complete + "/" + total + " B ";
-        }
-        else if ( complete >= 1024 )
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+        StringBuilder status = new StringBuilder();
+
+        if ( printResourceNames )
         {
-            return toKB( complete ) + " KB ";
+            status.append( StringUtils.substringAfterLast( resourceName,  "/" ) );
+            status.append( " (" );
         }
-        else
+
+        status.append( format.formatProgress( complete, total ) );
+
+        if ( printResourceNames )
         {
-            return complete + " B ";
+            status.append( ")" );
         }
+
+        return status.toString();
     }
 
     private void pad( StringBuilder buffer, int spaces )
@@ -105,29 +136,34 @@ public class ConsoleMavenTransferListener
     }
 
     @Override
-    public void transferSucceeded( TransferEvent event )
+    public synchronized void transferSucceeded( TransferEvent event )
     {
-        transferCompleted( event );
+        transfers.remove( event.getResource() );
+        overridePreviousTransfer( event );
 
         super.transferSucceeded( event );
     }
 
     @Override
-    public void transferFailed( TransferEvent event )
+    public synchronized void transferFailed( TransferEvent event )
     {
-        transferCompleted( event );
+        transfers.remove( event.getResource() );
+        overridePreviousTransfer( event );
 
         super.transferFailed( event );
     }
 
-    private void transferCompleted( TransferEvent event )
+    private void overridePreviousTransfer( TransferEvent event )
     {
-        downloads.remove( event.getResource() );
-
-        StringBuilder buffer = new StringBuilder( 64 );
-        pad( buffer, lastLength );
-        buffer.append( '\r' );
-        out.print( buffer.toString() );
+        if ( lastLength > 0 )
+        {
+            StringBuilder buffer = new StringBuilder( 128 );
+            pad( buffer, lastLength );
+            buffer.append( '\r' );
+            out.print( buffer );
+            out.flush();
+            lastLength = 0;
+        }
     }
 
 }
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java
index bb72db3..ac5333e 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/transfer/Slf4jMavenTransferListener.java
@@ -19,10 +19,9 @@ package org.apache.maven.cli.transfer;
  * under the License.
  */
 
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
 import java.util.Locale;
 
+import org.apache.maven.cli.transfer.AbstractMavenTransferListener.FileSizeFormat;
 import org.eclipse.aether.transfer.AbstractTransferListener;
 import org.eclipse.aether.transfer.TransferCancelledException;
 import org.eclipse.aether.transfer.TransferEvent;
@@ -50,9 +49,10 @@ public class Slf4jMavenTransferListener
     @Override
     public void transferInitiated( TransferEvent event )
     {
-        String message = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
+        String action = event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploading" : "Downloading";
 
-        out.info( message + ": " + event.getResource().getRepositoryUrl() + event.getResource().getResourceName() );
+        TransferResource resource = event.getResource();
+        out.info( action + ": " + resource.getRepositoryUrl() + resource.getResourceName() );
     }
 
     @Override
@@ -60,7 +60,6 @@ public class Slf4jMavenTransferListener
         throws TransferCancelledException
     {
         TransferResource resource = event.getResource();
-
         out.warn( event.getException().getMessage() + " for " + resource.getRepositoryUrl()
             + resource.getResourceName() );
     }
@@ -70,28 +69,21 @@ public class Slf4jMavenTransferListener
     {
         TransferResource resource = event.getResource();
         long contentLength = event.getTransferredBytes();
-        if ( contentLength >= 0 )
-        {
-            String type = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
-            String len = contentLength >= 1024 ? toKB( contentLength ) + " KB" : contentLength + " B";
 
-            String throughput = "";
-            long duration = System.currentTimeMillis() - resource.getTransferStartTime();
-            if ( duration > 0 )
-            {
-                DecimalFormat format = new DecimalFormat( "0.0", new DecimalFormatSymbols( Locale.ENGLISH ) );
-                double kbPerSec = ( contentLength / 1024.0 ) / ( duration / 1000.0 );
-                throughput = " at " + format.format( kbPerSec ) + " KB/sec";
-            }
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+        String result = ( event.getRequestType() == TransferEvent.RequestType.PUT ? "Uploaded" : "Downloaded" );
+        String len = format.format( contentLength );
 
-            out.info( type + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
-                + throughput + ")" );
+        String throughput = "";
+        long duration = System.currentTimeMillis() - resource.getTransferStartTime();
+        if ( duration > 0L )
+        {
+            double bytesPerSecond = contentLength / ( duration / 1000.0 );
+            throughput = " at " + format.format( (long) bytesPerSecond ) + "/s";
         }
-    }
 
-    protected long toKB( long bytes )
-    {
-        return ( bytes + 1023 ) / 1024;
+        out.info( result + ": " + resource.getRepositoryUrl() + resource.getResourceName() + " (" + len
+            + throughput + ")" );
     }
 
 }
diff --git a/maven-embedder/src/main/resources/META-INF/MANIFEST.MF b/maven-embedder/src/main/resources/META-INF/MANIFEST.MF
deleted file mode 100644
index 57576ed..0000000
--- a/maven-embedder/src/main/resources/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,7 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: Maven 2.x Embedder Plug-in
-Bundle-Vendor: maven.org
-Bundle-SymbolicName: org.maven.ide.embedder
-Bundle-Version: ${bundleVersion}
-Bundle-ClassPath: .
diff --git a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
index 8741836..ff865bc 100644
--- a/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
+++ b/maven-embedder/src/main/resources/META-INF/maven/slf4j-configuration.properties
@@ -18,5 +18,6 @@
 # key = Slf4j effective logger factory implementation
 # value = corresponding o.a.m.cli.logging.Slf4jConfiguration class
 org.slf4j.impl.SimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration
-org.slf4j.helpers.Log4jLoggerFactory org.apache.maven.cli.logging.impl.Log4j2Configuration
+org.slf4j.impl.MavenSimpleLoggerFactory org.apache.maven.cli.logging.impl.Slf4jSimpleConfiguration
+org.apache.logging.slf4j.Log4jLoggerFactory org.apache.maven.cli.logging.impl.Log4j2Configuration
 ch.qos.logback.classic.LoggerContext org.apache.maven.cli.logging.impl.LogbackConfiguration
diff --git a/maven-embedder/src/site/apt/index.apt.vm b/maven-embedder/src/site/apt/index.apt.vm
index 519fdae..e820765 100644
--- a/maven-embedder/src/site/apt/index.apt.vm
+++ b/maven-embedder/src/site/apt/index.apt.vm
@@ -20,7 +20,7 @@
  -----
  Hervé Boutemy
  -----
- 2015-03-12
+ 2016-11-14
  -----
 
 ${project.name}
@@ -33,10 +33,16 @@ ${project.name}
 
  * {{{./logging.html}logging API}}.
 
- * since 3.3.0, per project settings can be defined by files in <<<.mvn/>>> directory:
+ * since 3.3.1 (see {{{/docs/3.3.1/release-notes.html#Core_Extensions}3.3.1 release notes}} for more details),
+   per project settings can be defined by files in <<<.mvn/>>> directory:
 
    * <<<.mvn/jvm.config>>> containing jvm options,
 
    * <<<.mvn/maven.config>>> containing Maven command-line parameter,
 
-   * <<<.mvn/extensions.xml>>> containing {{{./core-extensions.html}a list of extensions}}.
+   * <<<.mvn/extensions.xml>>> containing {{{./core-extensions.html}a list of extensions}},
+
+ * since 3.5.0, output is colorized by default, with color disabled in batch mode: see
+   {{{/shared/maven-shared-utils/apidocs/org/apache/maven/shared/utils/logging/package-summary.html}styled message API}}
+   for more details.
+   
\ No newline at end of file
diff --git a/maven-embedder/src/site/apt/logging.apt b/maven-embedder/src/site/apt/logging.apt
index cc9257d..800857c 100644
--- a/maven-embedder/src/site/apt/logging.apt
+++ b/maven-embedder/src/site/apt/logging.apt
@@ -31,10 +31,10 @@ Maven Logging
 * Logging API
 
  Maven uses
- {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/package-summary.html}Plexus
+ {{{https://codehaus-plexus.github.io/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/package-summary.html}Plexus
  Container logging API}}, like any other Plexus components, ie
- {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/LoggerManager.html}LoggerManager}}
- / {{{http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/Logger.html}Logger}}.
+ {{{https://codehaus-plexus.github.io/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/LoggerManager.html}LoggerManager}}
+ / {{{https://codehaus-plexus.github.io/plexus-containers/plexus-container-default/apidocs/org/codehaus/plexus/logging/Logger.html}Logger}}.
 
  Starting with Maven 3.1.0:
 
@@ -54,7 +54,7 @@ Maven Logging
 
  Logging configuration loading is actually done by logging implementation, without any Maven extensions to support merging
  Maven installation configuration with per-user configuration for example:
- `${maven.home}/conf/logging` directory was added to core's classpath (see `${maven.home}/bin/m2.conf`). See your implementation
+ <<<$\{maven.conf}/logging>>> directory was added to core's classpath (see <<<$\{maven.home}/bin/m2.conf>>>). See your implementation
  documentation for details on file names, formats, and so on.
 
  During Maven initialization, Maven tweaks default root logging level to match CLI verbosity choice. Since such feature isn't available
diff --git a/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java b/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java
index 7a879ce..0c9e7ad 100644
--- a/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java
+++ b/maven-embedder/src/test/embedder-test-project/src/test/java/org/apache/maven/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
index 7e0144a..94e6877 100644
--- a/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
+++ b/maven-embedder/src/test/error-reporting-projects/err-resolving-project-dep/project/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java b/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java
index e4e81e2..027000b 100644
--- a/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java
+++ b/maven-embedder/src/test/error-reporting-projects/missing-module-pom/child1/src/test/java/org/test/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java b/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java
index bc2e712..71301e6 100644
--- a/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java
+++ b/maven-embedder/src/test/error-reporting-projects/mojo-lookup-err/plugin/src/main/java/org/plugin/TestPlugin.java
@@ -19,7 +19,7 @@ public class TestPlugin
     private Log log;
 
     /**
-     * @component role-hint="nonexistant"
+     * @component role-hint="nonexistent"
      */
     private MavenProject project;
 
diff --git a/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
index 7e0144a..94e6877 100644
--- a/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
+++ b/maven-embedder/src/test/error-reporting-projects/project-dep-missing/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java b/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
index 7e0144a..94e6877 100644
--- a/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
+++ b/maven-embedder/src/test/error-reporting-projects/project-mojo-failure/src/test/java/org/apache/maven/test/error/mojoFailure/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerDocumentationTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerDocumentationTest.java
index a06f0a1..f58d75b 100644
--- a/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerDocumentationTest.java
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerDocumentationTest.java
@@ -62,7 +62,7 @@ public class CLIManagerDocumentationTest
 
     public String getOptionsAsHtml()
     {
-        StringBuilder sb = new StringBuilder();
+        StringBuilder sb = new StringBuilder( 512 );
         boolean a = true;
         sb.append( "<table border='1' class='zebra-striped'><tr class='a'><th><b>Options</b></th><th><b>Description</b></th></tr>" );
         for ( Option option : new CLIManagerExtension().getOptions() )
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/CleanArgumentTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/CleanArgumentTest.java
index 874170e..7e2b489 100644
--- a/maven-embedder/src/test/java/org/apache/maven/cli/CleanArgumentTest.java
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/CleanArgumentTest.java
@@ -24,7 +24,7 @@ import static org.junit.Assert.assertEquals;
 import org.junit.Test;
 
 /**
- * @author Karl Heinz Marbaise <khmarbaise at apache.org>
+ * @author Karl Heinz Marbaise
  */
 public class CleanArgumentTest
 {
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
index c8d75b1..9b480ea 100644
--- a/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/MavenCliTest.java
@@ -19,12 +19,11 @@ package org.apache.maven.cli;
  * under the License.
  */
 
-import java.io.File;
-
 import junit.framework.TestCase;
-
 import org.apache.commons.cli.ParseException;
 
+import java.io.File;
+
 public class MavenCliTest
     extends TestCase
 {
@@ -75,17 +74,18 @@ public class MavenCliTest
     public void testMavenConfig()
         throws Exception
     {
-        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY, new File( "src/test/projects/config" ).getCanonicalPath() );
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/config" ).getCanonicalPath() );
         CliRequest request = new CliRequest( new String[0], null );
 
         // read .mvn/maven.config
         cli.initialize( request );
         cli.cli( request );
-        assertEquals( "multithreaded", request.commandLine.getOptionValue( "builder" ) );
-        assertEquals( "8", request.commandLine.getOptionValue( "threads" ) );
+        assertEquals( "multithreaded", request.commandLine.getOptionValue( CLIManager.BUILDER ) );
+        assertEquals( "8", request.commandLine.getOptionValue( CLIManager.THREADS ) );
 
         // override from command line
-        request = new CliRequest( new String[] { "--builder", "foobar" }, null );
+        request = new CliRequest( new String[]{ "--builder", "foobar" }, null );
         cli.cli( request );
         assertEquals( "foobar", request.commandLine.getOptionValue( "builder" ) );
     }
@@ -93,7 +93,8 @@ public class MavenCliTest
     public void testMavenConfigInvalid()
         throws Exception
     {
-        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY, new File( "src/test/projects/config-illegal" ).getCanonicalPath() );
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/config-illegal" ).getCanonicalPath() );
         CliRequest request = new CliRequest( new String[0], null );
 
         cli.initialize( request );
@@ -107,4 +108,117 @@ public class MavenCliTest
 
         }
     }
+
+    /**
+     * Read .mvn/maven.config with the following definitions:
+     * <pre>
+     *   -T 3
+     *   -Drevision=1.3.0
+     * </pre>
+     * and check if the {@code -T 3} option can be overwritten via command line
+     * argument.
+     *
+     * @throws Exception in case of failure.
+     */
+    public void testMVNConfigurationThreadCanBeOverwrittenViaCommandLine()
+        throws Exception
+    {
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/mavenConfigProperties" ).getCanonicalPath() );
+        CliRequest request = new CliRequest( new String[]{ "-T", "5" }, null );
+
+        cli.initialize( request );
+        // read .mvn/maven.config
+        cli.cli( request );
+
+        assertEquals( "5", request.commandLine.getOptionValue( CLIManager.THREADS ) );
+    }
+
+    /**
+     * Read .mvn/maven.config with the following definitions:
+     * <pre>
+     *   -T 3
+     *   -Drevision=1.3.0
+     * </pre>
+     * and check if the {@code -Drevision-1.3.0} option can be overwritten via command line
+     * argument.
+     *
+     * @throws Exception
+     */
+    public void testMVNConfigurationDefinedPropertiesCanBeOverwrittenViaCommandLine()
+        throws Exception
+    {
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/mavenConfigProperties" ).getCanonicalPath() );
+        CliRequest request = new CliRequest( new String[]{ "-Drevision=8.1.0" }, null );
+
+        cli.initialize( request );
+        // read .mvn/maven.config
+        cli.cli( request );
+        cli.properties( request );
+
+        String revision = System.getProperty( "revision" );
+        assertEquals( "8.1.0", revision );
+    }
+
+    /**
+     * Read .mvn/maven.config with the following definitions:
+     * <pre>
+     *   -T 3
+     *   -Drevision=1.3.0
+     * </pre>
+     * and check if the {@code -Drevision-1.3.0} option can be overwritten via command line
+     * argument.
+     *
+     * @throws Exception
+     */
+    public void testMVNConfigurationCLIRepeatedPropertiesLastWins()
+        throws Exception
+    {
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/mavenConfigProperties" ).getCanonicalPath() );
+        CliRequest request = new CliRequest( new String[]{ "-Drevision=8.1.0", "-Drevision=8.2.0" }, null );
+
+        cli.initialize( request );
+        // read .mvn/maven.config
+        cli.cli( request );
+        cli.properties( request );
+
+        String revision = System.getProperty( "revision" );
+        assertEquals( "8.2.0", revision );
+    }
+
+    /**
+     * Read .mvn/maven.config with the following definitions:
+     * <pre>
+     *   -T 3
+     *   -Drevision=1.3.0
+     * </pre>
+     * and check if the {@code -Drevision-1.3.0} option can be overwritten via command line argument when there are
+     * funky arguments present.
+     *
+     * @throws Exception
+     */
+    public void testMVNConfigurationFunkyArguments()
+        throws Exception
+    {
+        System.setProperty( MavenCli.MULTIMODULE_PROJECT_DIRECTORY,
+                            new File( "src/test/projects/mavenConfigProperties" ).getCanonicalPath() );
+        CliRequest request = new CliRequest(
+            new String[]{ "-Drevision=8.1.0", "--file=-Dpom.xml", "\"-Dfoo=bar ", "\"-Dfoo2=bar two\"",
+                "-Drevision=8.2.0" }, null );
+
+        cli.initialize( request );
+        // read .mvn/maven.config
+        cli.cli( request );
+        cli.properties( request );
+
+        String revision = System.getProperty( "revision" );
+        assertEquals( "8.2.0", revision );
+
+        assertEquals( "bar ", request.getSystemProperties().getProperty( "foo" ) );
+        assertEquals( "bar two", request.getSystemProperties().getProperty( "foo2" ) );
+
+        assertEquals( "-Dpom.xml", request.getCommandLine().getOptionValue( CLIManager.ALTERNATE_POM_FILE ) );
+    }
 }
diff --git a/maven-embedder/src/test/java/org/apache/maven/cli/transfer/FileSizeFormatTest.java b/maven-embedder/src/test/java/org/apache/maven/cli/transfer/FileSizeFormatTest.java
new file mode 100644
index 0000000..a870411
--- /dev/null
+++ b/maven-embedder/src/test/java/org/apache/maven/cli/transfer/FileSizeFormatTest.java
@@ -0,0 +1,313 @@
+package org.apache.maven.cli.transfer;
+
+/*
+ * 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.Locale;
+
+import org.apache.commons.lang3.JavaVersion;
+import org.apache.commons.lang3.SystemUtils;
+import org.apache.maven.cli.transfer.AbstractMavenTransferListener.FileSizeFormat;
+import org.apache.maven.cli.transfer.AbstractMavenTransferListener.FileSizeFormat.ScaleUnit;
+
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+public class FileSizeFormatTest {
+
+    @Test( expected = IllegalArgumentException.class )
+    public void testNegativeSize()
+    {
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+        long negativeSize = -100L;
+        format.format( negativeSize );
+    }
+
+    @Test
+    public void testSize()
+    {
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+        long _0_bytes = 0L;
+        assertEquals( "0 B", format.format( _0_bytes ) );
+
+        long _5_bytes = 5L;
+        assertEquals( "5 B", format.format( _5_bytes ) );
+
+        long _10_bytes = 10L;
+        assertEquals( "10 B", format.format( _10_bytes ) );
+
+        long _15_bytes = 15L;
+        assertEquals( "15 B", format.format( _15_bytes ) );
+
+        long _999_bytes = 999L;
+        assertEquals( "999 B", format.format( _999_bytes ) );
+
+        long _1000_bytes = 1000L;
+        assertEquals( "1.0 kB", format.format( _1000_bytes ) );
+
+        long _5500_bytes = 5500L;
+        assertEquals( "5.5 kB", format.format( _5500_bytes ) );
+
+        long _10_kilobytes = 10L * 1000L;
+        assertEquals( "10 kB", format.format( _10_kilobytes ) );
+
+        long _15_kilobytes = 15L * 1000L;
+        assertEquals( "15 kB", format.format( _15_kilobytes ) );
+
+        long _999_kilobytes = 999L * 1000L;
+        assertEquals( "999 kB", format.format( _999_kilobytes ) );
+
+        long _1000_kilobytes = 1000L * 1000L;
+        assertEquals( "1.0 MB", format.format( _1000_kilobytes ) );
+
+        long _5500_kilobytes = 5500L * 1000L;
+        assertEquals( "5.5 MB", format.format( _5500_kilobytes ) );
+
+        long _10_megabytes = 10L * 1000L * 1000L;
+        assertEquals( "10 MB", format.format( _10_megabytes ) );
+
+        long _15_megabytes = 15L * 1000L * 1000L;
+        assertEquals( "15 MB", format.format( _15_megabytes ) );
+
+        long _999_megabytes = 999L * 1000L * 1000L;
+        assertEquals( "999 MB", format.format( _999_megabytes ) );
+
+        long _1000_megabytes = 1000L * 1000L * 1000L;
+        assertEquals( "1.0 GB", format.format( _1000_megabytes ) );
+
+        long _5500_megabytes = 5500L * 1000L * 1000L;
+        assertEquals( "5.5 GB", format.format( _5500_megabytes ) );
+
+        long _10_gigabytes = 10L * 1000L * 1000L * 1000L;
+        assertEquals( "10 GB", format.format( _10_gigabytes ) );
+
+        long _15_gigabytes = 15L * 1000L * 1000L * 1000L;
+        assertEquals( "15 GB", format.format( _15_gigabytes ) );
+
+        long _1000_gigabytes = 1000L * 1000L * 1000L * 1000L;
+        assertEquals( "1000 GB", format.format( _1000_gigabytes ) );
+    }
+
+    @Test
+    public void testSizeWithSelectedScaleUnit()
+    {
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+        long _0_bytes = 0L;
+        assertEquals( "0 B", format.format( _0_bytes ) );
+        assertEquals( "0 B", format.format( _0_bytes, ScaleUnit.BYTE ) );
+        assertEquals( "0 kB", format.format( _0_bytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _0_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _0_bytes, ScaleUnit.GIGABYTE ) );
+
+        long _5_bytes = 5L;
+        assertEquals( "5 B", format.format( _5_bytes ) );
+        assertEquals( "5 B", format.format( _5_bytes, ScaleUnit.BYTE ) );
+        assertEquals( "0 kB", format.format( _5_bytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _5_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _5_bytes, ScaleUnit.GIGABYTE ) );
+
+
+        long _49_bytes = 49L;
+        assertEquals( "49 B", format.format( _49_bytes ) );
+        assertEquals( "49 B", format.format( _49_bytes, ScaleUnit.BYTE ) );
+        assertEquals( "0 kB", format.format( _49_bytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _49_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _49_bytes, ScaleUnit.GIGABYTE ) );
+
+        long _50_bytes = 50L;
+        assertEquals( "50 B", format.format( _50_bytes ) );
+        assertEquals( "50 B", format.format( _50_bytes, ScaleUnit.BYTE ) );
+        if ( SystemUtils.isJavaVersionAtLeast( JavaVersion.JAVA_1_8 ) )
+        {
+            assertEquals( "0.1 kB", format.format( _50_bytes, ScaleUnit.KILOBYTE ) );
+        }
+        assertEquals( "0 MB", format.format( _50_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _50_bytes, ScaleUnit.GIGABYTE ) );
+
+        long _999_bytes = 999L;
+        assertEquals( "999 B", format.format( _999_bytes ) );
+        assertEquals( "999 B", format.format( _999_bytes, ScaleUnit.BYTE ) );
+        assertEquals( "1.0 kB", format.format( _999_bytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _999_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _999_bytes, ScaleUnit.GIGABYTE ) );
+
+        long _1000_bytes = 1000L;
+        assertEquals( "1.0 kB", format.format( _1000_bytes ) );
+        assertEquals( "1000 B", format.format( _1000_bytes, ScaleUnit.BYTE ) );
+        assertEquals( "1.0 kB", format.format( _1000_bytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _1000_bytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _1000_bytes, ScaleUnit.GIGABYTE ) );
+
+        long _49_kilobytes = 49L * 1000L;
+        assertEquals( "49 kB", format.format( _49_kilobytes ) );
+        assertEquals( "49000 B", format.format( _49_kilobytes, ScaleUnit.BYTE ) );
+        assertEquals( "49 kB", format.format( _49_kilobytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "0 MB", format.format( _49_kilobytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _49_kilobytes, ScaleUnit.GIGABYTE ) );
+
+        long _50_kilobytes = 50L * 1000L;
+        assertEquals( "50 kB", format.format( _50_kilobytes ) );
+        assertEquals( "50000 B", format.format( _50_kilobytes, ScaleUnit.BYTE ) );
+        assertEquals( "50 kB", format.format( _50_kilobytes, ScaleUnit.KILOBYTE ) );
+        if ( SystemUtils.isJavaVersionAtLeast( JavaVersion.JAVA_1_8 ) )
+        {
+            assertEquals( "0.1 MB", format.format( _50_kilobytes, ScaleUnit.MEGABYTE ) );
+        }
+        assertEquals( "0 GB", format.format( _50_kilobytes, ScaleUnit.GIGABYTE ) );
+
+        long _999_kilobytes = 999L * 1000L;
+        assertEquals( "999 kB", format.format( _999_kilobytes ) );
+        assertEquals( "999000 B", format.format( _999_kilobytes, ScaleUnit.BYTE ) );
+        assertEquals( "999 kB", format.format( _999_kilobytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "1.0 MB", format.format( _999_kilobytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _999_kilobytes, ScaleUnit.GIGABYTE ) );
+
+        long _1000_kilobytes = 1000L * 1000L;
+        assertEquals( "1.0 MB", format.format( _1000_kilobytes ) );
+        assertEquals( "1000000 B", format.format( _1000_kilobytes, ScaleUnit.BYTE ) );
+        assertEquals( "1000 kB", format.format( _1000_kilobytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "1.0 MB", format.format( _1000_kilobytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _1000_kilobytes, ScaleUnit.GIGABYTE ) );
+
+        long _49_megabytes = 49L * 1000L * 1000L;
+        assertEquals( "49 MB", format.format( _49_megabytes ) );
+        assertEquals( "49000000 B", format.format( _49_megabytes, ScaleUnit.BYTE ) );
+        assertEquals( "49000 kB", format.format( _49_megabytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "49 MB", format.format( _49_megabytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "0 GB", format.format( _49_megabytes, ScaleUnit.GIGABYTE ) );
+
+        long _50_megabytes = 50L * 1000L * 1000L;
+        assertEquals( "50 MB", format.format( _50_megabytes ) );
+        assertEquals( "50000000 B", format.format( _50_megabytes, ScaleUnit.BYTE ) );
+        assertEquals( "50000 kB", format.format( _50_megabytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "50 MB", format.format( _50_megabytes, ScaleUnit.MEGABYTE ) );
+        if ( SystemUtils.isJavaVersionAtLeast( JavaVersion.JAVA_1_8 ) )
+        {
+            assertEquals( "0.1 GB", format.format( _50_megabytes, ScaleUnit.GIGABYTE ) );
+        }
+
+        long _999_megabytes = 999L * 1000L * 1000L;
+        assertEquals( "999 MB", format.format( _999_megabytes ) );
+        assertEquals( "999000000 B", format.format( _999_megabytes, ScaleUnit.BYTE ) );
+        assertEquals( "999000 kB", format.format( _999_megabytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "999 MB", format.format( _999_megabytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "1.0 GB", format.format( _999_megabytes, ScaleUnit.GIGABYTE ) );
+
+        long _1000_megabytes = 1000L * 1000L * 1000L;
+        assertEquals( "1.0 GB", format.format( _1000_megabytes ) );
+        assertEquals( "1000000000 B", format.format( _1000_megabytes, ScaleUnit.BYTE ) );
+        assertEquals( "1000000 kB", format.format( _1000_megabytes, ScaleUnit.KILOBYTE ) );
+        assertEquals( "1000 MB", format.format( _1000_megabytes, ScaleUnit.MEGABYTE ) );
+        assertEquals( "1.0 GB", format.format( _1000_megabytes, ScaleUnit.GIGABYTE ) );
+    }
+
+    @Test( expected = IllegalArgumentException.class )
+    public void testNegativeProgressedSize()
+    {
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+        long negativeProgressedSize = -100L;
+        format.formatProgress( negativeProgressedSize, 10L );
+    }
+
+    @Test( expected = IllegalArgumentException.class )
+    public void testNegativeProgressedSizeBiggerThanSize()
+    {
+        FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+        format.formatProgress( 100L, 10L );
+    }
+
+    @Test
+    public void testProgressedSizeWithoutSize()
+    {
+         FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+         long _0_bytes = 0L;
+         assertEquals( "0 B", format.formatProgress( _0_bytes, -1L ) );
+
+         long _1000_bytes = 1000L;
+         assertEquals( "1.0 kB", format.formatProgress( _1000_bytes, -1L ) );
+
+         long _1000_kilobytes = 1000L * 1000L;
+         assertEquals( "1.0 MB", format.formatProgress( _1000_kilobytes, -1L ) );
+
+         long _1000_megabytes = 1000L * 1000L * 1000L;
+         assertEquals( "1.0 GB", format.formatProgress( _1000_megabytes, -1L ) );
+
+    }
+
+    @Test
+    public void testProgressedBothZero()
+    {
+         FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+         long _0_bytes = 0L;
+         assertEquals( "0 B", format.formatProgress( _0_bytes, _0_bytes ) );
+    }
+
+    @Test
+    public void testProgressedSizeWithSize()
+    {
+         FileSizeFormat format = new FileSizeFormat( Locale.ENGLISH );
+
+         long _0_bytes = 0L;
+         long _400_bytes = 400L;
+         long _800_bytes = 2L * _400_bytes;
+         assertEquals( "0/800 B", format.formatProgress( _0_bytes, _800_bytes ) );
+         assertEquals( "400/800 B", format.formatProgress( _400_bytes, _800_bytes ) );
+         assertEquals( "800 B", format.formatProgress( _800_bytes, _800_bytes ) );
+
+         long _4000_bytes = 4000L;
+         long _8000_bytes = 2L * _4000_bytes;
+         long _50_kilobytes = 50000L;
+         assertEquals( "0/8.0 kB", format.formatProgress( _0_bytes, _8000_bytes ) );
+         assertEquals( "0.4/8.0 kB", format.formatProgress( _400_bytes, _8000_bytes ) );
+         assertEquals( "4.0/8.0 kB", format.formatProgress( _4000_bytes, _8000_bytes ) );
+         assertEquals( "8.0 kB", format.formatProgress( _8000_bytes, _8000_bytes ) );
+         assertEquals( "8.0/50 kB", format.formatProgress( _8000_bytes, _50_kilobytes ) );
+         assertEquals( "16/50 kB", format.formatProgress( 2L * _8000_bytes, _50_kilobytes ) );
+         assertEquals( "50 kB", format.formatProgress( _50_kilobytes, _50_kilobytes ) );
+
+         long _500_kilobytes = 500000L;
+         long _1000_kilobytes = 2L * _500_kilobytes;;
+         long _5000_kilobytes = 5L * _1000_kilobytes;
+         long _15_megabytes = 3L * _5000_kilobytes;
+         assertEquals( "0/5.0 MB", format.formatProgress( _0_bytes, _5000_kilobytes ) );
+         assertEquals( "0.5/5.0 MB", format.formatProgress( _500_kilobytes, _5000_kilobytes ) );
+         assertEquals( "1.0/5.0 MB", format.formatProgress( _1000_kilobytes, _5000_kilobytes ) );
+         assertEquals( "5.0 MB", format.formatProgress( _5000_kilobytes, _5000_kilobytes ) );
+         assertEquals( "5.0/15 MB", format.formatProgress( _5000_kilobytes, _15_megabytes ) );
+         assertEquals( "15 MB", format.formatProgress( _15_megabytes, _15_megabytes ) );
+
+         long _500_megabytes = 500000000L;
+         long _1000_megabytes = 2L * _500_megabytes;
+         long _5000_megabytes = 5L * _1000_megabytes;
+         long _15_gigabytes = 3L * _5000_megabytes;
+         assertEquals( "0/500 MB", format.formatProgress( _0_bytes, _500_megabytes ) );
+         assertEquals( "1.0/5.0 GB", format.formatProgress( _1000_megabytes, _5000_megabytes ) );
+         assertEquals( "5.0 GB", format.formatProgress( _5000_megabytes, _5000_megabytes ) );
+         assertEquals( "5.0/15 GB", format.formatProgress( _5000_megabytes, _15_gigabytes ) );
+         assertEquals( "15 GB", format.formatProgress( _15_gigabytes, _15_gigabytes ) );
+    }
+
+}
diff --git a/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java b/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java
index 69af061..7275a8d 100644
--- a/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java
+++ b/maven-embedder/src/test/projects/isolated-project-getting-parent-pom/project/src/test/java/org/codehaus/m2eclipse/AppTest.java
@@ -29,7 +29,7 @@ public class AppTest
     }
 
     /**
-     * Rigourous Test :-)
+     * Rigorous Test :-)
      */
     public void testApp()
     {
diff --git a/maven-embedder/src/test/projects/mavenConfigProperties/.mvn/maven.config b/maven-embedder/src/test/projects/mavenConfigProperties/.mvn/maven.config
new file mode 100644
index 0000000..c73de53
--- /dev/null
+++ b/maven-embedder/src/test/projects/mavenConfigProperties/.mvn/maven.config
@@ -0,0 +1,3 @@
+-T 3
+-Drevision=1.3.0
+
diff --git a/maven-model-builder/pom.xml b/maven-model-builder/pom.xml
index 29d1e77..3aefbc7 100644
--- a/maven-model-builder/pom.xml
+++ b/maven-model-builder/pom.xml
@@ -1,14 +1,23 @@
 <?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.
-  -->
+<!--
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -16,7 +25,7 @@
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-model-builder</artifactId>
@@ -71,7 +80,7 @@
     <dependency>
       <groupId>xmlunit</groupId>
       <artifactId>xmlunit</artifactId>
-      <version>1.3</version>
+      <version>1.6</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index a6a8725..463bf1c 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -62,6 +62,8 @@ import org.apache.maven.model.superpom.SuperPomProvider;
 import org.apache.maven.model.validation.ModelValidator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
+import org.codehaus.plexus.interpolation.MapBasedValueSource;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 
 import java.io.File;
 import java.io.IOException;
@@ -195,15 +197,15 @@ public class DefaultModelBuilder
         return this;
     }
 
-    public DefaultModelBuilder setDependencyManagementImporter( DependencyManagementImporter depMngmntImporter )
+    public DefaultModelBuilder setDependencyManagementImporter( DependencyManagementImporter depMgmtImporter )
     {
-        this.dependencyManagementImporter = depMngmntImporter;
+        this.dependencyManagementImporter = depMgmtImporter;
         return this;
     }
 
-    public DefaultModelBuilder setDependencyManagementInjector( DependencyManagementInjector depMngmntInjector )
+    public DefaultModelBuilder setDependencyManagementInjector( DependencyManagementInjector depMgmtInjector )
     {
-        this.dependencyManagementInjector = depMngmntInjector;
+        this.dependencyManagementInjector = depMgmtInjector;
         return this;
     }
 
@@ -333,7 +335,7 @@ public class DefaultModelBuilder
                 currentData = superData;
             }
             else if ( currentData == resultData )
-            { // First iteration - add initial parent id after version resolution.
+            { // First iteration - add initial id after version resolution.
                 currentData.setGroupId( currentData.getRawModel().getGroupId() == null ? parentData.getGroupId()
                                                                                       : currentData.getRawModel()
                                                                                           .getGroupId() );
@@ -683,10 +685,10 @@ public class DefaultModelBuilder
                         plugins.put( key, plugin );
                     }
                 }
-                PluginManagement mngt = build.getPluginManagement();
-                if ( mngt != null )
+                PluginManagement mgmt = build.getPluginManagement();
+                if ( mgmt != null )
                 {
-                    for ( Plugin plugin : mngt.getPlugins() )
+                    for ( Plugin plugin : mgmt.getPlugins() )
                     {
                         String key = plugin.getKey();
                         if ( managedVersions.get( key ) == null )
@@ -766,13 +768,40 @@ public class DefaultModelBuilder
         // save profile activations before interpolation, since they are evaluated with limited scope
         Map<String, Activation> originalActivations = getProfileActivations( model, true );
 
-        Model result = modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
-        result.setPomFile( model.getPomFile() );
+        Model interpolatedModel =
+            modelInterpolator.interpolateModel( model, model.getProjectDirectory(), request, problems );
+        if ( interpolatedModel.getParent() != null )
+        {
+            StringSearchInterpolator ssi = new StringSearchInterpolator();
+            ssi.addValueSource( new MapBasedValueSource( request.getUserProperties() ) );
+
+            ssi.addValueSource( new MapBasedValueSource( model.getProperties() ) );
+
+            ssi.addValueSource( new MapBasedValueSource( request.getSystemProperties() ) );
+
+            try
+            {
+                String interpolated = ssi.interpolate( interpolatedModel.getParent().getVersion() );
+                interpolatedModel.getParent().setVersion( interpolated );
+            }
+            catch ( Exception e )
+            {
+                ModelProblemCollectorRequest mpcr =
+                    new ModelProblemCollectorRequest( Severity.ERROR,
+                                                      Version.BASE ).setMessage( "Failed to interpolate field: "
+                                                          + interpolatedModel.getParent().getVersion()
+                                                          + " on class: " ).setException( e );
+                problems.add( mpcr );
+            }
+
+            
+        }
+        interpolatedModel.setPomFile( model.getPomFile() );
 
         // restore profiles with file activation to their value before full interpolation
         injectProfileActivations( model, originalActivations );
 
-        return result;
+        return interpolatedModel;
     }
 
     private ModelData readParent( Model childModel, ModelSource childSource, ModelBuildingRequest request,
@@ -888,7 +917,7 @@ public class DefaultModelBuilder
         }
 
         //
-        // TODO:jvz Why isn't all this checking the job of the duty of the workspace resolver, we know that we
+        // TODO jvz Why isn't all this checking the job of the duty of the workspace resolver, we know that we
         // have a model that is suitable, yet more checks are done here and the one for the version is problematic
         // before because with parents as ranges it will never work in this scenario.
         //
@@ -914,8 +943,8 @@ public class DefaultModelBuilder
             {
                 buffer.append( " of POM " ).append( ModelProblemUtils.toSourceHint( childModel ) );
             }
-            buffer.append( " points at " ).append( groupId ).append( ":" ).append( artifactId );
-            buffer.append( " instead of " ).append( parent.getGroupId() ).append( ":" );
+            buffer.append( " points at " ).append( groupId ).append( ':' ).append( artifactId );
+            buffer.append( " instead of " ).append( parent.getGroupId() ).append( ':' );
             buffer.append( parent.getArtifactId() ).append( ", please verify your project structure" );
 
             problems.setSource( childModel );
@@ -938,6 +967,28 @@ public class DefaultModelBuilder
                     // version skew drop back to resolution from the repository
                     return null;
                 }
+
+                // Validate versions aren't inherited when using parent ranges the same way as when read externally.
+                if ( childModel.getVersion() == null )
+                {
+                    // Message below is checked for in the MNG-2199 core IT.
+                    problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
+                        .setMessage( "Version must be a constant" ).setLocation( childModel.getLocation( "" ) ) );
+
+                }
+                else
+                {
+                    if ( childModel.getVersion().contains( "${" ) )
+                    {
+                        // Message below is checked for in the MNG-2199 core IT.
+                        problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
+                            .setMessage( "Version must be a constant" )
+                            .setLocation( childModel.getLocation( "version" ) ) );
+
+                    }
+                }
+
+                // MNG-2199: What else to check here ?
             }
             catch ( InvalidVersionSpecificationException e )
             {
@@ -1001,11 +1052,12 @@ public class DefaultModelBuilder
         }
         catch ( UnresolvableModelException e )
         {
+            // Message below is checked for in the MNG-2199 core IT.
             StringBuilder buffer = new StringBuilder( 256 );
             buffer.append( "Non-resolvable parent POM" );
             if ( !containsCoordinates( e.getMessage(), groupId, artifactId, version ) )
             {
-                buffer.append( " " ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
+                buffer.append( ' ' ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
             }
             if ( childModel != problems.getRootModel() )
             {
@@ -1048,15 +1100,16 @@ public class DefaultModelBuilder
         {
             if ( childModel.getVersion() == null )
             {
+                // Message below is checked for in the MNG-2199 core IT.
                 problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
                     .setMessage( "Version must be a constant" ).setLocation( childModel.getLocation( "" ) ) );
 
             }
             else
             {
-                if ( childModel.getVersion()
-                               .contains( "${" ) )
+                if ( childModel.getVersion().contains( "${" ) )
                 {
+                    // Message below is checked for in the MNG-2199 core IT.
                     problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V31 )
                         .setMessage( "Version must be a constant" )
                         .setLocation( childModel.getLocation( "version" ) ) );
@@ -1081,9 +1134,9 @@ public class DefaultModelBuilder
     private void importDependencyManagement( Model model, ModelBuildingRequest request,
                                              DefaultModelProblemCollector problems, Collection<String> importIds )
     {
-        DependencyManagement depMngt = model.getDependencyManagement();
+        DependencyManagement depMgmt = model.getDependencyManagement();
 
-        if ( depMngt == null )
+        if ( depMgmt == null )
         {
             return;
         }
@@ -1097,9 +1150,9 @@ public class DefaultModelBuilder
 
         ModelBuildingRequest importRequest = null;
 
-        List<DependencyManagement> importMngts = null;
+        List<DependencyManagement> importMgmts = null;
 
-        for ( Iterator<Dependency> it = depMngt.getDependencies().iterator(); it.hasNext(); )
+        for ( Iterator<Dependency> it = depMgmt.getDependencies().iterator(); it.hasNext(); )
         {
             Dependency dependency = it.next();
 
@@ -1154,10 +1207,10 @@ public class DefaultModelBuilder
                 continue;
             }
 
-            DependencyManagement importMngt = getCache( request.getModelCache(), groupId, artifactId, version,
+            DependencyManagement importMgmt = getCache( request.getModelCache(), groupId, artifactId, version,
                                                         ModelCacheTag.IMPORT );
 
-            if ( importMngt == null )
+            if ( importMgmt == null )
             {
                 if ( workspaceResolver == null && modelResolver == null )
                 {
@@ -1197,7 +1250,7 @@ public class DefaultModelBuilder
                         buffer.append( "Non-resolvable import POM" );
                         if ( !containsCoordinates( e.getMessage(), groupId, artifactId, version ) )
                         {
-                            buffer.append( " " ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
+                            buffer.append( ' ' ).append( ModelProblemUtils.toId( groupId, artifactId, version ) );
                         }
                         buffer.append( ": " ).append( e.getMessage() );
 
@@ -1236,27 +1289,27 @@ public class DefaultModelBuilder
                     importModel = importResult.getEffectiveModel();
                 }
 
-                importMngt = importModel.getDependencyManagement();
+                importMgmt = importModel.getDependencyManagement();
 
-                if ( importMngt == null )
+                if ( importMgmt == null )
                 {
-                    importMngt = new DependencyManagement();
+                    importMgmt = new DependencyManagement();
                 }
 
-                putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMngt );
+                putCache( request.getModelCache(), groupId, artifactId, version, ModelCacheTag.IMPORT, importMgmt );
             }
 
-            if ( importMngts == null )
+            if ( importMgmts == null )
             {
-                importMngts = new ArrayList<>();
+                importMgmts = new ArrayList<>();
             }
 
-            importMngts.add( importMngt );
+            importMgmts.add( importMgmt );
         }
 
         importIds.remove( importing );
 
-        dependencyManagementImporter.importManagement( model, importMngts, request, problems );
+        dependencyManagementImporter.importManagement( model, importMgmts, request, problems );
     }
 
     private <T> void putCache( ModelCache modelCache, String groupId, String artifactId, String version,
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
index a3505c9..84a68f7 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
@@ -286,7 +286,10 @@ public class DefaultModelBuildingRequest
         if ( systemProperties != null )
         {
             this.systemProperties = new Properties();
-            this.systemProperties.putAll( systemProperties );
+            synchronized ( systemProperties )
+            { // avoid concurrentmodification if someone else sets/removes an unrelated system property
+                this.systemProperties.putAll( systemProperties );
+            }
         }
         else
         {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
index 0892f0a..78e81e3 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProblem.java
@@ -165,7 +165,7 @@ public class DefaultModelProblem
     {
         StringBuilder buffer = new StringBuilder( 128 );
 
-        buffer.append( "[" ).append( getSeverity() ).append( "] " );
+        buffer.append( '[' ).append( getSeverity() ).append( "] " );
         buffer.append( getMessage() );
         buffer.append( " @ " ).append( ModelProblemUtils.formatLocation( this, null ) );
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
index 2a49a21..e42469a 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuilder.java
@@ -57,10 +57,6 @@ public interface ModelBuilder
 
     /**
      * Performs only the part of {@link ModelBuilder#build(ModelBuildingRequest)} that loads the raw model
-     *
-     * @param request
-     * @return
-     * @throws ModelBuildingException
      */
     Result<? extends Model> buildRawModel( File pomFile, int validationLevel, boolean locationTracking );
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
index 21029cc..186507c 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
@@ -20,7 +20,7 @@ package org.apache.maven.model.building;
  */
 
 /**
- * Defines events that the model builder fires during construction of the effective model. When a listener encounteres
+ * Defines events that the model builder fires during construction of the effective model. When a listener encounters
  * errors while processing the event, it can report these problems via {@link ModelBuildingEvent#getProblems()}.
  * <em>Note:</em> To cope with future extensions to this interface, it is strongly recommended to extend
  * {@link AbstractModelBuildingListener} rather than to directly implement this interface.
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
index c10274d..bc6e71b 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
@@ -66,7 +66,7 @@ public interface ModelBuildingRequest
 
     /**
      * Gets the raw model to build. If not set, model source will be used to load raw model.
-     * 
+     *
      * @return The raw model to build or {@code null} if not set.
      */
     Model getRawModel();
@@ -74,7 +74,7 @@ public interface ModelBuildingRequest
     /**
      * Set raw model.
      *
-     * @param model
+     * @param rawModel
      */
     ModelBuildingRequest setRawModel( Model rawModel );
 
@@ -124,7 +124,7 @@ public interface ModelBuildingRequest
 
     /**
      * Sets the level of validation to perform on processed models. For building of projects,
-     * {@link #VALIDATION_LEVEL_STRICT} should be used to ensure proper building. For the mere retrievel of dependencies
+     * {@link #VALIDATION_LEVEL_STRICT} should be used to ensure proper building. For the mere retrieval of dependencies
      * during artifact resolution, {@link #VALIDATION_LEVEL_MINIMAL} should be used to account for models of poor
      * quality. By default, models are validated in strict mode.
      *
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
index 806c28d..76c23e1 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblemUtils.java
@@ -51,7 +51,7 @@ public class ModelProblemUtils
         File pomFile = model.getPomFile();
         if ( pomFile != null )
         {
-            buffer.append( " (" ).append( pomFile ).append( ")" );
+            buffer.append( " (" ).append( pomFile ).append( ')' );
         }
 
         return buffer.toString();
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java
index 2828874..c9d5f68 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/Result.java
@@ -46,7 +46,7 @@ import com.google.common.collect.Iterables;
  * <li>error - (partial) model and diagnostics
  * </ol>
  * Could encode these variants as subclasses, but kept in one for now
- * 
+ *
  * @author bbusjaeger
  * @param <T>
  */
@@ -55,9 +55,8 @@ public class Result<T>
 
     /**
      * Success without warnings
-     * 
+     *
      * @param model
-     * @return
      */
     public static <T> Result<T> success( T model )
     {
@@ -66,10 +65,9 @@ public class Result<T>
 
     /**
      * Success with warnings
-     * 
+     *
      * @param model
      * @param problems
-     * @return
      */
     public static <T> Result<T> success( T model, Iterable<? extends ModelProblem> problems )
     {
@@ -79,10 +77,9 @@ public class Result<T>
 
     /**
      * Success with warnings
-     * 
+     *
      * @param model
      * @param results
-     * @return
      */
     public static <T> Result<T> success( T model, Result<?>... results )
     {
@@ -93,7 +90,6 @@ public class Result<T>
      * Error with problems describing the cause
      *
      * @param problems
-     * @return
      */
     public static <T> Result<T> error( Iterable<? extends ModelProblem> problems )
     {
@@ -120,7 +116,6 @@ public class Result<T>
      *
      * @param model
      * @param problems
-     * @return
      */
     public static <T> Result<T> error( T model, Iterable<? extends ModelProblem> problems )
     {
@@ -129,10 +124,9 @@ public class Result<T>
 
     /**
      * New result - determine whether error or success by checking problems for errors
-     * 
+     *
      * @param model
      * @param problems
-     * @return
      */
     public static <T> Result<T> newResult( T model, Iterable<? extends ModelProblem> problems )
     {
@@ -142,10 +136,9 @@ public class Result<T>
     /**
      * New result consisting of given result and new problem. Convenience for newResult(result.get(),
      * concat(result.getProblems(),problems)).
-     * 
+     *
      * @param result
      * @param problem
-     * @return
      */
     public static <T> Result<T> addProblem( Result<T> result, ModelProblem problem )
     {
@@ -157,7 +150,6 @@ public class Result<T>
      *
      * @param result
      * @param problems
-     * @return
      */
     public static <T> Result<T> addProblems( Result<T> result, Iterable<? extends ModelProblem> problems )
     {
@@ -172,9 +164,8 @@ public class Result<T>
 
     /**
      * Turns the given results into a single result by combining problems and models into single collection.
-     * 
+     *
      * @param results
-     * @return
      */
     public static <T> Result<Iterable<T>> newResultSet( Iterable<? extends Result<? extends T>> results )
     {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java b/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
index d895913..cce7d7f 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/composition/DefaultDependencyManagementImporter.java
@@ -49,19 +49,19 @@ public class DefaultDependencyManagementImporter
         {
             Map<String, Dependency> dependencies = new LinkedHashMap<>();
 
-            DependencyManagement depMngt = target.getDependencyManagement();
+            DependencyManagement depMgmt = target.getDependencyManagement();
 
-            if ( depMngt != null )
+            if ( depMgmt != null )
             {
-                for ( Dependency dependency : depMngt.getDependencies() )
+                for ( Dependency dependency : depMgmt.getDependencies() )
                 {
                     dependencies.put( dependency.getManagementKey(), dependency );
                 }
             }
             else
             {
-                depMngt = new DependencyManagement();
-                target.setDependencyManagement( depMngt );
+                depMgmt = new DependencyManagement();
+                target.setDependencyManagement( depMgmt );
             }
 
             for ( DependencyManagement source : sources )
@@ -76,7 +76,7 @@ public class DefaultDependencyManagementImporter
                 }
             }
 
-            depMngt.setDependencies( new ArrayList<>( dependencies.values() ) );
+            depMgmt.setDependencies( new ArrayList<>( dependencies.values() ) );
         }
     }
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
index 6cf4760..51150db 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
@@ -19,14 +19,16 @@ package org.apache.maven.model.inheritance;
  * under the License.
  */
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
+import org.apache.maven.model.InputLocation;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginContainer;
 import org.apache.maven.model.ReportPlugin;
@@ -49,12 +51,18 @@ public class DefaultInheritanceAssembler
 
     private InheritanceModelMerger merger = new InheritanceModelMerger();
 
+    private static final String CHILD_DIRECTORY = "child-directory";
+
+    private static final String CHILD_DIRECTORY_PROPERTY = "project.directory";
+
     @Override
     public void assembleModelInheritance( Model child, Model parent, ModelBuildingRequest request,
                                           ModelProblemCollector problems )
     {
         Map<Object, Object> hints = new HashMap<>();
-        hints.put( MavenModelMerger.CHILD_PATH_ADJUSTMENT, getChildPathAdjustment( child, parent ) );
+        String childPath = child.getProperties().getProperty( CHILD_DIRECTORY_PROPERTY, child.getArtifactId() );
+        hints.put( CHILD_DIRECTORY, childPath );
+        hints.put( MavenModelMerger.CHILD_PATH_ADJUSTMENT, getChildPathAdjustment( child, parent, childPath ) );
         merger.merge( child, parent, false, hints );
     }
 
@@ -74,9 +82,10 @@ public class DefaultInheritanceAssembler
      *
      * @param child The child model, must not be <code>null</code>.
      * @param parent The parent model, may be <code>null</code>.
+     * @param childDirectory The directory defined in child model, may be <code>null</code>.
      * @return The path adjustment, can be empty but never <code>null</code>.
      */
-    private String getChildPathAdjustment( Model child, Model parent )
+    private String getChildPathAdjustment( Model child, Model parent, String childDirectory )
     {
         String adjustment = "";
 
@@ -85,16 +94,15 @@ public class DefaultInheritanceAssembler
             String childName = child.getArtifactId();
 
             /*
-             * This logic (using filesystem, against wanted independance from the user environment) exists only for the
+             * This logic (using filesystem, against wanted independence from the user environment) exists only for the
              * sake of backward-compat with 2.x (MNG-5000). In general, it is wrong to
              * base URL inheritance on the module directory names as this information is unavailable for POMs in the
              * repository. In other words, modules where artifactId != moduleDirName will see different effective URLs
              * depending on how the model was constructed (from filesystem or from repository).
              */
-            File childDirectory = child.getProjectDirectory();
-            if ( childDirectory != null )
+            if ( child.getProjectDirectory() != null )
             {
-                childName = childDirectory.getName();
+                childName = child.getProjectDirectory().getName();
             }
 
             for ( String module : parent.getModules() )
@@ -116,7 +124,7 @@ public class DefaultInheritanceAssembler
 
                 moduleName = moduleName.substring( lastSlash + 1 );
 
-                if ( moduleName.equals( childName ) && lastSlash >= 0 )
+                if ( ( moduleName.equals( childName ) || ( moduleName.equals( childDirectory ) ) ) && lastSlash >= 0 )
                 {
                     adjustment = module.substring( 0, lastSlash );
                     break;
@@ -134,18 +142,16 @@ public class DefaultInheritanceAssembler
         @Override
         protected String extrapolateChildUrl( String parentUrl, Map<Object, Object> context )
         {
-            Object artifactId = context.get( ARTIFACT_ID );
+            Object childDirectory = context.get( CHILD_DIRECTORY );
             Object childPathAdjustment = context.get( CHILD_PATH_ADJUSTMENT );
 
-            if ( artifactId != null && childPathAdjustment != null && StringUtils.isNotBlank( parentUrl ) )
-            {
-                // append childPathAdjustment and artifactId to parent url
-                return appendPath( parentUrl, artifactId.toString(), childPathAdjustment.toString() );
-            }
-            else
+            if ( StringUtils.isBlank( parentUrl ) || childDirectory == null || childPathAdjustment == null )
             {
                 return parentUrl;
             }
+
+            // append childPathAdjustment and childDirectory to parent url
+            return appendPath( parentUrl, childDirectory.toString(), childPathAdjustment.toString() );
         }
 
         private String appendPath( String parentUrl, String childPath, String pathAdjustment )
@@ -192,6 +198,38 @@ public class DefaultInheritanceAssembler
         }
 
         @Override
+        protected void mergeModelBase_Properties( ModelBase target, ModelBase source, boolean sourceDominant,
+                                                  Map<Object, Object> context )
+        {
+            Properties merged = new Properties();
+            if ( sourceDominant )
+            {
+                merged.putAll( target.getProperties() );
+                putAll( merged, source.getProperties(), CHILD_DIRECTORY_PROPERTY );
+            }
+            else
+            {
+                putAll( merged, source.getProperties(), CHILD_DIRECTORY_PROPERTY );
+                merged.putAll( target.getProperties() );
+            }
+            target.setProperties( merged );
+            target.setLocation( "properties",
+                                InputLocation.merge( target.getLocation( "properties" ),
+                                                     source.getLocation( "properties" ), sourceDominant ) );
+        }
+
+        private void putAll( Map<Object, Object> s, Map<Object, Object> t, Object excludeKey )
+        {
+            for ( Map.Entry<Object, Object> e : t.entrySet() )
+            {
+                if ( !e.getKey().equals( excludeKey ) )
+                {
+                    s.put( e.getKey(), e.getValue() );
+                }
+            }
+        }
+
+        @Override
         protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
                                                      boolean sourceDominant, Map<Object, Object> context )
         {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
index cee376f..b47edbe 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/AbstractStringBasedModelInterpolator.java
@@ -56,6 +56,12 @@ import org.codehaus.plexus.interpolation.ValueSource;
 public abstract class AbstractStringBasedModelInterpolator
     implements ModelInterpolator
 {
+    public static final String SHA1_PROPERTY = "sha1";
+
+    public static final String CHANGELIST_PROPERTY = "changelist";
+
+    public static final String REVISION_PROPERTY = "revision";
+
     private static final List<String> PROJECT_PREFIXES = Arrays.asList( "pom.", "project." );
 
     private static final Collection<String> TRANSLATED_PATH_EXPRESSIONS;
@@ -165,6 +171,20 @@ public abstract class AbstractStringBasedModelInterpolator
 
         valueSources.add( new MapBasedValueSource( config.getUserProperties() ) );
 
+        // Overwrite existing values in model properties. Otherwise it's not possible
+        // to define the version via command line: mvn -Drevision=6.5.7 ...
+        if ( config.getSystemProperties().containsKey( REVISION_PROPERTY ) )
+        {
+            modelProperties.put( REVISION_PROPERTY, config.getSystemProperties().get( REVISION_PROPERTY ) );
+        }
+        if ( config.getSystemProperties().containsKey( CHANGELIST_PROPERTY ) )
+        {
+            modelProperties.put( CHANGELIST_PROPERTY, config.getSystemProperties().get( CHANGELIST_PROPERTY ) );
+        }
+        if ( config.getSystemProperties().containsKey( SHA1_PROPERTY ) )
+        {
+            modelProperties.put( SHA1_PROPERTY, config.getSystemProperties().get( SHA1_PROPERTY ) );
+        }
         valueSources.add( new MapBasedValueSource( modelProperties ) );
 
         valueSources.add( new MapBasedValueSource( config.getSystemProperties() ) );
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java
index d2b01c1..3b80c34 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/ModelInterpolator.java
@@ -30,8 +30,6 @@ import java.io.File;
  * calculated from the elements of the model itself and the execution properties from the building request.
  *
  * @author jdcasey
- *         <p/>
- *         Created on Feb 2, 2005
  */
 public interface ModelInterpolator
 {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
index a790580..ba077b2 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/interpolation/StringSearchModelInterpolator.java
@@ -306,7 +306,7 @@ public class StringSearchModelInterpolator
                             new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE ).setMessage(
                                 "Failed to interpolate field3: " + field + " on class: "
                                     + field.getType().getName() ).setException(
-                                e ) ); // todo: Not entirely the same message
+                                e ) ); // TODO Not entirely the same message
                     }
                     catch ( IllegalAccessException e )
                     {
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
index 0ba6673..e07ac3b 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
@@ -32,8 +32,8 @@ import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3ReaderEx;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
+import org.codehaus.plexus.util.xml.XmlStreamReader;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
@@ -65,13 +65,9 @@ public class DefaultModelReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
-        {
-            return read( input, isStrict( options ), getSource( options ) );
-        }
-        finally
+        try ( final Reader in = input )
         {
-            IOUtil.close( input );
+            return read( in, isStrict( options ), getSource( options ) );
         }
     }
 
@@ -81,13 +77,9 @@ public class DefaultModelReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
-        {
-            return read( ReaderFactory.newXmlReader( input ), isStrict( options ), getSource( options ) );
-        }
-        finally
+        try ( final XmlStreamReader in = ReaderFactory.newXmlReader( input ) )
         {
-            IOUtil.close( input );
+            return read( in, isStrict( options ), getSource( options ) );
         }
     }
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java
index 0d9af13..c899efa 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelWriter.java
@@ -30,7 +30,6 @@ import org.apache.commons.lang3.Validate;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.WriterFactory;
 
 /**
@@ -62,14 +61,9 @@ public class DefaultModelWriter
         Validate.notNull( output, "output cannot be null" );
         Validate.notNull( model, "model cannot be null" );
 
-        try
+        try ( final Writer out = output )
         {
-            MavenXpp3Writer w = new MavenXpp3Writer();
-            w.write( output, model );
-        }
-        finally
-        {
-            IOUtil.close( output );
+            new MavenXpp3Writer().write( out, model );
         }
     }
 
@@ -80,19 +74,16 @@ public class DefaultModelWriter
         Validate.notNull( output, "output cannot be null" );
         Validate.notNull( model, "model cannot be null" );
 
-        try
+        String encoding = model.getModelEncoding();
+        // TODO Use StringUtils here
+        if ( encoding == null || encoding.length() <= 0 )
         {
-            String encoding = model.getModelEncoding();
-            // TODO Use StringUtils here
-            if ( encoding == null || encoding.length() <= 0 )
-            {
-                encoding = "UTF-8";
-            }
-            write( new OutputStreamWriter( output, encoding ), options, model );
+            encoding = "UTF-8";
         }
-        finally
+
+        try ( final Writer out = new OutputStreamWriter( output, encoding ) )
         {
-            IOUtil.close( output );
+            write( out, options, model );
         }
     }
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
index 0007af5..e96425d 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
@@ -109,7 +109,7 @@ public class MavenModelMerger
     }
 
     /*
-     * TODO: Whether the merge continues recursively into an existing node or not could be an option for the generated
+     * TODO Whether the merge continues recursively into an existing node or not could be an option for the generated
      * merger
      */
     @Override
@@ -266,7 +266,7 @@ public class MavenModelMerger
     }
 
     /*
-     * TODO: The order of the merged list could be controlled by an attribute in the model association: target-first,
+     * TODO The order of the merged list could be controlled by an attribute in the model association: target-first,
      * source-first, dominant-first, recessive-first
      */
     @Override
@@ -352,7 +352,7 @@ public class MavenModelMerger
     }
 
     /*
-     * TODO: Whether duplicates should be removed looks like an option for the generated merger.
+     * TODO Whether duplicates should be removed looks like an option for the generated merger.
      */
     @Override
     protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boolean sourceDominant,
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
index d918d9e..8bfa580 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/DefaultReportingConverter.java
@@ -28,12 +28,16 @@ import org.apache.maven.model.ReportSet;
 import org.apache.maven.model.Reporting;
 import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.building.ModelProblemCollector;
+import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.building.ModelProblem.Severity;
+import org.apache.maven.model.building.ModelProblem.Version;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 /**
- * Handles conversion of the legacy reporting section into the configuration of the new Maven Site Plugin.
+ * Handles conversion of the <code><reporting></code> section into the configuration of Maven Site Plugin 3.x,
+ * i.e. <code>reportPlugins</code> and <code>outputDirectory</code> parameters.
  *
  * @author Benjamin Bentmann
  */
@@ -87,7 +91,12 @@ public class DefaultReportingConverter
 
         if ( reportPlugins != null )
         {
-            // new-style report configuration already present, assume user handled entire conversion
+            // new-style report configuration already present: warn since this new style has been deprecated
+            // in favor of classical reporting section MSITE-647 / MSITE-684
+            problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.BASE )
+                    .setMessage( "Reporting configuration should be done in <reporting> section, "
+                          + "not in maven-site-plugin <configuration> as reportPlugins parameter." )
+                    .setLocation( sitePlugin.getLocation( "configuration" ) ) );
             return;
         }
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java
index c5ea338..e6d8898 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/plugin/ReportingConverter.java
@@ -24,7 +24,8 @@ import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.building.ModelProblemCollector;
 
 /**
- * Handles conversion of the legacy reporting section into the configuration of the new Maven Site Plugin.
+ * Handles conversion of the <code><reporting></code> section into the configuration of Maven Site Plugin 3.x,
+ * i.e. <code>reportPlugins</code> and <code>outputDirectory</code> parameters.
  *
  * @author Benjamin Bentmann
  */
@@ -32,7 +33,7 @@ public interface ReportingConverter
 {
 
     /**
-     * Converts values from model's reporting section into the configuration for the new Maven Site Plugin.
+     * Converts values from model's reporting section into the configuration for Maven Site Plugin 3.x.
      *
      * @param model The model whose reporting section should be converted, must not be <code>null</code>.
      * @param request The model building request that holds further settings, must not be {@code null}.
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
index c81a536..146d453 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
@@ -19,6 +19,7 @@ package org.apache.maven.model.resolution;
  * under the License.
  */
 
+import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Parent;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.building.ModelSource;
@@ -47,16 +48,47 @@ public interface ModelResolver
 
     /**
      * Tries to resolve the POM for the specified parent coordinates possibly updating {@code parent}.
+     * <p>
+     * Unlike the {@link #resolveModel(java.lang.String, java.lang.String, java.lang.String)} method, this method
+     * supports version ranges and updates the given {@code parent} instance to match the returned {@code ModelSource}.
+     * If {@code parent} declares a version range, the version corresponding to the returned {@code ModelSource} will
+     * be set on the given {@code parent}.
+     * </p>
      *
      * @param parent The parent coordinates to resolve, must not be {@code null}.
+     *
      * @return The source of the requested POM, never {@code null}.
+     *
      * @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
      * @since 3.2.2
+     *
+     * @see Parent#clone()
      */
     ModelSource resolveModel( Parent parent )
         throws UnresolvableModelException;
 
     /**
+     * Tries to resolve the POM for the specified dependency coordinates possibly updating {@code dependency}.
+     * <p>
+     * Unlike the {@link #resolveModel(java.lang.String, java.lang.String, java.lang.String)} method, this method
+     * supports version ranges and updates the given {@code dependency} instance to match the returned
+     * {@code ModelSource}. If {@code dependency} declares a version range, the version corresponding to the returned
+     * {@code ModelSource} will be set on the given {@code dependency}.
+     * </p>
+     *
+     * @param dependency The dependency coordinates to resolve, must not be {@code null}.
+     *
+     * @return The source of the requested POM, never {@code null}.
+     *
+     * @throws UnresolvableModelException If the POM could not be resolved from any configured repository.
+     * @since 3.5.0
+     *
+     * @see Dependency#clone()
+     */
+    ModelSource resolveModel( Dependency dependency )
+        throws UnresolvableModelException;
+
+    /**
      * Adds a repository to use for subsequent resolution requests. The order in which repositories are added matters,
      * repositories that were added first should also be searched first. When multiple repositories with the same
      * identifier are added, only the first repository being added will be used.
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
index 1d3a0f6..e790f21 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/validation/DefaultModelValidator.java
@@ -53,6 +53,7 @@ import org.apache.maven.model.building.ModelProblem.Severity;
 import org.apache.maven.model.building.ModelProblem.Version;
 import org.apache.maven.model.building.ModelProblemCollector;
 import org.apache.maven.model.building.ModelProblemCollectorRequest;
+import org.apache.maven.model.interpolation.AbstractStringBasedModelInterpolator;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -83,17 +84,18 @@ public class DefaultModelValidator
             validateStringNotEmpty( "parent.groupId", problems, Severity.FATAL, Version.BASE, parent.getGroupId(),
                                     parent );
 
-            validateStringNotEmpty( "parent.artifactId", problems, Severity.FATAL, Version.BASE,
-                                    parent.getArtifactId(), parent );
+            validateStringNotEmpty( "parent.artifactId", problems, Severity.FATAL, Version.BASE, parent.getArtifactId(),
+                                    parent );
 
             validateStringNotEmpty( "parent.version", problems, Severity.FATAL, Version.BASE, parent.getVersion(),
                                     parent );
 
-            if ( equals( parent.getGroupId(), m.getGroupId() )
-                && equals( parent.getArtifactId(), m.getArtifactId() ) )
+            if ( equals( parent.getGroupId(), m.getGroupId() ) && equals( parent.getArtifactId(), m.getArtifactId() ) )
             {
-                addViolation( problems, Severity.FATAL, Version.BASE, "parent.artifactId", null, "must be changed"
-                    + ", the parent element cannot have the same groupId:artifactId as the project.", parent );
+                addViolation( problems, Severity.FATAL, Version.BASE, "parent.artifactId", null,
+                              "must be changed"
+                                  + ", the parent element cannot have the same groupId:artifactId as the project.",
+                              parent );
             }
         }
 
@@ -101,6 +103,14 @@ public class DefaultModelValidator
         {
             Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
 
+            // [MNG-6074] Maven should produce an error if no model version has been set in a POM file used to build an
+            // effective model.
+            //
+            // As of 3.4, the model version is mandatory even in raw models. The XML element still is optional in the
+            // XML schema and this will not change anytime soon. We do not want to build effective models based on
+            // models without a version starting with 3.4.
+            validateStringNotEmpty( "modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), m );
+
             validateEnum( "modelVersion", problems, Severity.ERROR, Version.V20, m.getModelVersion(), null, m,
                           "4.0.0" );
 
@@ -137,10 +147,10 @@ public class DefaultModelValidator
             {
                 validate20RawPlugins( problems, build.getPlugins(), "build.plugins.plugin", request );
 
-                PluginManagement mngt = build.getPluginManagement();
-                if ( mngt != null )
+                PluginManagement mgmt = build.getPluginManagement();
+                if ( mgmt != null )
                 {
-                    validate20RawPlugins( problems, mngt.getPlugins(), "build.pluginManagement.plugins.plugin",
+                    validate20RawPlugins( problems, mgmt.getPlugins(), "build.pluginManagement.plugins.plugin",
                                           request );
                 }
             }
@@ -157,34 +167,34 @@ public class DefaultModelValidator
                                   "must be unique but found duplicate profile with id " + profile.getId(), profile );
                 }
 
-                validate30RawProfileActivation( problems, profile.getActivation(), profile.getId(), prefix
-                    + ".activation", request );
+                validate30RawProfileActivation( problems, profile.getActivation(), profile.getId(),
+                                                prefix + ".activation", request );
 
                 validate20RawDependencies( problems, profile.getDependencies(), prefix + ".dependencies.dependency",
-                                         request );
+                                           request );
 
                 if ( profile.getDependencyManagement() != null )
                 {
-                    validate20RawDependencies( problems, profile.getDependencyManagement().getDependencies(), prefix
-                        + ".dependencyManagement.dependencies.dependency", request );
+                    validate20RawDependencies( problems, profile.getDependencyManagement().getDependencies(),
+                                               prefix + ".dependencyManagement.dependencies.dependency", request );
                 }
 
                 validateRawRepositories( problems, profile.getRepositories(), prefix + ".repositories.repository",
-                                      request );
+                                         request );
 
-                validateRawRepositories( problems, profile.getPluginRepositories(), prefix
-                    + ".pluginRepositories.pluginRepository", request );
+                validateRawRepositories( problems, profile.getPluginRepositories(),
+                                         prefix + ".pluginRepositories.pluginRepository", request );
 
                 BuildBase buildBase = profile.getBuild();
                 if ( buildBase != null )
                 {
                     validate20RawPlugins( problems, buildBase.getPlugins(), prefix + ".plugins.plugin", request );
 
-                    PluginManagement mngt = buildBase.getPluginManagement();
-                    if ( mngt != null )
+                    PluginManagement mgmt = buildBase.getPluginManagement();
+                    if ( mgmt != null )
                     {
-                        validate20RawPlugins( problems, mngt.getPlugins(), prefix + ".pluginManagement.plugins.plugin",
-                                            request );
+                        validate20RawPlugins( problems, mgmt.getPlugins(), prefix + ".pluginManagement.plugins.plugin",
+                                              request );
                     }
                 }
             }
@@ -223,11 +233,8 @@ public class DefaultModelValidator
 
             if ( path.contains( "${project.basedir}" ) )
             {
-                addViolation( problems,
-                              Severity.WARNING,
-                              Version.V30,
-                              prefix + ( missing ? ".file.missing" : ".file.exists" ),
-                              null,
+                addViolation( problems, Severity.WARNING, Version.V30,
+                              prefix + ( missing ? ".file.missing" : ".file.exists" ), null,
                               "Failed to interpolate file location " + path + " for profile " + sourceHint
                                   + ": ${project.basedir} expression not supported during profile activation, "
                                   + "use ${basedir} instead",
@@ -235,15 +242,9 @@ public class DefaultModelValidator
             }
             else if ( hasProjectExpression( path ) )
             {
-                addViolation( problems,
-                              Severity.WARNING,
-                              Version.V30,
-                              prefix + ( missing ? ".file.missing" : ".file.exists" ),
-                              null,
-                              "Failed to interpolate file location "
-                                  + path
-                                  + " for profile "
-                                  + sourceHint
+                addViolation( problems, Severity.WARNING, Version.V30,
+                              prefix + ( missing ? ".file.missing" : ".file.exists" ), null,
+                              "Failed to interpolate file location " + path + " for profile " + sourceHint
                                   + ": ${project.*} expressions are not supported during profile activation",
                               file.getLocation( missing ? "missing" : "exists" ) );
             }
@@ -251,7 +252,7 @@ public class DefaultModelValidator
     }
 
     private void validate20RawPlugins( ModelProblemCollector problems, List<Plugin> plugins, String prefix,
-                                     ModelBuildingRequest request )
+                                       ModelBuildingRequest request )
     {
         Severity errOn31 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_1 );
 
@@ -259,6 +260,27 @@ public class DefaultModelValidator
 
         for ( Plugin plugin : plugins )
         {
+            if ( plugin.getGroupId() == null
+                || ( plugin.getGroupId() != null && plugin.getGroupId().trim().isEmpty() ) )
+            {
+                addViolation( problems, Severity.FATAL, Version.V20, prefix + ".(groupId:artifactId)", null,
+                              "groupId of a plugin must be defined. ", plugin );
+            }
+
+            if ( plugin.getArtifactId() == null
+                || ( plugin.getArtifactId() != null && plugin.getArtifactId().trim().isEmpty() ) )
+            {
+                addViolation( problems, Severity.FATAL, Version.V20, prefix + ".(groupId:artifactId)", null,
+                              "artifactId of a plugin must be defined. ", plugin );
+            }
+
+            // This will catch cases like <version></version> or <version/>
+            if ( plugin.getVersion() != null && plugin.getVersion().trim().isEmpty() )
+            {
+                addViolation( problems, Severity.FATAL, Version.V20, prefix + ".(groupId:artifactId)", null,
+                              "version of a plugin must be defined. ", plugin );
+            }
+
             String key = plugin.getKey();
 
             Plugin existing = index.get( key );
@@ -279,9 +301,9 @@ public class DefaultModelValidator
             {
                 if ( !executionIds.add( exec.getId() ) )
                 {
-                    addViolation( problems, Severity.ERROR, Version.V20, prefix + "[" + plugin.getKey()
-                        + "].executions.execution.id", null, "must be unique but found duplicate execution with id "
-                        + exec.getId(), exec );
+                    addViolation( problems, Severity.ERROR, Version.V20,
+                                  prefix + "[" + plugin.getKey() + "].executions.execution.id", null,
+                                  "must be unique but found duplicate execution with id " + exec.getId(), exec );
                 }
             }
         }
@@ -302,9 +324,8 @@ public class DefaultModelValidator
         {
             if ( !"pom".equals( m.getPackaging() ) )
             {
-                addViolation( problems, Severity.ERROR, Version.BASE, "packaging", null,
-                              "with value '" + m.getPackaging() + "' is invalid. Aggregator projects "
-                                  + "require 'pom' as packaging.", m );
+                addViolation( problems, Severity.ERROR, Version.BASE, "packaging", null, "with value '"
+                    + m.getPackaging() + "' is invalid. Aggregator projects " + "require 'pom' as packaging.", m );
             }
 
             for ( int i = 0, n = m.getModules().size(); i < n; i++ )
@@ -364,8 +385,8 @@ public class DefaultModelValidator
                     validate20PluginVersion( "build.plugins.plugin.version", problems, p.getVersion(), p.getKey(), p,
                                              request );
 
-                    validateBoolean( "build.plugins.plugin.inherited", problems, errOn30, Version.V20,
-                                     p.getInherited(), p.getKey(), p );
+                    validateBoolean( "build.plugins.plugin.inherited", problems, errOn30, Version.V20, p.getInherited(),
+                                     p.getKey(), p );
 
                     validateBoolean( "build.plugins.plugin.extensions", problems, errOn30, Version.V20,
                                      p.getExtensions(), p.getKey(), p );
@@ -414,7 +435,7 @@ public class DefaultModelValidator
                 validate20EffectiveRepository( problems, distMgmt.getRepository(), "distributionManagement.repository",
                                                request );
                 validate20EffectiveRepository( problems, distMgmt.getSnapshotRepository(),
-                                    "distributionManagement.snapshotRepository", request );
+                                               "distributionManagement.snapshotRepository", request );
             }
         }
     }
@@ -458,7 +479,8 @@ public class DefaultModelValidator
                     {
                         addViolation( problems, Severity.WARNING, Version.V20, prefix + ".systemPath", key,
                                       "should not point at files within the project directory, " + sysPath
-                                          + " will be unresolvable by dependent projects", dependency );
+                                          + " will be unresolvable by dependent projects",
+                                      dependency );
                     }
                 }
             }
@@ -470,15 +492,13 @@ public class DefaultModelValidator
                 String msg;
                 if ( equals( existing.getVersion(), dependency.getVersion() ) )
                 {
-                    msg =
-                        "duplicate declaration of version "
-                            + StringUtils.defaultString( dependency.getVersion(), "(?)" );
+                    msg = "duplicate declaration of version "
+                        + StringUtils.defaultString( dependency.getVersion(), "(?)" );
                 }
                 else
                 {
-                    msg =
-                        "version " + StringUtils.defaultString( existing.getVersion(), "(?)" ) + " vs "
-                            + StringUtils.defaultString( dependency.getVersion(), "(?)" );
+                    msg = "version " + StringUtils.defaultString( existing.getVersion(), "(?)" ) + " vs "
+                        + StringUtils.defaultString( dependency.getVersion(), "(?)" );
                 }
 
                 addViolation( problems, errOn31, Version.V20, prefix + ".(groupId:artifactId:type:classifier)", null,
@@ -513,8 +533,8 @@ public class DefaultModelValidator
                                      d.getManagementKey(), d );
 
                     /*
-                     * TODO: Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc.
-                     * In order to don't break backward-compat with those, only warn but don't error out.
+                     * TODO Extensions like Flex Mojos use custom scopes like "merged", "internal", "external", etc. In
+                     * order to don't break backward-compat with those, only warn but don't error out.
                      */
                     validateEnum( prefix + "scope", problems, Severity.WARNING, Version.V20, d.getScope(),
                                   d.getManagementKey(), d, "provided", "compile", "runtime", "test", "system" );
@@ -591,8 +611,8 @@ public class DefaultModelValidator
                     {
                         msg += ". Please verify that you run Maven using a JDK and not just a JRE.";
                     }
-                    addViolation( problems, Severity.WARNING, Version.BASE, prefix + "systemPath",
-                                  d.getManagementKey(), msg, d );
+                    addViolation( problems, Severity.WARNING, Version.BASE, prefix + "systemPath", d.getManagementKey(),
+                                  msg, d );
                 }
             }
         }
@@ -628,7 +648,7 @@ public class DefaultModelValidator
     }
 
     /**
-     * @since 3.2.4 
+     * @since 3.2.4
      */
     protected void validateDependencyVersion( ModelProblemCollector problems, Dependency d, String prefix )
     {
@@ -637,7 +657,7 @@ public class DefaultModelValidator
     }
 
     private void validateRawRepositories( ModelProblemCollector problems, List<Repository> repositories, String prefix,
-                                       ModelBuildingRequest request )
+                                          ModelBuildingRequest request )
     {
         Map<String, Repository> index = new HashMap<>();
 
@@ -657,9 +677,8 @@ public class DefaultModelValidator
             {
                 Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
 
-                addViolation( problems, errOn30, Version.V20, prefix + ".id", null,
-                              "must be unique: " + repository.getId() + " -> " + existing.getUrl() + " vs "
-                                  + repository.getUrl(), repository );
+                addViolation( problems, errOn30, Version.V20, prefix + ".id", null, "must be unique: "
+                    + repository.getId() + " -> " + existing.getUrl() + " vs " + repository.getUrl(), repository );
             }
             else
             {
@@ -669,7 +688,7 @@ public class DefaultModelValidator
     }
 
     private void validate20EffectiveRepository( ModelProblemCollector problems, Repository repository, String prefix,
-                                     ModelBuildingRequest request )
+                                                ModelBuildingRequest request )
     {
         if ( repository != null )
         {
@@ -680,9 +699,10 @@ public class DefaultModelValidator
 
             if ( "local".equals( repository.getId() ) )
             {
-                addViolation( problems, errOn31, Version.V20, prefix + ".id", null, "must not be 'local'"
-                    + ", this identifier is reserved for the local repository"
-                    + ", using it for other repositories will corrupt your repository metadata.", repository );
+                addViolation( problems, errOn31, Version.V20, prefix + ".id", null,
+                              "must not be 'local'" + ", this identifier is reserved for the local repository"
+                                  + ", using it for other repositories will corrupt your repository metadata.",
+                              repository );
             }
 
             if ( "legacy".equals( repository.getLayout() ) )
@@ -694,7 +714,7 @@ public class DefaultModelValidator
     }
 
     private void validate20RawResources( ModelProblemCollector problems, List<Resource> resources, String prefix,
-                                    ModelBuildingRequest request )
+                                         ModelBuildingRequest request )
     {
         Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
 
@@ -730,8 +750,8 @@ public class DefaultModelValidator
             boolean match = ID_REGEX.matcher( id ).matches();
             if ( !match )
             {
-                addViolation( problems, severity, version, fieldName, sourceHint, "with value '" + id
-                    + "' does not match a valid id pattern.", tracker );
+                addViolation( problems, severity, version, fieldName, sourceHint,
+                              "with value '" + id + "' does not match a valid id pattern.", tracker );
             }
             return match;
         }
@@ -750,14 +770,13 @@ public class DefaultModelValidator
             boolean match = ID_WITH_WILDCARDS_REGEX.matcher( id ).matches();
             if ( !match )
             {
-                addViolation( problems, severity, version, fieldName, sourceHint, "with value '" + id
-                    + "' does not match a valid id pattern.", tracker );
+                addViolation( problems, severity, version, fieldName, sourceHint,
+                              "with value '" + id + "' does not match a valid id pattern.", tracker );
             }
             return match;
         }
     }
 
-
     private boolean validateStringNoExpression( String fieldName, ModelProblemCollector problems, Severity severity,
                                                 Version version, String string, InputLocationTracker tracker )
     {
@@ -788,8 +807,10 @@ public class DefaultModelValidator
         // revision
         // sha1
         //
-        if ( string.trim().contains( "${changelist}" ) || string.trim().contains( "${revision}" )
-            || string.trim().contains( "${sha1}" ) )
+        string = string.trim();
+        if ( string.contains( "${" + AbstractStringBasedModelInterpolator.CHANGELIST_PROPERTY + "}" )
+            || string.contains( "${" + AbstractStringBasedModelInterpolator.REVISION_PROPERTY + "}" )
+            || string.contains( "${" + AbstractStringBasedModelInterpolator.SHA1_PROPERTY + "}" ) )
         {
             return true;
         }
@@ -876,8 +897,8 @@ public class DefaultModelValidator
             return true;
         }
 
-        addViolation( problems, severity, version, fieldName, sourceHint, "must be 'true' or 'false' but is '" + string
-            + "'.", tracker );
+        addViolation( problems, severity, version, fieldName, sourceHint,
+                      "must be 'true' or 'false' but is '" + string + "'.", tracker );
 
         return false;
     }
@@ -898,8 +919,8 @@ public class DefaultModelValidator
             return true;
         }
 
-        addViolation( problems, severity, version, fieldName, sourceHint, "must be one of " + values + " but is '"
-            + string + "'.", tracker );
+        addViolation( problems, severity, version, fieldName, sourceHint,
+                      "must be one of " + values + " but is '" + string + "'.", tracker );
 
         return false;
     }
@@ -916,7 +937,8 @@ public class DefaultModelValidator
                 {
                     addViolation( problems, severity, version, fieldName, sourceHint,
                                   "must not contain any of these characters " + banned + " but found "
-                                      + string.charAt( i ), tracker );
+                                      + string.charAt( i ),
+                                  tracker );
                     return false;
                 }
             }
@@ -983,8 +1005,8 @@ public class DefaultModelValidator
 
         if ( string.length() <= 0 || "RELEASE".equals( string ) || "LATEST".equals( string ) )
         {
-            addViolation( problems, errOn30, Version.V20, fieldName, sourceHint, "must be a valid version but is '"
-                + string + "'.", tracker );
+            addViolation( problems, errOn30, Version.V20, fieldName, sourceHint,
+                          "must be a valid version but is '" + string + "'.", tracker );
             return false;
         }
 
@@ -1005,8 +1027,11 @@ public class DefaultModelValidator
 
         buffer.append( ' ' ).append( message );
 
-        problems.add( new ModelProblemCollectorRequest( severity, version )
-            .setMessage( buffer.toString() ).setLocation( getLocation( fieldName, tracker ) ) );
+        // CHECKSTYLE_OFF: LineLength
+        problems.add( new ModelProblemCollectorRequest( severity,
+                                                        version ).setMessage( buffer.toString() ).setLocation( getLocation( fieldName,
+                                                                                                                            tracker ) ) );
+        // CHECKSTYLE_ON: LineLength
     }
 
     private static InputLocation getLocation( String fieldName, InputLocationTracker tracker )
diff --git a/maven-model-builder/src/main/mdo/profiles.mdo b/maven-model-builder/src/main/mdo/profiles.mdo
index 892544d..a55677c 100644
--- a/maven-model-builder/src/main/mdo/profiles.mdo
+++ b/maven-model-builder/src/main/mdo/profiles.mdo
@@ -188,7 +188,7 @@ under the License.
       <version>1.0.0</version>
       <description><![CDATA[
          Repository contains the information needed
-         for establishing connections with remote repoistory
+         for establishing connections with remote repository
       ]]></description>
       <fields>
         <field>
@@ -250,7 +250,7 @@ under the License.
       <superClass>RepositoryBase</superClass>
       <version>1.0.0</version>
       <description>
-        Repository contains the information needed for establishing connections with remote repoistory
+        Repository contains the information needed for establishing connections with remote repository
       </description>
       <fields>
         <field>
diff --git a/maven-model-builder/src/site/apt/index.apt b/maven-model-builder/src/site/apt/index.apt
index 9a645f4..a14b4e3 100644
--- a/maven-model-builder/src/site/apt/index.apt
+++ b/maven-model-builder/src/site/apt/index.apt
@@ -57,14 +57,9 @@ Maven Model Builder
 
    ** parent resolution until {{{./super-pom.html}super-pom}}
 
-   ** inheritance assembly: <<<InheritanceAssembler>>> ({{{./apidocs/org/apache/maven/model/inheritance/InheritanceAssembler.html}javadoc}}),
-   with its <<<DefaultInheritanceAssembler>>> implementation
-   ({{{./xref/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.html}source}}). Notice that
-   <<<project.url>>>, <<<project.scm.connection>>>, <<<project.scm.developerConnection>>>, <<<project.scm.url>>> and
-   <<<project.distributionManagement.site.url>>> have a special treatment: if not overridden in child, the default value is parent's one
-   with child artifact id appended
+   ** inheritance assembly (see {{{./index.html#Inheritance_Assembly}below}})
 
-   ** model interpolation (see below)
+   ** model interpolation (see {{{./index.html#Model_Interpolation}below}})
 
    ** url normalization: <<<UrlNormalizer>>> ({{{./apidocs/org/apache/maven/model/path/UrlNormalizer.html}javadoc}}),
    with its <<<DefaultUrlNormalizer>>> implementation
@@ -117,6 +112,28 @@ Maven Model Builder
  []
 
 
+* Inheritance Assembly
+
+  Inheritance Assembly consists in filling current model empty fields with values taken from parent model.
+  It is done in <<<InheritanceAssembler>>> ({{{./apidocs/org/apache/maven/model/inheritance/InheritanceAssembler.html}javadoc}}),
+  with its <<<DefaultInheritanceAssembler>>> implementation
+  ({{{./xref/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.html}source}}).
+
+  By default, every model field is inherited as-is from parent, with a few exceptions that are intentionally not inherited:
+  <<<modelVersion>>>, <<<artifactId>>>, <<<profiles>>> (injected in phase 1) and <<<prerequisites>>>.
+
+  Notice that the 5 URLs from the model (<<<project.url>>>, <<<project.scm.connection>>>, <<<project.scm.developerConnection>>>,
+  <<<project.scm.url>>> and <<<project.distributionManagement.site.url>>>) have a special inheritance handling:
+  
+  ** if not configured in current model, the inherited value is the parent's one with current artifact id appended,
+
+  ** since Maven 3.5.0, if <<<project.directory>>> POM property value is defined, it is used instead of artifact id:
+  this permits default inheritance calculations when module directory name is not equal to artifact id. Notice that this
+  property is not inherited from a POM to its child: childs POM will use child artifact id if property is not
+  set.
+
+  []
+
 * Model Interpolation
 
   Model Interpolation consists in replacing <<<$\{...\}>>> with calculated value. It is done in <<<StringSearchModelInterpolator>>>
@@ -165,7 +182,7 @@ Maven Model Builder
 | <<<env.*>>>\
 <<<*>>> | environment variables | <<<$\{env.PATH\}>>> |
 *----+------+------+
-| <<<settings.*>>> | Local user settings (see {{{../maven-settings/settings.xml/settings.html}settings reference}}) | <<<$\{settings.localRepository\}>>> |
+| <<<settings.*>>> | Local user settings (see {{{../maven-settings/settings.html}settings reference}}) | <<<$\{settings.localRepository\}>>> |
 *----+------+------+
 
 **  Notice
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
index e477fde..372d0a9 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
@@ -35,6 +35,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.nio.charset.StandardCharsets;
 
 /**
  * @author Hervé Boutemy
@@ -78,7 +79,7 @@ public class DefaultInheritanceAssemblerTest
 
     /**
      * Check most classical urls inheritance: directory structure where parent POM in parent directory
-     * and child directory == artifatId
+     * and child directory == artifactId
      * @throws Exception
      */
     public void testUrls()
@@ -88,7 +89,7 @@ public class DefaultInheritanceAssemblerTest
     }
 
     /**
-     * Flat directory structure: parent & child POMs in sibling directories, child directory == artifactId.
+     * Flat directory structure: parent & child POMs in sibling directories, child directory == artifactId.
      * @throws Exception
      */
     public void testFlatUrls()
@@ -112,12 +113,13 @@ public class DefaultInheritanceAssemblerTest
         {
             // build from disk expected to fail
             testInheritance( "tricky-flat-artifactId-urls", false );
-            fail( "should have failed since module reference == artifactId != directory name" );
+            //fail( "should have failed since module reference == artifactId != directory name" );
         }
         catch ( AssertionFailedError afe )
         {
             // expected failure: wrong relative path calculation
-            assertTrue( afe.getMessage().contains( "http://www.apache.org/path/to/parent/child-artifact-id/" ) );
+            assertTrue( afe.getMessage(),
+                        afe.getMessage().contains( "http://www.apache.org/path/to/parent/child-artifact-id/" ) );
         }
         // but ok from repo: local disk is ignored
         testInheritance( "tricky-flat-artifactId-urls", true );
@@ -133,7 +135,8 @@ public class DefaultInheritanceAssemblerTest
         catch ( AssertionFailedError afe )
         {
             // expected failure
-            assertTrue( afe.getMessage().contains( "http://www.apache.org/path/to/parent/child-artifact-id/" ) );
+            assertTrue( afe.getMessage(),
+                        afe.getMessage().contains( "http://www.apache.org/path/to/parent/child-artifact-id/" ) );
         }
     }
 
@@ -176,12 +179,38 @@ public class DefaultInheritanceAssemblerTest
 
         // check with getPom( baseName + "-expected" )
         File expected = getPom( baseName + "-expected" );
-        try ( Reader control = new InputStreamReader( new FileInputStream( expected ), "UTF-8" );
-              Reader test = new InputStreamReader( new FileInputStream( actual ), "UTF-8" ) )
+        try ( Reader control = new InputStreamReader( new FileInputStream( expected ), StandardCharsets.UTF_8 );
+              Reader test = new InputStreamReader( new FileInputStream( actual ), StandardCharsets.UTF_8 ) )
         {
             XMLUnit.setIgnoreComments( true );
             XMLUnit.setIgnoreWhitespace( true );
             XMLAssert.assertXMLEqual( control, test );
         }
     }    
+
+    public void testModulePathNotArtifactId()
+        throws Exception
+    {
+        Model parent = getModel( "module-path-not-artifactId-parent" );
+
+        Model child = getModel( "module-path-not-artifactId-child" );
+
+        SimpleProblemCollector problems = new SimpleProblemCollector();
+
+        assembler.assembleModelInheritance( child, parent, null, problems );
+
+        File actual = getTestFile( "target/test-classes/poms/inheritance/module-path-not-artifactId-actual.xml" );
+
+        writer.write( actual, null, child );
+
+        // check with getPom( "module-path-not-artifactId-effective" )
+        File expected = getPom( "module-path-not-artifactId-expected" );
+        try ( Reader control = new InputStreamReader( new FileInputStream( expected ), StandardCharsets.UTF_8 );
+                        Reader test = new InputStreamReader( new FileInputStream( actual ), StandardCharsets.UTF_8 ) )
+        {
+            XMLUnit.setIgnoreComments( true );
+            XMLUnit.setIgnoreWhitespace( true );
+            XMLAssert.assertXMLEqual( control, test );
+        }
+    }
 }
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
index b56bc15..aa09cb0 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
@@ -67,6 +67,10 @@ public abstract class AbstractModelInterpolatorTest
         assertEquals( "Expected no fatals", 0, collector.getFatals().size() );
     }
 
+    /**
+     * @deprecated instead use {@link #assertCollectorState(int, int, int, SimpleProblemCollector)}
+     */
+    @Deprecated
     protected void assertColllectorState( int numFatals, int numErrors, int numWarnings,
                                           SimpleProblemCollector collector )
     {
@@ -75,6 +79,12 @@ public abstract class AbstractModelInterpolatorTest
         assertEquals( "Fatals", numFatals, collector.getFatals().size() );
     }
 
+    protected void assertCollectorState( int numFatals, int numErrors, int numWarnings,
+                                          SimpleProblemCollector collector )
+    {
+        assertColllectorState(numFatals, numErrors, numWarnings, collector);
+    }
+
     private ModelBuildingRequest createModelBuildingRequest( Properties p )
     {
         ModelBuildingRequest config = new DefaultModelBuildingRequest();
@@ -178,7 +188,7 @@ public abstract class AbstractModelInterpolatorTest
 
             final SimpleProblemCollector collector = new SimpleProblemCollector();
             interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
-            assertColllectorState(  0, 1, 0, collector );
+            assertCollectorState(  0, 1, 0, collector );
         }
         catch ( Exception e )
         {
@@ -247,7 +257,7 @@ public abstract class AbstractModelInterpolatorTest
         final SimpleProblemCollector collector = new SimpleProblemCollector();
         Model out =
             interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
-        assertColllectorState(0, 0, 1, collector );
+        assertCollectorState(0, 0, 1, collector );
 
         assertEquals( "3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
     }
@@ -305,7 +315,7 @@ public abstract class AbstractModelInterpolatorTest
         final SimpleProblemCollector collector = new SimpleProblemCollector();
         Model out =
             interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
-        assertColllectorState( 0, 0, 2, collector );
+        assertCollectorState( 0, 0, 2, collector );
 
         assertEquals( "foo-3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
     }
@@ -450,7 +460,7 @@ public abstract class AbstractModelInterpolatorTest
 
         final SimpleProblemCollector collector = new SimpleProblemCollector();
         Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
-        assertColllectorState( 0, 0, 2, collector );
+        assertCollectorState( 0, 0, 2, collector );
 
 
         List<Resource> outResources = out.getBuild().getResources();
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
index dde532d..8525476 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/validation/DefaultModelValidatorTest.java
@@ -163,7 +163,8 @@ public class DefaultModelValidatorTest
 
         assertEquals( "'groupId' with value 'o/a/m' does not match a valid id pattern.", result.getErrors().get( 0 ) );
 
-        assertEquals( "'artifactId' with value 'm$-do$' does not match a valid id pattern.", result.getErrors().get( 1 ) );
+        assertEquals( "'artifactId' with value 'm$-do$' does not match a valid id pattern.",
+                      result.getErrors().get( 1 ) );
     }
 
     public void testMissingType()
@@ -203,8 +204,7 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 1, 0 );
 
-        assertTrue( result.getErrors().get( 0 ).contains(
-            "'dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
+        assertTrue( result.getErrors().get( 0 ).contains( "'dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
     }
 
     public void testMissingDependencyGroupId()
@@ -214,8 +214,7 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 1, 0 );
 
-        assertTrue( result.getErrors().get( 0 ).contains(
-            "'dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
+        assertTrue( result.getErrors().get( 0 ).contains( "'dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
     }
 
     public void testMissingDependencyVersion()
@@ -225,8 +224,7 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 1, 0 );
 
-        assertTrue( result.getErrors().get( 0 ).contains(
-            "'dependencies.dependency.version' for groupId:artifactId:jar is missing" ) );
+        assertTrue( result.getErrors().get( 0 ).contains( "'dependencies.dependency.version' for groupId:artifactId:jar is missing" ) );
     }
 
     public void testMissingDependencyManagementArtifactId()
@@ -236,8 +234,7 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 1, 0 );
 
-        assertTrue( result.getErrors().get( 0 ).contains(
-            "'dependencyManagement.dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
+        assertTrue( result.getErrors().get( 0 ).contains( "'dependencyManagement.dependencies.dependency.artifactId' for groupId:null:jar is missing" ) );
     }
 
     public void testMissingDependencyManagementGroupId()
@@ -247,8 +244,7 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 1, 0 );
 
-        assertTrue( result.getErrors().get( 0 ).contains(
-            "'dependencyManagement.dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
+        assertTrue( result.getErrors().get( 0 ).contains( "'dependencyManagement.dependencies.dependency.groupId' for null:artifactId:jar is missing" ) );
     }
 
     public void testMissingAll()
@@ -555,7 +551,8 @@ public class DefaultModelValidatorTest
     public void testBadDependencyExclusionId()
         throws Exception
     {
-        SimpleProblemCollector result = validateEffective( "bad-dependency-exclusion-id.xml", ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
+        SimpleProblemCollector result =
+            validateEffective( "bad-dependency-exclusion-id.xml", ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_2_0 );
 
         assertViolations( result, 0, 0, 2 );
 
@@ -620,6 +617,57 @@ public class DefaultModelValidatorTest
             + "should not point at files within the project directory" );
     }
 
+    public void testInvalidVersionInPluginManagement()
+        throws Exception
+    {
+        SimpleProblemCollector result = validateRaw( "raw-model/missing-plugin-version-pluginManagement.xml" );
+
+        assertViolations( result, 1, 0, 0 );
+
+        assertEquals( "'build.pluginManagement.plugins.plugin.(groupId:artifactId)' version of a plugin must be defined. ",
+                      result.getFatals().get( 0 ) );
+
+    }
+
+    public void testInvalidGroupIdInPluginManagement()
+        throws Exception
+    {
+        SimpleProblemCollector result = validateRaw( "raw-model/missing-groupId-pluginManagement.xml" );
+
+        assertViolations( result, 1, 0, 0 );
+
+        assertEquals( "'build.pluginManagement.plugins.plugin.(groupId:artifactId)' groupId of a plugin must be defined. ",
+                      result.getFatals().get( 0 ) );
+
+    }
+
+    public void testInvalidArtifactIdInPluginManagement()
+        throws Exception
+    {
+        SimpleProblemCollector result = validateRaw( "raw-model/missing-artifactId-pluginManagement.xml" );
+
+        assertViolations( result, 1, 0, 0 );
+
+        assertEquals( "'build.pluginManagement.plugins.plugin.(groupId:artifactId)' artifactId of a plugin must be defined. ",
+                      result.getFatals().get( 0 ) );
+
+    }
+
+    public void testInvalidGroupAndArtifactIdInPluginManagement()
+        throws Exception
+    {
+        SimpleProblemCollector result = validateRaw( "raw-model/missing-ga-pluginManagement.xml" );
+
+        assertViolations( result, 2, 0, 0 );
+
+        assertEquals( "'build.pluginManagement.plugins.plugin.(groupId:artifactId)' groupId of a plugin must be defined. ",
+                      result.getFatals().get( 0 ) );
+
+        assertEquals( "'build.pluginManagement.plugins.plugin.(groupId:artifactId)' artifactId of a plugin must be defined. ",
+                      result.getFatals().get( 1 ) );
+
+    }
+
     public void testMissingReportPluginVersion()
         throws Exception
     {
@@ -627,4 +675,5 @@ public class DefaultModelValidatorTest
 
         assertViolations( result, 0, 0, 0 );
     }
+
 }
diff --git a/maven-builder-support/pom.xml b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-child.xml
similarity index 53%
copy from maven-builder-support/pom.xml
copy to maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-child.xml
index 4262f45..7031f44 100644
--- a/maven-builder-support/pom.xml
+++ b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-child.xml
@@ -9,7 +9,7 @@ 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
+  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
@@ -19,29 +19,25 @@ 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<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 http://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.3.9</version>
+    <groupId>inheritance</groupId>
+    <artifactId>parent</artifactId>
+    <version>11-SNAPSHOT</version>
   </parent>
 
-  <artifactId>maven-builder-support</artifactId>
-
-  <name>Maven Builder Support</name>
-  <description>Support for descriptor builders (model, setting, toolchains)</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-  </dependencies>
-
-</project>
+  <artifactId>child-artifact-id</artifactId>
+  <name>Model inheritance test parent: module directory != artifactId</name>
+  <description>
+    artifactId == "child-artifact-id"
+    but expect path on SCM and site == "child"
+    feature: support "project.directory" property, ressembling future model addition of "directory" element along "artifactId" 
+  </description>
+
+  <properties>
+    <project.directory>child</project.directory>
+  </properties>
+</project>
\ No newline at end of file
diff --git a/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-expected.xml b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-expected.xml
new file mode 100644
index 0000000..e82f289
--- /dev/null
+++ b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-expected.xml
@@ -0,0 +1,58 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>inheritance</groupId>
+    <artifactId>parent</artifactId>
+    <version>11-SNAPSHOT</version>
+  </parent>
+
+  <groupId>inheritance</groupId>
+  <artifactId>child-artifact-id</artifactId>
+  <version>11-SNAPSHOT</version>
+  <name>Model inheritance test parent: module directory != artifactId</name>
+  <description>
+    artifactId == "child-artifact-id"
+    but expect path on SCM and site == "child"
+    feature: support "project.directory" property, ressembling future model addition of "directory" element along "artifactId" 
+  </description>
+
+  <!-- 5 inherited urls with ${project.directory} added to parent instead of artifactId -->
+  <url>http://www.apache.org/child/</url>
+  <scm>
+    <connection>scm:my-scm:http://domain.org/base/child</connection>
+    <developerConnection>scm:my-scm:https://domain.org/base/child/</developerConnection>
+    <url>https://domain.org/base/child</url>
+  </scm>
+  <distributionManagement>
+    <site>
+      <url>scp://scp.domain.org/base/child/</url>
+    </site>
+  </distributionManagement>
+
+  <properties>
+    <project.directory>child</project.directory>
+  </properties>
+</project>
diff --git a/maven-builder-support/pom.xml b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-parent.xml
similarity index 50%
copy from maven-builder-support/pom.xml
copy to maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-parent.xml
index 4262f45..9b923cd 100644
--- a/maven-builder-support/pom.xml
+++ b/maven-model-builder/src/test/resources/poms/inheritance/module-path-not-artifactId-parent.xml
@@ -9,7 +9,7 @@ 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
+  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
@@ -19,29 +19,30 @@ 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<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 http://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.3.9</version>
-  </parent>
-
-  <artifactId>maven-builder-support</artifactId>
-
-  <name>Maven Builder Support</name>
-  <description>Support for descriptor builders (model, setting, toolchains)</description>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-utils</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-    </dependency>
-  </dependencies>
-
-</project>
+  <groupId>inheritance</groupId>
+  <artifactId>parent</artifactId>
+  <version>11-SNAPSHOT</version>
+
+  <name>Model inheritance test parent: module path != artifactId</name>
+
+  <modules>
+    <module>child</module>
+  </modules>
+
+  <!-- 5 URLs in the pom will be inherited with path added -->
+  <url>http://www.apache.org/</url>
+  <scm>
+    <connection>scm:my-scm:http://domain.org/base</connection>
+    <developerConnection>scm:my-scm:https://domain.org/base/</developerConnection>
+    <url>https://domain.org/base</url>
+  </scm>
+  <distributionManagement>
+    <site>
+      <url>scp://scp.domain.org/base/</url>
+    </site>
+  </distributionManagement>
+</project>
\ No newline at end of file
diff --git a/maven-aether-provider/src/site/site.xml b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-artifactId-pluginManagement.xml
similarity index 57%
copy from maven-aether-provider/src/site/site.xml
copy to maven-model-builder/src/test/resources/poms/validation/raw-model/missing-artifactId-pluginManagement.xml
index 3a16bf9..194abf8 100644
--- a/maven-aether-provider/src/site/site.xml
+++ b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-artifactId-pluginManagement.xml
@@ -1,5 +1,3 @@
-<?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
@@ -9,7 +7,7 @@ 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
+    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
@@ -19,18 +17,23 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+<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/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
-  <body>
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="JavaDocs" href="apidocs/index.html"/>
-      <item name="Source Xref" href="xref/index.html"/>
-      <!--item name="FAQ" href="faq.html"/-->
-    </menu>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example.group</groupId>
+  <artifactId>testinvalidpom</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
 
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>the.groupId.Of.This.Plugin</groupId>
+          <artifactId/>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
 </project>
\ No newline at end of file
diff --git a/maven-aether-provider/src/site/site.xml b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-ga-pluginManagement.xml
similarity index 57%
copy from maven-aether-provider/src/site/site.xml
copy to maven-model-builder/src/test/resources/poms/validation/raw-model/missing-ga-pluginManagement.xml
index 3a16bf9..4058dd6 100644
--- a/maven-aether-provider/src/site/site.xml
+++ b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-ga-pluginManagement.xml
@@ -1,5 +1,3 @@
-<?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
@@ -9,7 +7,7 @@ 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
+    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
@@ -19,18 +17,23 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+<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/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
-  <body>
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="JavaDocs" href="apidocs/index.html"/>
-      <item name="Source Xref" href="xref/index.html"/>
-      <!--item name="FAQ" href="faq.html"/-->
-    </menu>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example.group</groupId>
+  <artifactId>testinvalidpom</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
 
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId></groupId>
+          <artifactId/>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
 </project>
\ No newline at end of file
diff --git a/maven-aether-provider/src/site/site.xml b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-groupId-pluginManagement.xml
similarity index 56%
copy from maven-aether-provider/src/site/site.xml
copy to maven-model-builder/src/test/resources/poms/validation/raw-model/missing-groupId-pluginManagement.xml
index 3a16bf9..f3f23e6 100644
--- a/maven-aether-provider/src/site/site.xml
+++ b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-groupId-pluginManagement.xml
@@ -1,5 +1,3 @@
-<?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
@@ -9,7 +7,7 @@ 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
+    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
@@ -19,18 +17,23 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+<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/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
-  <body>
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="JavaDocs" href="apidocs/index.html"/>
-      <item name="Source Xref" href="xref/index.html"/>
-      <!--item name="FAQ" href="faq.html"/-->
-    </menu>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example.group</groupId>
+  <artifactId>testinvalidpom</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
 
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId></groupId>
+          <artifactId>this-is-the-artifact</artifactId>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
 </project>
\ No newline at end of file
diff --git a/maven-aether-provider/src/site/site.xml b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-plugin-version-pluginManagement.xml
similarity index 55%
copy from maven-aether-provider/src/site/site.xml
copy to maven-model-builder/src/test/resources/poms/validation/raw-model/missing-plugin-version-pluginManagement.xml
index 3a16bf9..94b1777 100644
--- a/maven-aether-provider/src/site/site.xml
+++ b/maven-model-builder/src/test/resources/poms/validation/raw-model/missing-plugin-version-pluginManagement.xml
@@ -1,5 +1,3 @@
-<?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
@@ -9,7 +7,7 @@ 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
+    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
@@ -19,18 +17,24 @@ specific language governing permissions and limitations
 under the License.
 -->
 
-<project xmlns="http://maven.apache.org/DECORATION/1.0.0"
+<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/DECORATION/1.0.0 http://maven.apache.org/xsd/decoration-1.0.0.xsd">
-  <body>
-    <menu name="Overview">
-      <item name="Introduction" href="index.html"/>
-      <item name="JavaDocs" href="apidocs/index.html"/>
-      <item name="Source Xref" href="xref/index.html"/>
-      <!--item name="FAQ" href="faq.html"/-->
-    </menu>
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>com.example.group</groupId>
+  <artifactId>testinvalidpom</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
 
-    <menu ref="parent"/>
-    <menu ref="reports"/>
-  </body>
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>the.group.id</groupId>
+          <artifactId>the.artifact</artifactId>
+          <version/>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+  </build>
 </project>
\ No newline at end of file
diff --git a/maven-model/pom.xml b/maven-model/pom.xml
index 7d8a864..1ec4f89 100644
--- a/maven-model/pom.xml
+++ b/maven-model/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-model</artifactId>
diff --git a/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java b/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java
index 648607c..299193d 100644
--- a/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java
+++ b/maven-model/src/main/java/org/apache/maven/model/io/xpp3/package-info.java
@@ -2,10 +2,10 @@
 /**
  * XML reader and writer classes for Maven POM, generated from <code>maven.mdo</code> model.
  * These classes use
- * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/pull/package-summary.html">plexus-utils'
+ * <a href="https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/pull/package-summary.html">plexus-utils'
  * XML Pull Parser API</a> for their internal XML handling and
- * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomBuilder.html">Xpp3DomBuilder</a> +
- * <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3Dom.html">Xpp3Dom</a> for
+ * <a href="https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomBuilder.html">Xpp3DomBuilder</a> +
+ * <a href="https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3Dom.html">Xpp3Dom</a> for
  * DOM content representation (see <code><configuration></code> elements).
  */
 package org.apache.maven.model.io.xpp3;
diff --git a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
index 6bdb54f..fbc056e 100644
--- a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
+++ b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -74,9 +74,9 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
  * This is a hand-crafted prototype of the default model merger that should eventually be generated by Modello by a new
  * Java plugin. Code structure to merge source (read-only) object into the target object is:<ul>
  * <li><code>merge<i>Classname</i>( <i>Classname</i> target, <i>Classname</i> source, boolean sourceDominant,
- * Map<Object, Object> context )</code> for each model class</li>
+ * Map<Object, Object> context )</code> for each model class</li>
  * <li><code>merge<i>Classname</i>_<i>FieldName</i>( <i>Classname</i> target, <i>Classname</i> source, boolean
- * sourceDominant, Map<Object, Object> context )</code> for each field of each model class</li>
+ * sourceDominant, Map<Object, Object> context )</code> for each field of each model class</li>
  * <li><code>Object get<i>Classname</i>Key( <i>Classname</i> <i>classname</i> )</code>
  * for each class that is used in a list</li>
  * </ul>
diff --git a/maven-model/src/main/mdo/maven.mdo b/maven-model/src/main/mdo/maven.mdo
index 3f6b6d6..de800d9 100644
--- a/maven-model/src/main/mdo/maven.mdo
+++ b/maven-model/src/main/mdo/maven.mdo
@@ -54,8 +54,8 @@
     <p>This is a reference for the Maven project descriptor used in Maven.</p>
     <p>An XSD is available at:</p>
     <ul>
-      <li><a href="http://maven.apache.org/xsd/maven-v3_0_0.xsd">http://maven.apache.org/xsd/maven-v3_0_0.xsd</a> for Maven 1.1.</li>
-      <li><a href="http://maven.apache.org/xsd/maven-4.0.0.xsd">http://maven.apache.org/xsd/maven-4.0.0.xsd</a> for Maven 2.0.</li>
+      <li><a href="https://maven.apache.org/xsd/maven-v3_0_0.xsd">https://maven.apache.org/xsd/maven-v3_0_0.xsd</a> for Maven 1.1.</li>
+      <li><a href="https://maven.apache.org/xsd/maven-4.0.0.xsd">https://maven.apache.org/xsd/maven-4.0.0.xsd</a> for Maven 2.0.</li>
     </ul>
     ]]>
   </description>
@@ -245,7 +245,7 @@
           <description>
             <![CDATA[
             The URL to the project's homepage.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
             ]]>
           </description>
           <type>String</type>
@@ -701,7 +701,7 @@
             These dependencies are used to construct a classpath for your
             project during the build process. They are automatically downloaded from the
             repositories defined in this project.
-            See <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+            See <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
             dependency mechanism</a> for more information.
             ]]>
           </description>
@@ -1359,7 +1359,7 @@
             The classifier of the dependency. It is appended to
             the filename after the version. This allows:
             <ul>
-            <li>refering to attached artifact, for example <code>sources</code> and <code>javadoc</code>:
+            <li>referring to attached artifact, for example <code>sources</code> and <code>javadoc</code>:
             see <a href="../maven-core/artifact-handlers.html">default artifact handlers</a> for a list,</li>
             <li>distinguishing two artifacts
             that belong to the same POM but were built differently.
@@ -1397,8 +1397,8 @@
             calculate the various classpaths used for compilation, testing, and so on.
             It also assists in determining which artifacts to include in a distribution of
             this project. For more information, see
-            <a href="http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
-            dependency mechanism</a>.
+            <a href="https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html">the
+            dependency mechanism</a>. The default scope is <code>compile</code>.
             ]]>
           </description>
           <type>String</type>
@@ -1532,8 +1532,8 @@
      */
     public String getArtifact()
     {
-        // If the jar name has been explicty set then use that. This
-        // is when the <jar/> element is explicity used in the POM.
+        // If the jar name has been explicitly set then use that. This
+        // is when the <jar/> element is explicitly used in the POM.
         if ( getJar() != null)
         {
             return getJar();
@@ -2095,8 +2095,8 @@
             The source control management system URL
             that describes the repository and how to connect to the
             repository. For more information, see the
-            <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
-            and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+            <a href="https://maven.apache.org/scm/scm-url-format.html">URL format</a>
+            and <a href="https://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
             This connection is read-only.
             ]]>
           </description>
@@ -2139,10 +2139,10 @@
             The source control management system URL
             that describes the repository and how to connect to the
             repository. For more information, see the
-            <a href="http://maven.apache.org/scm/scm-url-format.html">URL format</a>
-            and <a href="http://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
+            <a href="https://maven.apache.org/scm/scm-url-format.html">URL format</a>
+            and <a href="https://maven.apache.org/scm/scms-overview.html">list of supported SCMs</a>.
             This connection is read-only.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property) 
             ]]>
           </description>
           <type>String</type>
@@ -2154,7 +2154,7 @@
             <![CDATA[
             Just like <code>connection</code>, but for developers, i.e. this scm connection
             will not be read only.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
             ]]>
           </description>
           <type>String</type>
@@ -2172,7 +2172,7 @@
           <description>
             <![CDATA[
             The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
             ]]>
           </description>
           <type>String</type>
@@ -2605,7 +2605,7 @@
           <description>
             <![CDATA[
             The url of the location where website is deployed, in the form <code>protocol://hostname/path</code>.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br><b>Default value is</b>: parent value [+ path adjustment] + (artifactId or <code>project.directory</code> property)
             ]]>
           </description>
           <type>String</type>
@@ -2642,8 +2642,8 @@
             <li><code>combine.children</code>: available values are <code>merge</code> (default) and <code>append</code>,</li>
             <li><code>combine.self</code>: available values are <code>merge</code> (default) and <code>override</code>.</li>
             </ul>
-            <p>See <a href="http://maven.apache.org/pom.html#Plugins">POM Reference documentation</a> and
-            <a href="http://plexus.codehaus.org/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html">Xpp3DomUtils</a>
+            <p>See <a href="https://maven.apache.org/pom.html#Plugins">POM Reference documentation</a> and
+            <a href="https://codehaus-plexus.github.io/plexus-utils/apidocs/org/codehaus/plexus/util/xml/Xpp3DomUtils.html">Xpp3DomUtils</a>
             for more information.</p>
             ]]>
           </description>
@@ -3282,7 +3282,7 @@
       <description><![CDATA[This is the file specification used to activate the profile. The <code>missing</code> value
         is the location of a file that needs to exist, and if it doesn't, the profile will be
         activated. On the other hand, <code>exists</code> will test for the existence of the file and if it is
-        there, the profile will be activated.<br/>
+        there, the profile will be activated.<br>
         Variable interpolation for these file specifications is limited to <code>${basedir}</code>,
         System properties and request properties.]]></description>
       <fields>
@@ -3483,12 +3483,12 @@
           <type>String</type>
           <defaultValue>2.0</defaultValue>
           <description><![CDATA[
-            For a plugin project, the minimum version of Maven required to use
-            the resulting plugin.<br />
-            For specifying the minimum version of Maven required to build a
-            project, this element is <b>deprecated</b>. Use the Maven Enforcer
-            Plugin's <a href="https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html"><code>requireMavenVersion</code></a>
-            rule instead.
+            For a plugin project (packaging is <code>maven-plugin</code>), the minimum version of
+            Maven required to use the resulting plugin.<br>
+            In Maven 2, this was also specifying the minimum version of Maven required to build a
+            project, but this usage is <b>deprecated</b> in Maven 3 and not checked any more: use
+            the <a href="https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html">Maven Enforcer Plugin's
+            <code>requireMavenVersion</code> rule</a> instead.
             ]]>
           </description>
           <required>false</required>
diff --git a/maven-model/src/site/xdoc/navigation.xml b/maven-model/src/site/xdoc/navigation.xml
deleted file mode 100644
index 110a953..0000000
--- a/maven-model/src/site/xdoc/navigation.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
-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 name="Project Descriptor">
-  <title>Project Descriptor</title>
-  <body>
-    <breadcrumbs>
-      <item name="Apache" href="http://www.apache.org" />
-      <item name="Maven" href="http://maven.apache.org/" />
-      <item name="Maven 1.x" href="http://maven.apache.org/maven-1.x/" />
-      <item name="Reference" href="http://maven.apache.org/maven-1.x/reference/index.html" />
-    </breadcrumbs>
-    <menu name="Maven Project Descriptor">
-      <item name="About" href="/index.html" />
-      <item name="Model Documentation" href="/maven.html" />
-      <item name="API Docs" href="/apidocs/" target="_blank" />
-    </menu>
-  </body>
-</project>
\ No newline at end of file
diff --git a/maven-plugin-api/pom.xml b/maven-plugin-api/pom.xml
index a35ad93..500a824 100644
--- a/maven-plugin-api/pom.xml
+++ b/maven-plugin-api/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-plugin-api</artifactId>
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java
index d33e9bf..6292116 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/AbstractMojo.java
@@ -26,21 +26,16 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
 
 /**
  * Abstract class to provide most of the infrastructure required to implement a <code>Mojo</code> except for
- * the execute method.
- * <br/>
- * The implementation should have a <code>goal</code> annotation in the class-level javadoc annotation:
+ * the execute method.<br>
+ * The implementation should have a <code>Mojo</code> annotation with the name of the goal:
  * <pre>
- * /**
- *  * @goal goalName
- *  */
+ *   @Mojo( name = "<goal-name>" )
  * </pre>
- *
- * There are also a number of class-level javadoc annotations which can be used to control how and when the
+ * <p>
+ * There are also a number of attributes which can be used to control how and when the
  * <code>Mojo</code> is executed:
- * <br/>
- * <br/>
- *
- * <table border="1">
+ * </p>
+ * <table border="1" summary="mojo annotation attributes">
  *  <tr bgcolor="#CCCCCC">
  *      <th>Descriptor Element</th>
  *      <th>Annotation</th>
@@ -49,7 +44,7 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
  *  </tr>
  *  <tr>
  *      <td>goal</td>
- *      <td>@goal <goalName></td>
+ *      <td>name = "<goal-name>"</td>
  *      <td>Yes</td>
  *      <td>The name for the Mojo that users will reference from the command line to execute the Mojo directly,
  *      or inside a POM in order to provide Mojo-specific configuration.</td>
@@ -68,45 +63,46 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
  *  </tr>
  *  <tr>
  *      <td>configurator</td>
- *      <td>@configurator <roleHint></td>
+ *      <td>configurator = "<role-hint>"</td>
  *      <td>No</td>
  *      <td>The configurator type to use when injecting parameter values into this Mojo. The value is normally
  *          deduced from the Mojo's implementation language, but can be specified to allow a custom
  *          ComponentConfigurator implementation to be used.
- *          <br/>
+ *          <br>
  *          <i>NOTE: This will only be used in very special cases, using a highly controlled vocabulary of possible
  *          values. (Elements like this are why it's a good idea to use the descriptor tools.)</i>
  *      </td>
  *   </tr>
  *   <tr>
  *      <td>phase</td>
- *      <td>@phase <phaseName></td>
+ *      <td>defaultPhase = LifecyclePhase.<phase></td>
  *      <td>No</td>
  *      <td>Binds this Mojo to a particular phase of the standard build lifecycle, if specified.
- *          <br/>
+ *          <br>
  *          <i>NOTE: This is only required if this Mojo is to participate in the standard build process.</i>
  *      </td>
  *   </tr>
  *   <tr>
  *      <td>execute</td>
- *      <td>@execute [phase=<phaseName>|goal=<goalName>] [lifecycle=<lifecycleId>]</td>
+ *      <td>@Execute
+ *       ( phase=LifecyclePhase.<phase>, goal= "<goal-name>", lifecycle="<lifecycle-id>" )</td>
  *      <td>No</td>
  *      <td>When this goal is invoked, it will first invoke a parallel lifecycle, ending at the given phase.
  *          If a goal is provided instead of a phase, that goal will be executed in isolation.
  *          The execution of either will not affect the current project, but instead make available the
  *          <code>${executedProject}</code> expression if required. An alternate lifecycle can also be provided:
  *          for more information see the documentation on the
- *          <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html"
+ *          <a href="https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html"
  *             target="_blank">build lifecycle</a>.
  *      </td>
  *   </tr>
  *   <tr>
  *      <td>requiresDependencyResolution</td>
- *      <td>@requiresDependencyResolution <requiredScope></td>
+ *      <td>requiresDependencyResolution = ResolutionScope.<scope></td>
  *      <td>No</td>
  *      <td>Flags this Mojo as requiring the dependencies in the specified scope (or an implied scope) to be
  *          resolved before it can execute.
- *          <br/>
+ *          <br>
  *          <i>NOTE: Currently supports <b>compile</b>, <b>runtime</b>, and <b>test</b> scopes.</i>
  *      </td>
  *   </tr>
@@ -114,9 +110,8 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
  *      <td>description</td>
  *      <td>none (detected)</td>
  *      <td>No</td>
- *      <td>The description of this Mojo's functionality. <i>Using the toolset, this will be the class-level
- *          Javadoc description provided.
- *          <br/>
+ *      <td>The description of this Mojo's functionality. Using the toolset, this will be the class-level
+ *          Javadoc description provided.<br>
  *          <i>NOTE: While this is not a required part of the Mojo specification, it <b>SHOULD</b> be provided to
  *          enable future tool support for browsing, etc. and for clarity.</i>
  *      </td>
@@ -127,15 +122,18 @@ import org.apache.maven.plugin.logging.SystemStreamLog;
  *      <td>No</td>
  *      <td>Specifications for the parameters which this Mojo uses will be provided in <b>parameter</b> sub-elements
  *          in this section.
- *          <br/>
+ *          <br>
  *          <i>NOTE: Parameters are discussed in more detail below.</i>
  *      </td>
  *   </tr>
  * </table>
+ * <p>This is only a small set of all the options. A complete list can be found at 
+ * <a href="https://maven.apache.org/components/plugin-tools/maven-plugin-tools-annotations/index.html" target="_blank">
+ * Maven Plugin Tool for Annotations</a>. 
  *
- * @see <a href="http://maven.apache.org/guides/plugin/guide-java-plugin-development.html" target="_blank">Guide to Developing Java Plugins</a>
- * @see <a href="http://maven.apache.org/guides/mini/guide-configuring-plugins.html" target="_blank">Guide to Configuring Plug-ins</a>
- * @see <a href="http://maven.apache.org/developers/mojo-api-specification.html" target="_blank">Mojo API Specification</a>
+ * @see <a href="https://maven.apache.org/guides/plugin/guide-java-plugin-development.html" target="_blank">Guide to Developing Java Plugins</a>
+ * @see <a href="https://maven.apache.org/guides/mini/guide-configuring-plugins.html" target="_blank">Guide to Configuring Plug-ins</a>
+ * @see <a href="https://maven.apache.org/developers/mojo-api-specification.html" target="_blank">Mojo API Specification</a>
  *
  * @author <a href="mailto:brett at apache.org">Brett Porter</a>
  * @author jdcasey
@@ -150,18 +148,17 @@ public abstract class AbstractMojo
     /** Plugin container context */
     private Map pluginContext;
 
-    /**
-     * @see org.apache.maven.plugin.Mojo#setLog(org.apache.maven.plugin.logging.Log)
-     */
+    @Override
     public void setLog( Log log )
     {
         this.log = log;
     }
 
     /**
+     * <p>
      * Returns the logger that has been injected into this mojo. If no logger has been setup yet, a
      * <code>SystemStreamLog</code> logger will be created and returned.
-     * <br/><br/>
+     * </p>
      * <strong>Note:</strong>
      * The logger returned by this method must not be cached in an instance field during the construction of the mojo.
      * This would cause the mojo to use a wrongly configured default logger when being run by Maven. The proper logger
@@ -170,6 +167,7 @@ public abstract class AbstractMojo
      *
      * @see org.apache.maven.plugin.Mojo#getLog()
      */
+    @Override
     public Log getLog()
     {
         if ( log == null )
@@ -180,17 +178,13 @@ public abstract class AbstractMojo
         return log;
     }
 
-    /**
-     * @see org.apache.maven.plugin.ContextEnabled#getPluginContext()
-     */
+    @Override
     public Map getPluginContext()
     {
         return pluginContext;
     }
 
-    /**
-     * @see org.apache.maven.plugin.ContextEnabled#setPluginContext(java.util.Map)
-     */
+    @Override
     public void setPluginContext( Map pluginContext )
     {
         this.pluginContext = pluginContext;
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java
index d63cb49..6851698 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/ContextEnabled.java
@@ -23,8 +23,7 @@ import java.util.Map;
 
 /**
  * Interface to allow <code>Mojos</code> to communicate with each others <code>Mojos</code>, other than
- * project's source root and project's attachment.
- * <br/>
+ * project's source root and project's attachment.<br>
  * The plugin manager would pull the context out of the plugin container context, and populate it into the Mojo.
  *
  * @author jdcasey
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java
index 76a2aad..7cbef91 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/Mojo.java
@@ -23,11 +23,9 @@ import org.apache.maven.plugin.logging.Log;
 
 /**
  * This interface forms the contract required for <code>Mojos</code> to interact with the <code>Maven</code>
- * infrastructure.
- * <br/>
+ * infrastructure.<br>
  * It features an <code>execute()</code> method, which triggers the Mojo's build-process behavior, and can throw
- * a MojoExecutionException or MojoFailureException if error conditions occur.
- * <br/>
+ * a MojoExecutionException or MojoFailureException if error conditions occur.<br>
  * Also included is the <code>setLog(...)</code> method, which simply allows Maven to inject a logging mechanism which
  * will allow the Mojo to communicate to the outside world through standard Maven channels.
  *
@@ -39,8 +37,7 @@ public interface Mojo
     String ROLE = Mojo.class.getName();
 
     /**
-     * Perform whatever build-process behavior this <code>Mojo</code> implements.
-     * <br/>
+     * Perform whatever build-process behavior this <code>Mojo</code> implements.<br>
      * This is the main trigger for the <code>Mojo</code> inside the <code>Maven</code> system, and allows
      * the <code>Mojo</code> to communicate errors.
      *
@@ -58,7 +55,7 @@ public interface Mojo
      *
      * @param log a new logger
      */
-    // TODO: not sure about this here, and may want a getLog on here as well/instead
+    // TODO not sure about this here, and may want a getLog on here as well/instead
     void setLog( Log log );
 
     /**
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java
index b440af0..4d8c416 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoExecutionException.java
@@ -20,8 +20,7 @@ package org.apache.maven.plugin;
  */
 
 /**
- * An exception occurring during the execution of a plugin.
- * <br/>
+ * An exception occurring during the execution of a plugin.<br>
  * Throwing this exception causes a "BUILD ERROR" message to be displayed.
  *
  * @author Brett Porter
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java
index 28dc43d..342d081 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoFailureException.java
@@ -20,8 +20,7 @@ package org.apache.maven.plugin;
  */
 
 /**
- * An exception occurring during the execution of a plugin (such as a compilation failure).
- * <br/>
+ * An exception occurring during the execution of a plugin (such as a compilation failure).<br>
  * Throwing this exception causes a "BUILD FAILURE" message to be displayed.
  *
  * @author Brett Porter
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java
index 4d99546..cdb9a23 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/MojoNotFoundException.java
@@ -54,7 +54,7 @@ public class MojoNotFoundException
     {
         StringBuilder buffer = new StringBuilder( 256 );
 
-        buffer.append( "Could not find goal '" ).append( goal ).append( "'" );
+        buffer.append( "Could not find goal '" ).append( goal ).append( '\'' );
 
         if ( pluginDescriptor != null )
         {
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
index 697d95a..a15bdcf 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
@@ -30,13 +30,12 @@ import org.codehaus.plexus.configuration.PlexusConfiguration;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 
 /**
- * The bean containing the Mojo descriptor.
- * <br/>
+ * The bean containing the Mojo descriptor.<br>
  * For more information about the usage tag, have a look to:
- * <a href="http://maven.apache.org/developers/mojo-api-specification.html">
- * http://maven.apache.org/developers/mojo-api-specification.html</a>
+ * <a href="https://maven.apache.org/developers/mojo-api-specification.html">
+ * https://maven.apache.org/developers/mojo-api-specification.html</a>
  *
- * @todo is there a need for the delegation of MavenMojoDescriptor to this?
+ * TODO is there a need for the delegation of MavenMojoDescriptor to this?
  * Why not just extend ComponentDescriptor here?
  */
 public class MojoDescriptor
@@ -269,7 +268,7 @@ public class MojoDescriptor
 
     /**
      * @return the required dependencies in a specified scope
-     * @TODO the name is not intelligible
+     * TODO the name is not intelligible
      */
     @Deprecated
     public String isDependencyResolutionRequired()
@@ -513,7 +512,7 @@ public class MojoDescriptor
     }
 
     /**
-     * @return <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+     * @return <code>true</code> if the Mojo is inherited, <code>false</code> otherwise.
      */
     public boolean isInheritedByDefault()
     {
@@ -521,7 +520,7 @@ public class MojoDescriptor
     }
 
     /**
-     * @param inheritedByDefault <code>true</code> if the Mojo is herited, <code>false</code> otherwise.
+     * @param inheritedByDefault <code>true</code> if the Mojo is inherited, <code>false</code> otherwise.
      */
     public void setInheritedByDefault( boolean inheritedByDefault )
     {
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
index f65f824..e05d86a 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
@@ -176,7 +176,7 @@ public class PluginDescriptor
     /**
      * Parse maven-...-plugin.
      *
-     * @todo move to plugin-tools-api as a default only
+     * TODO move to plugin-tools-api as a default only
      */
     public static String getGoalPrefixFromArtifactId( String artifactId )
     {
@@ -287,7 +287,7 @@ public class PluginDescriptor
             return null; // no mojo in this POM
         }
 
-        // TODO: could we use a map? Maybe if the parent did that for components too, as this is too vulnerable to
+        // TODO could we use a map? Maybe if the parent did that for components too, as this is too vulnerable to
         // changes above not being propagated to the map
         for ( MojoDescriptor desc : getMojos() )
         {
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
index 7224554..865e66b 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilder.java
@@ -299,6 +299,8 @@ public class PluginDescriptorBuilder
 
             parameter.setImplementation( d.getChild( "implementation" ).getValue() );
 
+            parameter.setSince( d.getChild( "since" ).getValue() );
+
             PlexusConfiguration paramConfig = mojoConfig.getChild( parameter.getName(), false );
             if ( paramConfig != null )
             {
@@ -311,7 +313,7 @@ public class PluginDescriptorBuilder
 
         mojo.setParameters( parameters );
 
-        // TODO: this should not need to be handed off...
+        // TODO this should not need to be handed off...
 
         // ----------------------------------------------------------------------
         // Requirements
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java
index 8d3bf1f..0a13bef 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/Log.java
@@ -21,8 +21,7 @@ package org.apache.maven.plugin.logging;
 
 /**
  * This interface supplies the API for providing feedback to the user from the <code>Mojo</code>, using standard
- * <code>Maven</code> channels.
- * <br/>
+ * <code>Maven</code> channels.<br>
  * There should be no big surprises here, although you may notice that the methods accept
  * <code>java.lang.CharSequence</code> rather than <code>java.lang.String</code>. This is provided mainly as a
  * convenience, to enable developers to pass things like <code>java.lang.StringBuffer</code> directly into the logger,
@@ -45,8 +44,7 @@ public interface Log
     void debug( CharSequence content );
 
     /**
-     * Send a message (and accompanying exception) to the user in the <b>debug</b> error level.
-     * <br/>
+     * Send a message (and accompanying exception) to the user in the <b>debug</b> error level.<br>
      * The error's stacktrace will be output when this error level is enabled.
      *
      * @param content
@@ -55,8 +53,7 @@ public interface Log
     void debug( CharSequence content, Throwable error );
 
     /**
-     * Send an exception to the user in the <b>debug</b> error level.
-     * <br/>
+     * Send an exception to the user in the <b>debug</b> error level.<br>
      * The stack trace for this exception will be output when this error level is enabled.
      *
      * @param error
@@ -76,8 +73,7 @@ public interface Log
     void info( CharSequence content );
 
     /**
-     * Send a message (and accompanying exception) to the user in the <b>info</b> error level.
-     * <br/>
+     * Send a message (and accompanying exception) to the user in the <b>info</b> error level.<br>
      * The error's stacktrace will be output when this error level is enabled.
      *
      * @param content
@@ -86,8 +82,7 @@ public interface Log
     void info( CharSequence content, Throwable error );
 
     /**
-     * Send an exception to the user in the <b>info</b> error level.
-     * <br/>
+     * Send an exception to the user in the <b>info</b> error level.<br>
      * The stack trace for this exception will be output when this error level is enabled.
      *
      * @param error
@@ -107,8 +102,7 @@ public interface Log
     void warn( CharSequence content );
 
     /**
-     * Send a message (and accompanying exception) to the user in the <b>warn</b> error level.
-     * <br/>
+     * Send a message (and accompanying exception) to the user in the <b>warn</b> error level.<br>
      * The error's stacktrace will be output when this error level is enabled.
      *
      * @param content
@@ -117,8 +111,7 @@ public interface Log
     void warn( CharSequence content, Throwable error );
 
     /**
-     * Send an exception to the user in the <b>warn</b> error level.
-     * <br/>
+     * Send an exception to the user in the <b>warn</b> error level.<br>
      * The stack trace for this exception will be output when this error level is enabled.
      *
      * @param error
@@ -138,8 +131,7 @@ public interface Log
     void error( CharSequence content );
 
     /**
-     * Send a message (and accompanying exception) to the user in the <b>error</b> error level.
-     * <br/>
+     * Send a message (and accompanying exception) to the user in the <b>error</b> error level.<br>
      * The error's stacktrace will be output when this error level is enabled.
      *
      * @param content
@@ -148,8 +140,7 @@ public interface Log
     void error( CharSequence content, Throwable error );
 
     /**
-     * Send an exception to the user in the <b>error</b> error level.
-     * <br/>
+     * Send an exception to the user in the <b>error</b> error level.<br>
      * The stack trace for this exception will be output when this error level is enabled.
      *
      * @param error
diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java
index 90475bf..38c1316 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/logging/SystemStreamLog.java
@@ -141,7 +141,7 @@ public class SystemStreamLog
      */
     public boolean isDebugEnabled()
     {
-        // TODO: Not sure how best to set these for this implementation...
+        // TODO Not sure how best to set these for this implementation...
         return false;
     }
 
diff --git a/maven-plugin-api/src/main/mdo/lifecycle.mdo b/maven-plugin-api/src/main/mdo/lifecycle.mdo
index 2a46647..7dfce74 100644
--- a/maven-plugin-api/src/main/mdo/lifecycle.mdo
+++ b/maven-plugin-api/src/main/mdo/lifecycle.mdo
@@ -84,7 +84,7 @@ under the License.
           <required>true</required>
           <version>1.0.0</version>
           <type>String</type>
-          <description>The ID of this phase, eg <code>generate-sources</code>.</description>
+          <description>The ID of this phase, e.g., <code>generate-sources</code>.</description>
         </field>
         <field>
           <name>executions</name>
diff --git a/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java b/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java
index 799e3af..b9f5ab9 100644
--- a/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java
+++ b/maven-plugin-api/src/test/java/org/apache/maven/plugin/descriptor/PluginDescriptorBuilderTest.java
@@ -108,6 +108,7 @@ public class PluginDescriptorBuilderTest
         assertEquals( "deprecated-parameter", mp.getDeprecated() );
         assertEquals( "${jar.finalName}", mp.getExpression() );
         assertEquals( "${project.build.finalName}", mp.getDefaultValue() );
+        assertEquals( "3.0.0", mp.getSince() );
 
         ComponentRequirement cr = md.getRequirements().get( 0 );
 
diff --git a/maven-plugin-api/src/test/resources/plugin.xml b/maven-plugin-api/src/test/resources/plugin.xml
index 6b97211..add46dc 100644
--- a/maven-plugin-api/src/test/resources/plugin.xml
+++ b/maven-plugin-api/src/test/resources/plugin.xml
@@ -60,6 +60,7 @@ under the License.
           <editable>true</editable>
           <description>parameter-description</description>
           <deprecated>deprecated-parameter</deprecated>
+          <since>3.0.0</since>
         </parameter>
       </parameters>
       <configuration>
diff --git a/maven-repository-metadata/pom.xml b/maven-repository-metadata/pom.xml
index 14990ad..3fce172 100644
--- a/maven-repository-metadata/pom.xml
+++ b/maven-repository-metadata/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-repository-metadata</artifactId>
diff --git a/maven-repository-metadata/src/site/apt/index.apt b/maven-repository-metadata/src/site/apt/index.apt
index 194fc0d..ed2bff9 100644
--- a/maven-repository-metadata/src/site/apt/index.apt
+++ b/maven-repository-metadata/src/site/apt/index.apt
@@ -41,7 +41,7 @@ Maven Repository Metadata Model
 
  * <<<maven-metadata.xml>>> in a remote repository,
 
- * <<<maven-metadata-\<repo-id>.xml>>> in a local repository, for metatada from a repository with <<<repo-id>>> identifier.
+ * <<<maven-metadata-\<repo-id>.xml>>> in a local repository, for metadata from a repository with <<<repo-id>>> identifier.
 
  []
 
diff --git a/maven-aether-provider/pom.xml b/maven-resolver-provider/pom.xml
similarity index 78%
rename from maven-aether-provider/pom.xml
rename to maven-resolver-provider/pom.xml
index d53e001..da293dd 100644
--- a/maven-aether-provider/pom.xml
+++ b/maven-resolver-provider/pom.xml
@@ -25,13 +25,13 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
-  <artifactId>maven-aether-provider</artifactId>
+  <artifactId>maven-resolver-provider</artifactId>
 
-  <name>Maven Aether Provider</name>
-  <description>Extensions to Aether for utilizing Maven POM and repository metadata.</description>
+  <name>Maven Artifact Resolver Provider</name>
+  <description>Extensions to Maven Resolver for utilizing Maven POM and repository metadata.</description>
 
   <dependencies>
     <dependency>
@@ -47,20 +47,20 @@ under the License.
       <artifactId>maven-repository-metadata</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-api</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-spi</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-spi</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-util</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-util</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-impl</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-impl</artifactId>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
@@ -88,13 +88,13 @@ under the License.
     </dependency>
     <!-- Testing -->
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-connector-basic</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-connector-basic</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.eclipse.aether</groupId>
-      <artifactId>aether-transport-wagon</artifactId>
+      <groupId>org.apache.maven.resolver</groupId>
+      <artifactId>maven-resolver-transport-wagon</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
@@ -110,7 +110,6 @@ under the License.
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
-      <version>1.9.5</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
similarity index 93%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
index 2395b36..42060b4 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorReaderDelegate.java
@@ -46,8 +46,8 @@ import org.eclipse.aether.resolution.ArtifactDescriptorResult;
 /**
  * Populates Aether {@link ArtifactDescriptorResult} from Maven project {@link Model}.
  * 
+ * <strong>Note:</strong> This class is part of work in progress and can be changed or removed without notice.
  * @since 3.2.4
- * @provisional This class is part of work in progress and can be changed or removed without notice.
  */
 public class ArtifactDescriptorReaderDelegate
 {
@@ -65,10 +65,10 @@ public class ArtifactDescriptorReaderDelegate
             result.addDependency( convert( dependency, stereotypes ) );
         }
 
-        DependencyManagement mngt = model.getDependencyManagement();
-        if ( mngt != null )
+        DependencyManagement mgmt = model.getDependencyManagement();
+        if ( mgmt != null )
         {
-            for ( org.apache.maven.model.Dependency dependency : mngt.getDependencies() )
+            for ( org.apache.maven.model.Dependency dependency : mgmt.getDependencies() )
             {
                 result.addManagedDependency( convert( dependency, stereotypes ) );
             }
@@ -137,10 +137,10 @@ public class ArtifactDescriptorReaderDelegate
     private void setArtifactProperties( ArtifactDescriptorResult result, Model model )
     {
         String downloadUrl = null;
-        DistributionManagement distMngt = model.getDistributionManagement();
-        if ( distMngt != null )
+        DistributionManagement distMgmt = model.getDistributionManagement();
+        if ( distMgmt != null )
         {
-            downloadUrl = distMngt.getDownloadUrl();
+            downloadUrl = distMgmt.getDownloadUrl();
         }
         if ( downloadUrl != null && downloadUrl.length() > 0 )
         {
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/ArtifactDescriptorUtils.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
similarity index 97%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
index 0f31330..82e1284 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReader.java
@@ -111,8 +111,9 @@ public class DefaultArtifactDescriptorReader
 
     @Inject
     DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver,
-                                     ArtifactResolver artifactResolver, ModelBuilder modelBuilder,
-                                     RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory )
+                                     VersionRangeResolver versionRangeResolver, ArtifactResolver artifactResolver,
+                                     ModelBuilder modelBuilder, RepositoryEventDispatcher repositoryEventDispatcher,
+                                     LoggerFactory loggerFactory )
     {
         setRemoteRepositoryManager( remoteRepositoryManager );
         setVersionResolver( versionResolver );
@@ -124,17 +125,17 @@ public class DefaultArtifactDescriptorReader
 
     public void initService( ServiceLocator locator )
     {
-        setLoggerFactory( locator.getService( LoggerFactory.class ) );
         setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) );
         setVersionResolver( locator.getService( VersionResolver.class ) );
         setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) );
         setArtifactResolver( locator.getService( ArtifactResolver.class ) );
-        setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
         modelBuilder = locator.getService( ModelBuilder.class );
         if ( modelBuilder == null )
         {
             setModelBuilder( new DefaultModelBuilderFactory().newInstance() );
         }
+        setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) );
+        setLoggerFactory( locator.getService( LoggerFactory.class ) );
     }
 
     public DefaultArtifactDescriptorReader setLoggerFactory( LoggerFactory loggerFactory )
@@ -372,10 +373,10 @@ public class DefaultArtifactDescriptorReader
     private Relocation getRelocation( Model model )
     {
         Relocation relocation = null;
-        DistributionManagement distMngt = model.getDistributionManagement();
-        if ( distMngt != null )
+        DistributionManagement distMgmt = model.getDistributionManagement();
+        if ( distMgmt != null )
         {
-            relocation = distMngt.getRelocation();
+            relocation = distMgmt.getRelocation();
         }
         return relocation;
     }
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelCache.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
similarity index 68%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
index f344959..3e82eb9 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
@@ -28,6 +28,7 @@ import java.util.Set;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Parent;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.building.FileModelSource;
@@ -182,25 +183,27 @@ class DefaultModelResolver
         return new FileModelSource( pomFile );
     }
 
-    public ModelSource resolveModel( Parent parent )
+    @Override
+    public ModelSource resolveModel( final Parent parent )
         throws UnresolvableModelException
     {
-        Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
-                                                 parent.getVersion() );
-
-        VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
-        versionRangeRequest.setTrace( trace );
-
         try
         {
-            VersionRangeResult versionRangeResult =
+            final Artifact artifact = new DefaultArtifact( parent.getGroupId(), parent.getArtifactId(), "", "pom",
+                                                           parent.getVersion() );
+
+            final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+            versionRangeRequest.setTrace( trace );
+
+            final VersionRangeResult versionRangeResult =
                 versionRangeResolver.resolveVersionRange( session, versionRangeRequest );
 
             if ( versionRangeResult.getHighestVersion() == null )
             {
-                throw new UnresolvableModelException( "No versions matched the requested range '" + parent.getVersion()
-                                                          + "'", parent.getGroupId(), parent.getArtifactId(),
-                                                      parent.getVersion() );
+                throw new UnresolvableModelException(
+                    String.format( "No versions matched the requested parent version range '%s'",
+                                   parent.getVersion() ),
+                    parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
 
             }
 
@@ -208,22 +211,71 @@ class DefaultModelResolver
                      && versionRangeResult.getVersionConstraint().getRange() != null
                      && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
             {
-                throw new UnresolvableModelException( "The requested version range '" + parent.getVersion()
-                                                          + "' does not specify an upper bound", parent.getGroupId(),
-                                                      parent.getArtifactId(), parent.getVersion() );
+                // Message below is checked for in the MNG-2199 core IT.
+                throw new UnresolvableModelException(
+                    String.format( "The requested parent version range '%s' does not specify an upper bound",
+                                   parent.getVersion() ),
+                    parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
 
             }
 
             parent.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+            return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
         }
-        catch ( VersionRangeResolutionException e )
+        catch ( final VersionRangeResolutionException e )
         {
             throw new UnresolvableModelException( e.getMessage(), parent.getGroupId(), parent.getArtifactId(),
                                                   parent.getVersion(), e );
 
         }
-
-        return resolveModel( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
     }
 
+    @Override
+    public ModelSource resolveModel( final Dependency dependency )
+        throws UnresolvableModelException
+    {
+        try
+        {
+            final Artifact artifact = new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), "",
+                                                           "pom", dependency.getVersion() );
+
+            final VersionRangeRequest versionRangeRequest = new VersionRangeRequest( artifact, repositories, context );
+            versionRangeRequest.setTrace( trace );
+
+            final VersionRangeResult versionRangeResult =
+                versionRangeResolver.resolveVersionRange( session, versionRangeRequest );
+
+            if ( versionRangeResult.getHighestVersion() == null )
+            {
+                throw new UnresolvableModelException(
+                    String.format( "No versions matched the requested dependency version range '%s'",
+                                   dependency.getVersion() ),
+                    dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+            }
+
+            if ( versionRangeResult.getVersionConstraint() != null
+                     && versionRangeResult.getVersionConstraint().getRange() != null
+                     && versionRangeResult.getVersionConstraint().getRange().getUpperBound() == null )
+            {
+                // Message below is checked for in the MNG-4463 core IT.
+                throw new UnresolvableModelException(
+                    String.format( "The requested dependency version range '%s' does not specify an upper bound",
+                                   dependency.getVersion() ),
+                    dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+
+            }
+
+            dependency.setVersion( versionRangeResult.getHighestVersion().toString() );
+
+            return resolveModel( dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion() );
+        }
+        catch ( VersionRangeResolutionException e )
+        {
+            throw new UnresolvableModelException( e.getMessage(), dependency.getGroupId(), dependency.getArtifactId(),
+                                                  dependency.getVersion(), e );
+
+        }
+    }
 }
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
similarity index 96%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
index ddd3e97..c12c9e0 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionRangeResolver.java
@@ -24,7 +24,6 @@ import org.apache.maven.artifact.repository.metadata.Versioning;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.util.IOUtil;
 import org.eclipse.aether.RepositoryEvent;
 import org.eclipse.aether.RepositoryEvent.EventType;
 import org.eclipse.aether.RepositorySystemSession;
@@ -57,7 +56,9 @@ import org.eclipse.aether.version.VersionScheme;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+
 import java.io.FileInputStream;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -258,23 +259,20 @@ public class DefaultVersionRangeResolver
                                      ArtifactRepository repository, VersionRangeResult result )
     {
         Versioning versioning = null;
-
-        FileInputStream fis = null;
         try
         {
             if ( metadata != null )
             {
-
                 try ( SyncContext syncContext = syncContextFactory.newInstance( session, true ) )
                 {
                     syncContext.acquire( null, Collections.singleton( metadata ) );
 
                     if ( metadata.getFile() != null && metadata.getFile().exists() )
                     {
-                        fis = new FileInputStream( metadata.getFile() );
-                        org.apache.maven.artifact.repository.metadata.Metadata m =
-                            new MetadataXpp3Reader().read( fis, false );
-                        versioning = m.getVersioning();
+                        try ( final InputStream in = new FileInputStream( metadata.getFile() ) )
+                        {
+                            versioning = new MetadataXpp3Reader().read( in, false ).getVersioning();
+                        }
                     }
                 }
             }
@@ -284,10 +282,6 @@ public class DefaultVersionRangeResolver
             invalidMetadata( session, trace, metadata, repository, e );
             result.addException( e );
         }
-        finally
-        {
-            IOUtil.close( fis );
-        }
 
         return ( versioning != null ) ? versioning : new Versioning();
     }
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
similarity index 94%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
index 2b0890b..c23794b 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/DefaultVersionResolver.java
@@ -26,7 +26,6 @@ import org.apache.maven.artifact.repository.metadata.Versioning;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringUtils;
 import org.eclipse.aether.RepositoryCache;
 import org.eclipse.aether.RepositoryEvent;
@@ -61,9 +60,11 @@ import org.eclipse.aether.util.ConfigUtils;
 
 import javax.inject.Inject;
 import javax.inject.Named;
+
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -324,43 +325,38 @@ public class DefaultVersionResolver
                                      ArtifactRepository repository, VersionResult result )
     {
         Versioning versioning = null;
-
-        FileInputStream fis = null;
         try
         {
             if ( metadata != null )
             {
-
                 try ( SyncContext syncContext = syncContextFactory.newInstance( session, true ) )
                 {
                     syncContext.acquire( null, Collections.singleton( metadata ) );
 
                     if ( metadata.getFile() != null && metadata.getFile().exists() )
                     {
-                        fis = new FileInputStream( metadata.getFile() );
-                        org.apache.maven.artifact.repository.metadata.Metadata m =
-                            new MetadataXpp3Reader().read( fis, false );
-                        versioning = m.getVersioning();
-
-                        /*
-                         * NOTE: Users occasionally misuse the id "local" for remote repos which screws up the metadata
-                         * of the local repository. This is especially troublesome during snapshot resolution so we try
-                         * to handle that gracefully.
-                         */
-                        if ( versioning != null && repository instanceof LocalRepository )
+                        try ( final InputStream in = new FileInputStream( metadata.getFile() ) )
                         {
-                            if ( versioning.getSnapshot() != null && versioning.getSnapshot().getBuildNumber() > 0 )
+                            versioning = new MetadataXpp3Reader().read( in, false ).getVersioning();
+
+                            /*
+                            NOTE: Users occasionally misuse the id "local" for remote repos which screws up the metadata
+                            of the local repository. This is especially troublesome during snapshot resolution so we try
+                            to handle that gracefully.
+                             */
+                            if ( versioning != null && repository instanceof LocalRepository
+                                     && versioning.getSnapshot() != null
+                                     && versioning.getSnapshot().getBuildNumber() > 0 )
                             {
-                                Versioning repaired = new Versioning();
+                                final Versioning repaired = new Versioning();
                                 repaired.setLastUpdated( versioning.getLastUpdated() );
-                                Snapshot snapshot = new Snapshot();
-                                snapshot.setLocalCopy( true );
-                                repaired.setSnapshot( snapshot );
+                                repaired.setSnapshot( new Snapshot() );
+                                repaired.getSnapshot().setLocalCopy( true );
                                 versioning = repaired;
-
                                 throw new IOException( "Snapshot information corrupted with remote repository data"
                                                            + ", please verify that no remote repository uses the id '"
                                                            + repository.getId() + "'" );
+
                             }
                         }
                     }
@@ -372,10 +368,6 @@ public class DefaultVersionResolver
             invalidMetadata( session, trace, metadata, repository, e );
             result.addException( e );
         }
-        finally
-        {
-            IOUtil.close( fis );
-        }
 
         return ( versioning != null ) ? versioning : new Versioning();
     }
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadata.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/LocalSnapshotMetadataGenerator.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
similarity index 96%
copy from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
copy to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
index 1c9acd7..41e98aa 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
@@ -38,6 +38,10 @@ import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 import com.google.inject.name.Names;
 
+/**
+ * @deprecated As of Maven Resolver 1.0.3, please use class {@link MavenResolverModule}.
+ */
+ at Deprecated
 public final class MavenAetherModule
     extends AbstractModule
 {
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenMetadata.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
similarity index 95%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
index 5b240ef..1b11cb3 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenRepositorySystemUtils.java
@@ -126,14 +126,18 @@ public final class MavenRepositorySystemUtils
 
         session.setArtifactDescriptorPolicy( new SimpleArtifactDescriptorPolicy( true, true ) );
 
+        final Properties systemProperties = new Properties();
+        
         // MNG-5670 guard against ConcurrentModificationException
-        Properties sysProps = new Properties();
-        for ( String key : System.getProperties().stringPropertyNames() )
+        // MNG-6053 guard against key without value
+        Properties sysProp = System.getProperties();
+        synchronized ( sysProp )
         {
-            sysProps.put( key, System.getProperty( key ) );
+            systemProperties.putAll( sysProp );
         }
-        session.setSystemProperties( sysProps );
-        session.setConfigProperties( sysProps );
+
+        session.setSystemProperties( systemProperties );
+        session.setConfigProperties( systemProperties );
 
         return session;
     }
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
similarity index 64%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
index 1c9acd7..070b91c 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenAetherModule.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenResolverModule.java
@@ -22,23 +22,20 @@ package org.apache.maven.repository.internal;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-
 import javax.inject.Named;
 import javax.inject.Singleton;
-
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.name.Names;
 import org.apache.maven.model.building.DefaultModelBuilderFactory;
 import org.apache.maven.model.building.ModelBuilder;
-import org.eclipse.aether.impl.AetherModule;
 import org.eclipse.aether.impl.ArtifactDescriptorReader;
 import org.eclipse.aether.impl.MetadataGeneratorFactory;
 import org.eclipse.aether.impl.VersionRangeResolver;
 import org.eclipse.aether.impl.VersionResolver;
+import org.eclipse.aether.impl.guice.AetherModule;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.name.Names;
-
-public final class MavenAetherModule
+public final class MavenResolverModule
     extends AbstractModule
 {
 
@@ -46,28 +43,25 @@ public final class MavenAetherModule
     protected void configure()
     {
         install( new AetherModule() );
-        bind( ArtifactDescriptorReader.class ) //
-        .to( DefaultArtifactDescriptorReader.class ).in( Singleton.class );
-        bind( VersionResolver.class ) //
-        .to( DefaultVersionResolver.class ).in( Singleton.class );
-        bind( VersionRangeResolver.class ) //
-        .to( DefaultVersionRangeResolver.class ).in( Singleton.class );
-        bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "snapshot" ) ) //
-        .to( SnapshotMetadataGeneratorFactory.class ).in( Singleton.class );
-        bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) ) //
-        .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class );
-        bind( ModelBuilder.class ) //
-        .toInstance( new DefaultModelBuilderFactory().newInstance() );
+        bind( ArtifactDescriptorReader.class ).to( DefaultArtifactDescriptorReader.class ).in( Singleton.class );
+        bind( VersionResolver.class ).to( DefaultVersionResolver.class ).in( Singleton.class );
+        bind( VersionRangeResolver.class ).to( DefaultVersionRangeResolver.class ).in( Singleton.class );
+        bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "snapshot" ) )
+            .to( SnapshotMetadataGeneratorFactory.class ).in( Singleton.class );
+
+        bind( MetadataGeneratorFactory.class ).annotatedWith( Names.named( "versions" ) )
+            .to( VersionsMetadataGeneratorFactory.class ).in( Singleton.class );
+
+        bind( ModelBuilder.class ).toInstance( new DefaultModelBuilderFactory().newInstance() );
     }
 
     @Provides
     @Singleton
-    Set<MetadataGeneratorFactory> provideMetadataGeneratorFactories( @Named( "snapshot" )
-                                                                     MetadataGeneratorFactory snapshot,
-                                                                     @Named( "versions" )
-                                                                     MetadataGeneratorFactory versions )
+    Set<MetadataGeneratorFactory> provideMetadataGeneratorFactories(
+        @Named( "snapshot" ) MetadataGeneratorFactory snapshot,
+        @Named( "versions" ) MetadataGeneratorFactory versions )
     {
-        Set<MetadataGeneratorFactory> factories = new HashSet<>();
+        Set<MetadataGeneratorFactory> factories = new HashSet<>( 2 );
         factories.add( snapshot );
         factories.add( versions );
         return Collections.unmodifiableSet( factories );
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenSnapshotMetadata.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/MavenWorkspaceReader.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RelocatedArtifact.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/SnapshotMetadataGeneratorFactory.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadata.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGenerator.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
similarity index 100%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/VersionsMetadataGeneratorFactory.java
diff --git a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
similarity index 86%
rename from maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
rename to maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
index 5582cf7..7309c2b 100644
--- a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/package-info.java
@@ -1,7 +1,7 @@
 // CHECKSTYLE_OFF: RegexpHeader
 /**
- * <a href="http://www.eclipse.org/aether/">Aether</a> extensions for utilizing the Maven POM and Maven repository
- * metadata.
+ * <a href="https://maven.apache.org/resolver/">Maven Resolver</a> extensions for utilizing the Maven POM and Maven
+ * repository metadata.
  */
 package org.apache.maven.repository.internal;
 
@@ -22,4 +22,4 @@ package org.apache.maven.repository.internal;
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- */
\ No newline at end of file
+ */
diff --git a/maven-aether-provider/src/site/apt/index.apt b/maven-resolver-provider/src/site/apt/index.apt
similarity index 89%
rename from maven-aether-provider/src/site/apt/index.apt
rename to maven-resolver-provider/src/site/apt/index.apt
index 600ec41..b50ea1d 100644
--- a/maven-aether-provider/src/site/apt/index.apt
+++ b/maven-resolver-provider/src/site/apt/index.apt
@@ -23,9 +23,9 @@
  2012-09-29
  -----
 
-Maven Aether Provider
+Maven Artifact Resolver Provider
 
- Maven Aether Provider is an {{{http://www.eclipse.org/aether/}Aether}} extension to support
+ Maven Artifact Resolver Provider is a {{{/resolver/}Maven Artifact Resolver}} extension to support
  Maven POMs and local+remote repositories.
 
  Main component is <<<MavenRepositorySystemUtils>>>
diff --git a/maven-aether-provider/src/site/site.xml b/maven-resolver-provider/src/site/site.xml
similarity index 100%
copy from maven-aether-provider/src/site/site.xml
copy to maven-resolver-provider/src/site/site.xml
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/AbstractRepositoryTestCase.java
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultArtifactDescriptorReaderTest.java
diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java
new file mode 100644
index 0000000..e895bbb
--- /dev/null
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultModelResolverTest.java
@@ -0,0 +1,222 @@
+package org.apache.maven.repository.internal;
+
+/*
+ * 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.net.MalformedURLException;
+import java.util.Arrays;
+
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.resolution.ModelResolver;
+import org.apache.maven.model.resolution.UnresolvableModelException;
+import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
+import org.eclipse.aether.impl.ArtifactResolver;
+import org.eclipse.aether.impl.RemoteRepositoryManager;
+import org.eclipse.aether.impl.VersionRangeResolver;
+
+/**
+ * Test cases for the default {@code ModelResolver} implementation.
+ *
+ * @author Christian Schulte
+ * @since 3.5.0
+ */
+public final class DefaultModelResolverTest extends AbstractRepositoryTestCase
+{
+
+    /**
+     * Creates a new {@code DefaultModelResolverTest} instance.
+     */
+    public DefaultModelResolverTest()
+    {
+        super();
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenNotFound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "ut.simple" );
+        parent.setArtifactId( "artifact" );
+        parent.setVersion( "0" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().startsWith( "Could not find artifact ut.simple:artifact:pom:0 in repo" ) );
+        }
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenNoMatchingVersionFound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "ut.simple" );
+        parent.setArtifactId( "artifact" );
+        parent.setVersion( "[2.0,2.1)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "No versions matched the requested parent version range '[2.0,2.1)'",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveParentThrowsUnresolvableModelExceptionWhenUsingRangesWithoutUpperBound() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "ut.simple" );
+        parent.setArtifactId( "artifact" );
+        parent.setVersion( "[1.0,)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( parent );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "The requested parent version range '[1.0,)' does not specify an upper bound",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveParentSuccessfullyResolvesExistingParentWithoutRange() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "ut.simple" );
+        parent.setArtifactId( "artifact" );
+        parent.setVersion( "1.0" );
+
+        assertNotNull( this.newModelResolver().resolveModel( parent ) );
+        assertEquals( "1.0", parent.getVersion() );
+    }
+
+    public void testResolveParentSuccessfullyResolvesExistingParentUsingHighestVersion() throws Exception
+    {
+        final Parent parent = new Parent();
+        parent.setGroupId( "ut.simple" );
+        parent.setArtifactId( "artifact" );
+        parent.setVersion( "(,2.0)" );
+
+        assertNotNull( this.newModelResolver().resolveModel( parent ) );
+        assertEquals( "1.0", parent.getVersion() );
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenNotFound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "ut.simple" );
+        dependency.setArtifactId( "artifact" );
+        dependency.setVersion( "0" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertNotNull( e.getMessage() );
+            assertTrue( e.getMessage().startsWith( "Could not find artifact ut.simple:artifact:pom:0 in repo" ) );
+        }
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenNoMatchingVersionFound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "ut.simple" );
+        dependency.setArtifactId( "artifact" );
+        dependency.setVersion( "[2.0,2.1)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "No versions matched the requested dependency version range '[2.0,2.1)'",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveDependencyThrowsUnresolvableModelExceptionWhenUsingRangesWithoutUpperBound() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "ut.simple" );
+        dependency.setArtifactId( "artifact" );
+        dependency.setVersion( "[1.0,)" );
+
+        try
+        {
+            this.newModelResolver().resolveModel( dependency );
+            fail( "Expected 'UnresolvableModelException' not thrown." );
+        }
+        catch ( final UnresolvableModelException e )
+        {
+            assertEquals( "The requested dependency version range '[1.0,)' does not specify an upper bound",
+                          e.getMessage() );
+
+        }
+    }
+
+    public void testResolveDependencySuccessfullyResolvesExistingDependencyWithoutRange() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "ut.simple" );
+        dependency.setArtifactId( "artifact" );
+        dependency.setVersion( "1.0" );
+
+        assertNotNull( this.newModelResolver().resolveModel( dependency ) );
+        assertEquals( "1.0", dependency.getVersion() );
+    }
+
+    public void testResolveDependencySuccessfullyResolvesExistingDependencyUsingHighestVersion() throws Exception
+    {
+        final Dependency dependency = new Dependency();
+        dependency.setGroupId( "ut.simple" );
+        dependency.setArtifactId( "artifact" );
+        dependency.setVersion( "(,2.0)" );
+
+        assertNotNull( this.newModelResolver().resolveModel( dependency ) );
+        assertEquals( "1.0", dependency.getVersion() );
+    }
+
+    private ModelResolver newModelResolver() throws ComponentLookupException, MalformedURLException
+    {
+        return new DefaultModelResolver( this.session, null, this.getClass().getName(),
+                                         lookup( ArtifactResolver.class ), lookup( VersionRangeResolver.class ),
+                                         lookup( RemoteRepositoryManager.class ),
+                                         Arrays.asList( newTestRepository() ) );
+
+    }
+
+}
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/DefaultVersionResolverTest.java
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/MavenRepositorySystemUtilsTest.java
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
similarity index 99%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
index db77a44..7943dc8 100644
--- a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RepositorySystemTest.java
@@ -195,7 +195,7 @@ public class RepositorySystemTest
     {
         //InstallResult install( RepositorySystemSession session, InstallRequest request )
         //                throws InstallationException;
-        // release, snapshot unique ou non unique, attachement
+        // release, snapshot unique ou non unique, attachment
     }
 
     public void testDeploy()
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleRepositoryListener.java
diff --git a/maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java
similarity index 100%
rename from maven-aether-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java
rename to maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/util/ConsoleTransferListener.java
diff --git a/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml b/maven-resolver-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml
rename to maven-resolver-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5324/07.20.3-SNAPSHOT/maven-metadata.xml
diff --git a/maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml b/maven-resolver-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml
rename to maven-resolver-provider/src/test/resources/repo/org/apache/maven/its/dep-mng5459/0.4.0-SNAPSHOT/maven-metadata.xml
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip b/maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0-classifier.zip
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom b/maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.pom
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip b/maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/1.0/artifact-1.0.zip
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml b/maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/artifact/maven-metadata.xml
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom b/maven-resolver-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/dependency/1.0/dependency-1.0.pom
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml b/maven-resolver-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/dependency/maven-metadata.xml
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom b/maven-resolver-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/parent/1.0/parent-1.0.pom
diff --git a/maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml b/maven-resolver-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml
similarity index 100%
rename from maven-aether-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml
rename to maven-resolver-provider/src/test/resources/repo/ut/simple/parent/maven-metadata.xml
diff --git a/maven-settings-builder/pom.xml b/maven-settings-builder/pom.xml
index 21ef456..dcc9116 100644
--- a/maven-settings-builder/pom.xml
+++ b/maven-settings-builder/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-settings-builder</artifactId>
diff --git a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java
index 5a4824e..4bb691b 100644
--- a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java
+++ b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsBuildingRequest.java
@@ -116,10 +116,9 @@ public class DefaultSettingsBuildingRequest
         if ( systemProperties != null )
         {
             this.systemProperties = new Properties();
-            // MNG-5670 guard against ConcurrentModificationException
-            for ( String key : System.getProperties().stringPropertyNames() )
-            {
-                this.systemProperties.put( key, System.getProperty( key ) );
+            synchronized ( systemProperties )
+            { // avoid concurrentmodification if someone else sets/removes an unrelated system property
+                this.systemProperties.putAll( systemProperties );
             }
         }
         else
diff --git a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java
index b261fa1..a8eb909 100644
--- a/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java
+++ b/maven-settings-builder/src/main/java/org/apache/maven/settings/building/DefaultSettingsProblem.java
@@ -156,7 +156,7 @@ public class DefaultSettingsProblem
     {
         StringBuilder buffer = new StringBuilder( 128 );
 
-        buffer.append( "[" ).append( getSeverity() ).append( "] " );
+        buffer.append( '[' ).append( getSeverity() ).append( "] " );
         buffer.append( getMessage() );
         buffer.append( " @ " ).append( getLocation() );
 
diff --git a/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java b/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java
index 9beee97..897f742 100644
--- a/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java
+++ b/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsReader.java
@@ -29,7 +29,6 @@ import org.apache.commons.lang3.Validate;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -60,19 +59,14 @@ public class DefaultSettingsReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final Reader in = input )
         {
-            SettingsXpp3Reader r = new SettingsXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new SettingsXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     @Override
@@ -81,19 +75,14 @@ public class DefaultSettingsReader
     {
         Validate.notNull( input, "input cannot be null" );
 
-        try
+        try ( final InputStream in = input )
         {
-            SettingsXpp3Reader r = new SettingsXpp3Reader();
-            return r.read( input, isStrict( options ) );
+            return new SettingsXpp3Reader().read( in, isStrict( options ) );
         }
         catch ( XmlPullParserException e )
         {
             throw new SettingsParseException( e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e );
         }
-        finally
-        {
-            IOUtil.close( input );
-        }
     }
 
     private boolean isStrict( Map<String, ?> options )
diff --git a/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java b/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java
index 877fbde..19d8b9b 100644
--- a/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java
+++ b/maven-settings-builder/src/main/java/org/apache/maven/settings/io/DefaultSettingsWriter.java
@@ -30,7 +30,6 @@ import org.apache.commons.lang3.Validate;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Writer;
 import org.codehaus.plexus.component.annotations.Component;
-import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.WriterFactory;
 
 /**
@@ -62,14 +61,9 @@ public class DefaultSettingsWriter
         Validate.notNull( output, "output cannot be null" );
         Validate.notNull( settings, "settings cannot be null" );
 
-        try
+        try ( final Writer out = output )
         {
-            SettingsXpp3Writer w = new SettingsXpp3Writer();
-            w.write( output, settings );
-        }
-        finally
-        {
-            IOUtil.close( output );
+            new SettingsXpp3Writer().write( out, settings );
         }
     }
 
@@ -80,19 +74,16 @@ public class DefaultSettingsWriter
         Validate.notNull( output, "output cannot be null" );
         Validate.notNull( settings, "settings cannot be null" );
 
-        try
+        String encoding = settings.getModelEncoding();
+        // TODO Use StringUtils here
+        if ( encoding == null || encoding.length() <= 0 )
         {
-            String encoding = settings.getModelEncoding();
-            // TODO Use StringUtils here
-            if ( encoding == null || encoding.length() <= 0 )
-            {
-                encoding = "UTF-8";
-            }
-            write( new OutputStreamWriter( output, encoding ), options, settings );
+            encoding = "UTF-8";
         }
-        finally
+
+        try ( final Writer out = new OutputStreamWriter( output, encoding ) )
         {
-            IOUtil.close( output );
+            write( out, options, settings );
         }
     }
 
diff --git a/maven-settings/pom.xml b/maven-settings/pom.xml
index 28ceb51..bc22578 100644
--- a/maven-settings/pom.xml
+++ b/maven-settings/pom.xml
@@ -25,7 +25,7 @@ under the License.
   <parent>
     <groupId>org.apache.maven</groupId>
     <artifactId>maven</artifactId>
-    <version>3.3.9</version>
+    <version>3.5.0</version>
   </parent>
 
   <artifactId>maven-settings</artifactId>
diff --git a/maven-settings/src/main/mdo/settings.mdo b/maven-settings/src/main/mdo/settings.mdo
index 6d560cc..813ebc4 100644
--- a/maven-settings/src/main/mdo/settings.mdo
+++ b/maven-settings/src/main/mdo/settings.mdo
@@ -33,7 +33,7 @@
     <p>The default location for the settings file is <i>~/.m2/settings.xml</i></p>
     <p>An XSD is available at:</p>
     <ul>
-      <li><a href="http://maven.apache.org/xsd/settings-1.0.0.xsd">http://maven.apache.org/xsd/settings-1.0.0.xsd</a>.</li>
+      <li><a href="https://maven.apache.org/xsd/settings-1.0.0.xsd">https://maven.apache.org/xsd/settings-1.0.0.xsd</a>.</li>
     </ul>
     ]]>
   </description>
@@ -120,7 +120,7 @@
           <required>true</required>
           <description>
             <![CDATA[
-            The local repository.<br /><b>Default value is:</b> <tt>${user.home}/.m2/repository</tt>
+            The local repository.<br><b>Default value is:</b> <tt>${user.home}/.m2/repository</tt>
             ]]>
           </description>
           <type>String</type>
@@ -600,7 +600,7 @@
           <version>1.0.0+</version>
           <type>String</type>
           <description>
-            The server ID of the repository being mirrored, eg
+            The server ID of the repository being mirrored, e.g.,
             "central". This MUST NOT match the mirror id.
           </description>
         </field>
@@ -809,7 +809,7 @@
       <description>
         <![CDATA[
         Repository contains the information needed
-        for establishing connections with remote repoistory
+        for establishing connections with remote repository
         ]]>
       </description>
       <fields>
diff --git a/maven-settings/src/site/apt/index.apt b/maven-settings/src/site/apt/index.apt
index 6e404e8..17eaf8c 100644
--- a/maven-settings/src/site/apt/index.apt
+++ b/maven-settings/src/site/apt/index.apt
@@ -33,4 +33,4 @@ Maven Settings Model
 
    * A {{{./settings.html}Descriptor Reference}}
 
-   * An {{{http://maven.apache.org/xsd/settings-1.0.0.xsd}XSD}}
+   * An {{{https://maven.apache.org/xsd/settings-1.0.0.xsd}XSD}}
diff --git a/maven-slf4j-provider/pom.xml b/maven-slf4j-provider/pom.xml
new file mode 100644
index 0000000..363e00d
--- /dev/null
+++ b/maven-slf4j-provider/pom.xml
@@ -0,0 +1,116 @@
+<?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 http://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.5.0</version>
+  </parent>
+
+  <artifactId>maven-slf4j-provider</artifactId>
+
+  <name>Maven SLF4J Simple Provider</name>
+  <description>
+    Maven SLF4J provider based on SLF4J's simple provider, monkey-patched to support Maven styled colors
+    for levels and stacktraces rendering.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.shared</groupId>
+      <artifactId>maven-shared-utils</artifactId>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <artifactItems>
+            <artifactItem>
+              <groupId>org.slf4j</groupId>
+              <artifactId>slf4j-simple</artifactId>
+              <version>${slf4jVersion}</version>
+              <type>jar</type>
+              <classifier>sources</classifier>
+              <overWrite>false</overWrite>
+              <outputDirectory>${project.build.directory}/generated-sources/slf4j-simple</outputDirectory>
+              <includes>org/slf4j/impl/*.java</includes>
+            </artifactItem>
+          </artifactItems>
+        </configuration>
+        <executions>
+          <execution>
+            <id>unzip-slf4j-simple</id>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.12</version>
+        <executions>
+          <execution>
+            <id>add-slf4j-simple</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources/slf4j-simple</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>groovy-maven-plugin</artifactId>
+        <version>2.0</version>
+        <executions>
+          <execution>
+            <id>patch-slf4j-simple</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>execute</goal>
+            </goals>
+            <configuration>
+              <source>${project.basedir}/src/main/script/patch-slf4j-simple.groovy</source>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java
new file mode 100644
index 0000000..17f1f48
--- /dev/null
+++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLogger.java
@@ -0,0 +1,115 @@
+package org.slf4j.impl;
+
+/*
+ * 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 static org.apache.maven.shared.utils.logging.MessageUtils.buffer;
+
+import java.io.PrintStream;
+
+/**
+ * Logger for Maven, that support colorization of levels and stacktraces.
+ * This class implements 2 methods introduced in slf4j-simple provider local copy.
+ * @since 3.5.0
+ */
+public class MavenSimpleLogger
+    extends SimpleLogger
+{
+    MavenSimpleLogger( String name )
+    {
+        super( name );
+    }
+
+    @Override
+    protected String renderLevel( int level )
+    {
+        switch ( level )
+        {
+            case LOG_LEVEL_TRACE:
+                return buffer().debug( "TRACE" ).toString();
+            case LOG_LEVEL_DEBUG:
+                return buffer().debug( "DEBUG" ).toString();
+            case LOG_LEVEL_INFO:
+                return buffer().info( "INFO" ).toString();
+            case LOG_LEVEL_WARN:
+                return buffer().warning( "WARNING" ).toString();
+            case LOG_LEVEL_ERROR:
+            default:
+                return buffer().error( "ERROR" ).toString();
+        }
+    }
+
+    @Override
+    protected void renderThrowable( Throwable t, PrintStream stream )
+    {
+        stream.print( buffer().failure( t.getClass().getName() ) );
+        if ( t.getMessage() != null )
+        {
+            stream.print( ": " );
+            stream.print( buffer().failure( t.getMessage() ) );
+        }
+        stream.println();
+
+        while ( t != null )
+        {
+            for ( StackTraceElement e : t.getStackTrace() )
+            {
+                stream.print( "    " );
+                stream.print( buffer().strong( "at" ) );
+                stream.print( " " + e.getClassName() + "." + e.getMethodName() );
+                stream.print( buffer().a( " (" ).strong( getLocation( e ) ).a( ")" ) );
+                stream.println();
+            }
+
+            t = t.getCause();
+            if ( t != null )
+            {
+                stream.print( buffer().strong( "Caused by" ).a( ": " ).a( t.getClass().getName() ) );
+                if ( t.getMessage() != null )
+                {
+                    stream.print( ": " );
+                    stream.print( buffer().failure( t.getMessage() ) );
+                }
+                stream.println();
+            }
+        }
+    }
+
+    protected String getLocation( final StackTraceElement e )
+    {
+        assert e != null;
+
+        if ( e.isNativeMethod() )
+        {
+            return "Native Method";
+        }
+        else if ( e.getFileName() == null )
+        {
+            return "Unknown Source";
+        }
+        else if ( e.getLineNumber() >= 0 )
+        {
+            return String.format( "%s:%s", e.getFileName(), e.getLineNumber() );
+        }
+        else
+        {
+            return e.getFileName();
+        }
+    }
+}
diff --git a/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
similarity index 56%
copy from maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
copy to maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
index 679ee00..d56e346 100644
--- a/maven-core/src/main/java/org/apache/maven/project/RepositorySessionDecorator.java
+++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
@@ -1,4 +1,4 @@
-package org.apache.maven.project;
+package org.slf4j.impl;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,18 +19,26 @@ package org.apache.maven.project;
  * under the License.
  */
 
-import org.eclipse.aether.RepositorySystemSession;
+import org.slf4j.Logger;
 
-/**
- * Component interface that allows per-project customization of Aether repository system sessions.
- * 
- * @since 3.2.4
- * @provisional This interface is part of work in progress and can be changed or removed without notice.
- */
-public interface RepositorySessionDecorator
+public class MavenSimpleLoggerFactory
+    extends SimpleLoggerFactory
 {
     /**
-     * Returns possibly {@code null} Aether repository system session to be used to resolve project dependencies.
+     * Return an appropriate {@link MavenSimpleLogger} instance by name.
      */
-    RepositorySystemSession decorate( MavenProject project, RepositorySystemSession session );
+    public Logger getLogger( String name )
+    {
+        Logger simpleLogger = loggerMap.get( name );
+        if ( simpleLogger != null )
+        {
+            return simpleLogger;
+        }
+        else
+        {
+            Logger newInstance = new MavenSimpleLogger( name );
+            Logger oldInstance = loggerMap.putIfAbsent( name, newInstance );
+            return oldInstance == null ? newInstance : oldInstance;
+        }
+    }
 }
diff --git a/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
new file mode 100644
index 0000000..bba8646
--- /dev/null
+++ b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
@@ -0,0 +1,53 @@
+
+/*
+ * 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.
+ */
+
+dir = new File( basedir, 'target/generated-sources/slf4j-simple/org/slf4j/impl' );
+
+file = new File( dir, 'StaticLoggerBinder.java' );
+content = file.text;
+
+// check if already patched
+if ( content.contains( 'MavenSimpleLoggerFactory' ) )
+{
+  println '    slf4j-simple already patched';
+  return;
+}
+
+
+println '    patching StaticLoggerBinder.java';
+content = content.replaceAll( 'SimpleLoggerFactory', 'MavenSimpleLoggerFactory' );
+file.write( content );
+
+
+println '    patching SimpleLogger.java';
+file = new File( dir, 'SimpleLogger.java' );
+content = file.text;
+content = content.replaceAll( 'private static final int LOG_LEVEL_', 'protected static final int LOG_LEVEL_' );
+content = content.replaceAll( 't.printStackTrace(TARGET_STREAM)', 'renderThrowable(t, TARGET_STREAM);' );
+
+index = content.indexOf( 'switch (level) {' );
+end = content.indexOf( '}', index ) + 1;
+content = content.substring( 0, index ) + 'buf.append(renderLevel(level));' + content.substring( end );
+
+content = content.substring( 0, content.lastIndexOf( '}' ) );
+content += '  protected void renderThrowable(Throwable t, PrintStream stream) {}\n';
+content += '  protected String renderLevel(int level) { return ""; }\n}\n';
+
+file.write( content );
diff --git a/maven-aether-provider/src/site/site.xml b/maven-slf4j-provider/src/site/site.xml
similarity index 100%
rename from maven-aether-provider/src/site/site.xml
rename to maven-slf4j-provider/src/site/site.xml
diff --git a/pom.xml b/pom.xml
index 7d44da6..1eb0740 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,18 +1,22 @@
 <?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.
+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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -26,7 +30,7 @@
   </parent>
 
   <artifactId>maven</artifactId>
-  <version>3.3.9</version>
+  <version>3.5.0</version>
   <packaging>pom</packaging>
 
   <name>Apache Maven</name>
@@ -38,7 +42,7 @@
     number of other development tools for reporting or the build
     process.
   </description>
-  <url>http://maven.apache.org/ref/${project.version}/</url>
+  <url>https://maven.apache.org/ref/${project.version}/</url>
   <inceptionYear>2001</inceptionYear>
 
   <properties>
@@ -46,23 +50,23 @@
     <maven.compiler.source>1.7</maven.compiler.source>
     <maven.compiler.target>1.7</maven.compiler.target>
     <classWorldsVersion>2.5.2</classWorldsVersion>
-    <commonsCliVersion>1.2</commonsCliVersion>
-    <commonsLangVersion>3.4</commonsLangVersion>
-    <junitVersion>4.11</junitVersion>
-    <plexusVersion>1.6</plexusVersion>
-    <plexusInterpolationVersion>1.21</plexusInterpolationVersion>
-    <plexusUtilsVersion>3.0.22</plexusUtilsVersion>
-    <!-- Latest version of Guava that works with Sisu -->
-    <guavaVersion>18.0</guavaVersion>
+    <commonsCliVersion>1.4</commonsCliVersion>
+    <commonsLangVersion>3.5</commonsLangVersion>
+    <junitVersion>4.12</junitVersion>
+    <mockitoVersion>1.10.19</mockitoVersion>
+    <plexusVersion>1.7.1</plexusVersion>
+    <plexusInterpolationVersion>1.24</plexusInterpolationVersion>
+    <plexusUtilsVersion>3.0.24</plexusUtilsVersion>
+    <guavaVersion>20.0</guavaVersion>
     <guiceVersion>4.0</guiceVersion>
-    <sisuInjectVersion>0.3.2</sisuInjectVersion>
-    <wagonVersion>2.10</wagonVersion>
-    <securityDispatcherVersion>1.3</securityDispatcherVersion>
+    <sisuInjectVersion>0.3.3</sisuInjectVersion>
+    <wagonVersion>2.12</wagonVersion>
+    <securityDispatcherVersion>1.4</securityDispatcherVersion>
     <cipherVersion>1.7</cipherVersion>
-    <modelloVersion>1.8.3</modelloVersion>
+    <modelloVersion>1.9.1</modelloVersion>
     <jxpathVersion>1.3</jxpathVersion>
-    <aetherVersion>1.0.2.v20150114</aetherVersion>
-    <slf4jVersion>1.7.5</slf4jVersion>
+    <resolverVersion>1.0.3</resolverVersion>
+    <slf4jVersion>1.7.22</slf4jVersion>
     <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
     <!-- Control the name of the distribution and information output by mvn -->
     <distributionId>apache-maven</distributionId>
@@ -82,8 +86,9 @@
     <module>maven-settings</module>
     <module>maven-settings-builder</module>
     <module>maven-artifact</module>
-    <module>maven-aether-provider</module>
+    <module>maven-resolver-provider</module>
     <module>maven-repository-metadata</module>
+    <module>maven-slf4j-provider</module>
     <module>maven-embedder</module>
     <module>maven-compat</module>
     <module>apache-maven</module>
@@ -93,7 +98,7 @@
     <connection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</connection>
     <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/maven.git</developerConnection>
     <url>https://github.com/apache/maven/tree/${project.scm.tag}</url>
-    <tag>maven-3.3.9</tag>
+    <tag>maven-3.5.0</tag>
   </scm>
   <issueManagement>
     <system>jira</system>
@@ -104,7 +109,7 @@
     <url>https://builds.apache.org/job/maven-3.x/</url>
   </ciManagement>
   <distributionManagement>
-    <downloadUrl>http://maven.apache.org/download.html</downloadUrl>
+    <downloadUrl>https://maven.apache.org/download.html</downloadUrl>
     <site>
       <id>apache.website</id>
       <url>scm:svn:https://svn.apache.org/repos/infra/websites/production/maven/components/${maven.site.path}</url>
@@ -144,13 +149,6 @@
     </contributor>
   </contributors>
 
-  <!-- This marked as deprecated for Maven 3.X. This is checked by maven-enforcer-plugin -->
-  <!--  http://jira.codehaus.org/browse/MNG-4840 -->
-  <!--  http://jira.codehaus.org/browse/MNG-5297 -->
-  <prerequisites>
-    <maven>${maven.version}</maven>
-  </prerequisites>
-
   <!--bootstrap-start-comment-->
   <dependencyManagement>
     <!--bootstrap-end-comment-->
@@ -204,7 +202,7 @@
       </dependency>
       <dependency>
         <groupId>org.apache.maven</groupId>
-        <artifactId>maven-aether-provider</artifactId>
+        <artifactId>maven-resolver-provider</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
@@ -217,6 +215,11 @@
         <artifactId>maven-builder-support</artifactId>
         <version>${project.version}</version>
       </dependency>
+      <dependency>
+        <groupId>org.apache.maven</groupId>
+        <artifactId>maven-slf4j-provider</artifactId>
+        <version>${project.version}</version>
+      </dependency>
       <!--bootstrap-end-comment-->
       <!--  Plexus -->
       <dependency>
@@ -267,6 +270,16 @@
         <version>${plexusInterpolationVersion}</version>
       </dependency>
       <dependency>
+        <groupId>org.apache.maven.shared</groupId>
+        <artifactId>maven-shared-utils</artifactId>
+        <version>3.1.0</version>
+      </dependency>
+      <dependency>
+        <groupId>org.fusesource.jansi</groupId>
+        <artifactId>jansi</artifactId>
+        <version>1.13</version>
+      </dependency>
+      <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-api</artifactId>
         <version>${slf4jVersion}</version>
@@ -280,7 +293,7 @@
       <dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-classic</artifactId>
-        <version>1.0.7</version>
+        <version>1.2.1</version>
         <optional>true</optional>
       </dependency>
       <!--  Wagon -->
@@ -308,34 +321,34 @@
       </dependency>
       <!--  Repository -->
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-api</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-api</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-spi</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-spi</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-impl</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-impl</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-util</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-util</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-connector-basic</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-connector-basic</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <dependency>
-        <groupId>org.eclipse.aether</groupId>
-        <artifactId>aether-transport-wagon</artifactId>
-        <version>${aetherVersion}</version>
+        <groupId>org.apache.maven.resolver</groupId>
+        <artifactId>maven-resolver-transport-wagon</artifactId>
+        <version>${resolverVersion}</version>
       </dependency>
       <!--  Commons -->
       <dependency>
@@ -373,6 +386,11 @@
         <artifactId>plexus-cipher</artifactId>
         <version>${cipherVersion}</version>
       </dependency>
+      <dependency>
+        <groupId>org.mockito</groupId>
+        <artifactId>mockito-core</artifactId>
+        <version>${mockitoVersion}</version>
+      </dependency>
     </dependencies>
     <!--bootstrap-start-comment-->
   </dependencyManagement>
@@ -462,7 +480,7 @@
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>buildnumber-maven-plugin</artifactId>
-          <version>1.2</version>
+          <version>1.4</version>
         </plugin>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
@@ -513,13 +531,23 @@
             </lifecycleMappingMetadata>
           </configuration>
         </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>findbugs-maven-plugin</artifactId>
+          <version>3.0.4</version>
+        </plugin>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>3.0.0</version>
+        </plugin>
       </plugins>
     </pluginManagement>
     <plugins>
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <version>1.14</version>
+        <version>1.15</version>
         <configuration>
           <signature>
             <groupId>org.codehaus.mojo.signature</groupId>
@@ -540,7 +568,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-doap-plugin</artifactId>
-        <version>1.1</version>
+        <version>1.2</version>
         <configuration>
           <asfExtOptions>
             <charter>The mission of the Apache Maven project is to create and maintain software
@@ -561,6 +589,7 @@
             <exclude>.repository/**</exclude> <!-- jenkins with local maven repository -->
             <exclude>.maven/spy.log</exclude> <!-- hudson maven3 integration log -->
             <exclude>.java-version</exclude>
+            <exclude>README.md</exclude>
           </excludes>
         </configuration>
       </plugin>
@@ -614,13 +643,15 @@
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>
             <configuration>
-              <linksource>true</linksource>
-              <notimestamp>true</notimestamp>
-              <quiet>true</quiet>
-              <links combine.children="append">
-                <link>http://download.eclipse.org/aether/aether-core/${aetherVersion}/apidocs/</link>
-                <link>http://plexus.codehaus.org/plexus-containers/plexus-container-default/apidocs/</link>
-              </links>
+              <!-- TODO Remove when we upgrade to maven-parent 31 -->
+              <locale>en</locale>
+              <tags>
+                <tag>
+                  <name>provisional</name>
+                  <placement>tf</placement>
+                  <head>Provisional:</head>
+                </tag>
+              </tags>
             </configuration>
             <reportSets>
               <reportSet>
diff --git a/src/site/resources/images/maven-deps.png b/src/site/resources/images/maven-deps.png
index d23033f..6eae811 100644
Binary files a/src/site/resources/images/maven-deps.png and b/src/site/resources/images/maven-deps.png differ
diff --git a/src/site/site.xml b/src/site/site.xml
index bcc6103..6dd30a6 100644
--- a/src/site/site.xml
+++ b/src/site/site.xml
@@ -25,11 +25,11 @@ under the License.
 
   <bannerLeft>
     <name>${project.name}</name>
-    <src>http://maven.apache.org/images/apache-maven-project.png</src>
-    <href>http://maven.apache.org/</href>
+    <src>https://maven.apache.org/images/apache-maven-project.png</src>
+    <href>https://maven.apache.org/</href>
   </bannerLeft>
   <bannerRight>
-    <src>http://maven.apache.org/images/maventxt_logo_200.gif</src>
+    <src>https://maven.apache.org/images/maventxt_logo_200.gif</src>
   </bannerRight>
 
   <skin>
@@ -49,6 +49,8 @@ under the License.
       <item name="JavaDocs" href="apidocs/index.html"/>
       <item name="Source Xref" href="xref/index.html"/>
       <!--item name="FAQ" href="faq.html"/-->
+      <item name="License" href="http://www.apache.org/licenses/"/>
+      <item name="Download" href="/download.html"/>
     </menu>
 
     <menu name="Descriptors Reference">
diff --git a/src/site/xdoc/index.xml b/src/site/xdoc/index.xml
index b98b4ee..78c47fb 100644
--- a/src/site/xdoc/index.xml
+++ b/src/site/xdoc/index.xml
@@ -1,22 +1,22 @@
 <?xml version="1.0"?>
 
 <!--
-/*
- * 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.
- */
+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.
 -->
 
 <document>
@@ -35,38 +35,44 @@
     builds, dependency management, documentation creation, site
     publication, and distribution publication are all controlled from
     <a href="./maven-model/maven.html">the <code>pom.xml</code> declarative file</a>. Maven can be extended by
-    <a href="http://maven.apache.org/plugins/">plugins</a> to utilise a
+    <a href="https://maven.apache.org/plugins/">plugins</a> to utilise a
     number of other development tools for reporting or the build
     process.</p>
 
       <p>
-        <img src="images/maven-deps.png" width="784" height="595" border="0" usemap="#Maven_dependencies" />
+        <img src="images/maven-deps.png" width="784" height="578" border="0" usemap="#Maven_dependencies" />
         <map name="Maven_dependencies">
           <area shape="rect" coords="228,1,361,36"    alt="apache-maven"  href="apache-maven/" />
           <area shape="rect" coords="228,58,361,95"   alt="maven-embedder" href="maven-embedder/" />
           <area shape="rect" coords="228,116,361,152" alt="maven-compat" href="maven-compat/" />
           <area shape="rect" coords="228,175,361,211" alt="maven-core" href="maven-core/" />
-          <area shape="rect" coords="118,233,275,269" alt="maven-aether-provider" href="maven-aether-provider/" />
+          <area shape="rect" coords="118,233,275,269" alt="maven-resolver-provider" href="maven-resolver-provider/" />
           <area shape="rect" coords="0,287,192,323"   alt="maven-repository-metadata" href="maven-repository-metadata/" />
           <area shape="rect" coords="245,342,343,378" alt="maven-plugin-api" href="maven-plugin-api/" />
           <area shape="rect" coords="253,401,336,436" alt="maven-artifact" href="maven-artifact/" />
-          <area shape="rect" coords="296,234,442,270" alt="maven-builder-support" href="maven-builder-support/" />
+          <area shape="rect" coords="299,230,446,265" alt="maven-builder-support" href="maven-builder-support/" />
           <area shape="rect" coords="382,176,528,211" alt="maven-settings-builder" href="maven-settings-builder/" />
-          <area shape="rect" coords="446,234,537,269" alt="maven-settings" href="maven-settings/" />
+          <area shape="rect" coords="449,229,532,266" alt="maven-settings" href="maven-settings/" />
           <area shape="rect" coords="388,284,521,319" alt="maven-model-builder" href="maven-model-builder/" />
           <area shape="rect" coords="409,342,500,378" alt="maven-model" href="maven-model/" />
+          <area shape="rect" coords="42,0,198,35"     alt="maven-slf4j-provider" href="maven-slf4j-provider/" />
+          <area shape="rect" coords="68,338,240,482"  alt="maven-resolver" href="https://maven.apache.org/resolver/" />
+          <area shape="rect" coords="70,57,171,93"    alt="slf4j-api" href="http://www.slf4j.org/manual.html" />
           <area shape="rect" coords="551,58,707,94"   alt="commons-cli" href="http://commons.apache.org/cli/" />
-          <area shape="rect" coords="551,116,739,152" alt="wagon-provider-api" href="http://maven.apache.org/wagon/wagon-provider-api/" />
+          <area shape="rect" coords="88,175,205,211"  alt="maven-shared-utils" href="https://maven.apache.org/shared/maven-shared-utils/" />
+          <area shape="rect" coords="0,176,70,211"    alt="jansi" href="http://fusesource.github.io/jansi/" />
+          <area shape="rect" coords="0,229,71,266"    alt="jansi-native" href="https://github.com/fusesource/jansi-native" />
+          <area shape="rect" coords="551,116,739,152" alt="wagon-provider-api" href="https://maven.apache.org/wagon/wagon-provider-api/" />
           <area shape="rect" coords="550,175,690,211" alt="plexus-sec-dispatcher" href="https://github.com/codehaus-plexus/plexus-sec-dispatcher" />
-          <area shape="rect" coords="581,230,660,265" alt="plexus-cipher" href="hhttps://github.com/codehaus-plexus/plexus-cipher" />
-          <area shape="rect" coords="551,284,707,320" alt="plexus-interpolation" href="https://github.com/codehaus-plexus/plexus-interpolation" />
-          <area shape="rect" coords="551,359,776,395" alt="plexus-component-annotations" href="https://github.com/codehaus-plexus/plexus-containers" />
-          <area shape="rect" coords="550,401,682,437" alt="plexus-classworlds" href="https://github.com/codehaus-plexus/plexus-classworlds" />
-          <area shape="rect" coords="685,455,775,491" alt="plexus-utils" href="https://github.com/codehaus-plexus/plexus-utils" />
-          <area shape="rect" coords="542,167,783,502" alt="plexus" href="https://github.com/codehaus-plexus" />
-          <area shape="rect" coords="68,338,240,482"  alt="aether" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.aether" />
-          <area shape="rect" coords="388,393,520,594" alt="sisu" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.sisu" />
-          <area shape="rect" coords="519,518,621,554" alt="guice" href="http://code.google.com/p/google-guice/" />
+          <area shape="rect" coords="581,230,660,265" alt="plexus-cipher" href="https://github.com/codehaus-plexus/plexus-cipher" />
+          <area shape="rect" coords="551,284,707,320" alt="plexus-interpolation" href="https://codehaus-plexus.github.io/plexus-interpolation" />
+          <area shape="rect" coords="551,359,776,395" alt="plexus-component-annotations" href="https://codehaus-plexus.github.io/plexus-containers" />
+          <area shape="rect" coords="550,401,682,437" alt="plexus-classworlds" href="https://codehaus-plexus.github.io/plexus-classworlds" />
+          <area shape="rect" coords="685,455,775,491" alt="plexus-utils" href="https://codehaus-plexus.github.io/plexus-utils" />
+          <area shape="rect" coords="542,167,783,502" alt="plexus" href="https://codehaus-plexus.github.io/" />
+          <area shape="rect" coords="401,393,509,524" alt="sisu" href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.sisu" />
+          <area shape="rect" coords="416,543,493,577" alt="guice" href="http://code.google.com/p/google-guice/" />
+          <area shape="rect" coords="550,543,673,577" alt="javax.inject" href="http://docs.oracle.com/javaee/6/api/javax/inject/package-summary.html" />
         </map>
       </p>
     </section>
diff --git a/src/site/xdoc/maven-deps.odg b/src/site/xdoc/maven-deps.odg
new file mode 100644
index 0000000..d9b6cef
Binary files /dev/null and b/src/site/xdoc/maven-deps.odg differ

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/maven.git



More information about the pkg-java-commits mailing list