You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kh...@apache.org on 2022/01/14 18:27:49 UTC

[maven] branch MNG-7276 updated (9c1f3b2 -> 8015ca7)

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

khmarbaise pushed a change to branch MNG-7276
in repository https://gitbox.apache.org/repos/asf/maven.git.


 discard 9c1f3b2  [MNG-7276] - Refactoring - Umbrella
     add 16dd31a  [MNG-7339] Verify Maven can build itself
     add 33aedfc  [MNG-7156][MNG-7285] Add locking in MojoExecutor (#627)
     add e6287b4  Improve startup scripts
     add 6257b33  [MNG-7193] Introduce MAVEN_ARGS environment variable
     add f793d86  [MWRAPPER-14] remove Maven Wrapper from core
     add 3d4d6d8  fix wrong dependencies
     add 951b5ee  Fix SLF4J license link
     add 0a8bd72  [MNG-7370] Upgrade Maven Wagon to 3.5.1
     add d8445a5  Improve PR template
     add 2cb4fe9  [MNG-7377] Add .vscode/ to .gitignore
     add 46d57bd  [MNG-7374] Mutating RelocatedArtifact does not retain type
     add 706d931  [MNG-7369] Maven BOM doesn't need to package as a JAR
     add d6b9108  [MNG-6917] upgrade maven-wrapper-plugin to 3.1.0
     add 2670c00  [MNG-5561] Plugin relocation loses configuration
     add b477357  [MNG-6326] Make the build fail if core extensions can not be loaded (#648)
     add e5b0831  [MNG-7263] refactor lifecycle providers to ease documentation
     add 711d5fb  [MNG-7263] introduce AbstractLifecycleProvider
     add 94af1d9  [MNG-7263] improve AbstractLifecycleProvider
     add a7375a0  [MNG-7263] use constants instead of copy/paste
     add a53083d  [MNG-7264] refactor packaging bindings providers to ease maintenance
     add 7180d68  Proposal to change abstract provider
     add e617d51  [MNG-7264] packaging plugins bindings cannot be empty
     add 8bde888  [MNG-7267] update lifecycle documentation after switch from Plexus XML
     add f30a0ab  [MNG-7267] update artifact handlers documentation
     add c229278  rework javadoc
     add 4476026  [MNG-7217] Update Commons CLI to version 1.5.0
     add faf5d5d  [MNG-7347] SessionScoped beans should be singletons for a given session (#621)
     add 7a772fe  [MNG-7362] DefaultArtifactResolver has spurious "Failure detected" INFO log
     add 18725ec  [MNG-7380] Don't log non-threadsafe warning if only building a single module
     add c0a49c7  [MNG-7384] Upgrade Maven JAR Plugin to 3.2.2
     new 8015ca7  [MNG-7276] - Refactoring - Umbrella

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (9c1f3b2)
            \
             N -- N -- N   refs/heads/MNG-7276 (8015ca7)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .github/pull_request_template.md                   |  19 +-
 .github/workflows/maven.yml                        |  28 +--
 .github/workflows/maven_build_itself.yml           |  73 +++++++
 .gitignore                                         |   1 +
 Jenkinsfile                                        |  14 +-
 Jenkinsfile.its                                    |   4 +-
 apache-maven-wrapper/pom.xml                       | 128 ------------
 apache-maven-wrapper/src/assembly/bin.xml          |  85 --------
 apache-maven-wrapper/src/assembly/script.xml       |  77 -------
 apache-maven-wrapper/src/assembly/script/download  |  51 -----
 .../src/assembly/script/download.cmd               |  32 ---
 .../shared/mvn/wrapper/maven-wrapper.properties    |  17 --
 apache-maven-wrapper/src/assembly/shared/mvnwDebug |  35 ----
 .../src/assembly/shared/mvnwDebug.cmd              |  44 ----
 .../src/assembly/shared/mvnwlauncher               |   3 -
 .../src/assembly/shared/mvnwlauncher.cmd           |   3 -
 apache-maven-wrapper/src/assembly/source.xml       |  82 --------
 apache-maven-wrapper/src/assembly/source/download  |  34 ---
 .../src/assembly/source/download.cmd               |  21 --
 .../source/mvn/wrapper/MavenWrapperDownloader.java | 131 ------------
 apache-maven-wrapper/src/site/apt/index.apt.vm     |  58 ------
 apache-maven-wrapper/src/site/site.xml             |  31 ---
 apache-maven/pom.xml                               |   8 -
 apache-maven/src/assembly/component.xml            |   1 -
 apache-maven/src/assembly/shared/init.cmd          |   4 +-
 apache-maven/src/assembly/shared/run               |   4 +-
 apache-maven/src/assembly/shared/run.cmd           |   4 +-
 apache-maven/src/assembly/shared/validate          |   1 +
 apache-maven/src/assembly/shared/validate.cmd      |   1 +
 .../licenses/MIT-jsoup-1.12.1.txt                  |  23 --
 .../licenses/MIT-slf4j-api-1.7.32.txt              |   2 +-
 maven-bom/pom.xml                                  |   1 +
 .../artifact/resolver/DefaultArtifactResolver.java |   1 -
 .../providers/EarArtifactHandlerProvider.java      |   3 +
 .../providers/EjbArtifactHandlerProvider.java      |   3 +
 .../EjbClientArtifactHandlerProvider.java          |   3 +
 .../providers/JarArtifactHandlerProvider.java      |   3 +
 .../JavaSourceArtifactHandlerProvider.java         |   3 +
 .../providers/JavadocArtifactHandlerProvider.java  |   3 +
 .../MavenPluginArtifactHandlerProvider.java        |   3 +
 .../providers/PomArtifactHandlerProvider.java      |   3 +
 .../providers/RarArtifactHandlerProvider.java      |   3 +
 .../providers/TestJarArtifactHandlerProvider.java  |   3 +
 .../providers/WarArtifactHandlerProvider.java      |   3 +
 .../java/org/apache/maven/lifecycle/Lifecycle.java |   2 +-
 .../DefaultLifecycleExecutionPlanCalculator.java   |  16 +-
 .../internal/DefaultMojoExecutionConfigurator.java |   4 +-
 .../lifecycle/internal/LifecycleModuleBuilder.java |  13 +-
 .../maven/lifecycle/internal/LifecycleStarter.java |   3 +-
 .../maven/lifecycle/internal/MojoExecutor.java     |  83 ++++++++
 .../maven/lifecycle/internal/ReactorContext.java   |  14 +-
 .../lifecycle/internal/builder/BuilderCommon.java  |   2 +-
 .../apache/maven/lifecycle/mapping/Lifecycle.java  |   3 +-
 .../maven/lifecycle/mapping/LifecycleMojo.java     |   4 +-
 .../maven/lifecycle/mapping/LifecyclePhase.java    |   4 +-
 .../providers/EarLifecycleMappingProvider.java     |  83 --------
 .../providers/EjbLifecycleMappingProvider.java     |  95 ---------
 .../providers/JarLifecycleMappingProvider.java     |  95 ---------
 .../MavenPluginLifecycleMappingProvider.java       | 100 ---------
 .../providers/PomLifecycleMappingProvider.java     |  71 -------
 .../providers/RarLifecycleMappingProvider.java     |  95 ---------
 .../providers/WarLifecycleMappingProvider.java     |  95 ---------
 .../providers/AbstractLifecycleProvider.java       |  71 +++++++
 .../providers/CleanLifecycleProvider.java          |  54 ++---
 .../providers/DefaultLifecycleProvider.java        |  87 ++++----
 .../lifecycle/providers/SiteLifecycleProvider.java |  58 +++---
 .../providers/WrapperLifecycleProvider.java        |  52 ++---
 .../AbstractLifecycleMappingProvider.java          |  69 ++++++
 .../packaging/EarLifecycleMappingProvider.java}    |  43 ++--
 .../packaging/EjbLifecycleMappingProvider.java     |  53 +++++
 .../packaging/JarLifecycleMappingProvider.java     |  53 +++++
 .../MavenPluginLifecycleMappingProvider.java       |  55 +++++
 .../packaging/PomLifecycleMappingProvider.java}    |  35 ++--
 .../packaging/RarLifecycleMappingProvider.java     |  53 +++++
 .../packaging/WarLifecycleMappingProvider.java     |  53 +++++
 .../maven/session/scope/internal/SessionScope.java | 137 ++++++------
 maven-core/src/site/apt/artifact-handlers.apt      |   2 +-
 maven-core/src/site/apt/default-bindings.apt.vm    |  24 +--
 maven-core/src/site/apt/lifecycles.apt.vm          |  20 +-
 .../internal/stub/BuildPluginManagerStub.java      |   2 +-
 .../lifecycle/internal/stub/MojoExecutorStub.java  |   9 +-
 .../apache/maven/project/ProjectBuilderTest.java   |  13 ++
 .../session/scope/internal/SessionScopeTest.java   |  81 ++++++++
 .../main/java/org/apache/maven/cli/CLIManager.java |   6 +-
 .../main/java/org/apache/maven/cli/MavenCli.java   | 124 ++++-------
 .../internal/BootstrapCoreExtensionManager.java    |  35 ++--
 .../cli/internal/ExtensionResolutionException.java |  20 +-
 maven-embedder/src/main/mdo/core-extensions.mdo    |  26 +++
 .../java/org/apache/maven/cli/CLIManagerTest.java  |  50 -----
 .../java/org/apache/maven/cli/MavenCliTest.java    |  79 ++++++-
 .../repository/internal/RelocatedArtifact.java     |  34 +++
 maven-wrapper/pom.xml                              |  65 ------
 .../apache/maven/wrapper/BootstrapMainStarter.java |  64 ------
 .../apache/maven/wrapper/DefaultDownloader.java    | 190 -----------------
 .../java/org/apache/maven/wrapper/Downloader.java  |  54 -----
 .../java/org/apache/maven/wrapper/Installer.java   | 231 ---------------------
 .../main/java/org/apache/maven/wrapper/Logger.java |  41 ----
 .../org/apache/maven/wrapper/MavenWrapperMain.java | 107 ----------
 .../org/apache/maven/wrapper/PathAssembler.java    | 131 ------------
 .../apache/maven/wrapper/WrapperConfiguration.java | 116 -----------
 .../org/apache/maven/wrapper/WrapperExecutor.java  | 178 ----------------
 maven-wrapper/src/site/apt/index.apt               |  30 ---
 maven-wrapper/src/site/site.xml                    |  38 ----
 .../org/apache/maven/wrapper/DownloaderTest.java   |  71 -------
 .../org/apache/maven/wrapper/InstallerTest.java    | 214 -------------------
 .../apache/maven/wrapper/PathAssemblerTest.java    | 115 ----------
 .../apache/maven/wrapper/WrapperExecutorTest.java  | 202 ------------------
 .../org/apache/maven/wrapper/wrapper.properties    |  21 --
 pom.xml                                            |  22 +-
 src/site/resources/images/maven-deps.png           | Bin 160957 -> 140323 bytes
 src/site/xdoc/index.xml                            |  73 +++----
 src/site/xdoc/maven-deps.odg                       | Bin 22633 -> 19994 bytes
 112 files changed, 1237 insertions(+), 3960 deletions(-)
 create mode 100644 .github/workflows/maven_build_itself.yml
 delete mode 100644 apache-maven-wrapper/pom.xml
 delete mode 100644 apache-maven-wrapper/src/assembly/bin.xml
 delete mode 100644 apache-maven-wrapper/src/assembly/script.xml
 delete mode 100755 apache-maven-wrapper/src/assembly/script/download
 delete mode 100755 apache-maven-wrapper/src/assembly/script/download.cmd
 delete mode 100644 apache-maven-wrapper/src/assembly/shared/mvn/wrapper/maven-wrapper.properties
 delete mode 100644 apache-maven-wrapper/src/assembly/shared/mvnwDebug
 delete mode 100644 apache-maven-wrapper/src/assembly/shared/mvnwDebug.cmd
 delete mode 100755 apache-maven-wrapper/src/assembly/shared/mvnwlauncher
 delete mode 100755 apache-maven-wrapper/src/assembly/shared/mvnwlauncher.cmd
 delete mode 100644 apache-maven-wrapper/src/assembly/source.xml
 delete mode 100644 apache-maven-wrapper/src/assembly/source/download
 delete mode 100644 apache-maven-wrapper/src/assembly/source/download.cmd
 delete mode 100644 apache-maven-wrapper/src/assembly/source/mvn/wrapper/MavenWrapperDownloader.java
 delete mode 100644 apache-maven-wrapper/src/site/apt/index.apt.vm
 delete mode 100644 apache-maven-wrapper/src/site/site.xml
 delete mode 100644 apache-maven/src/main/appended-resources/licenses/MIT-jsoup-1.12.1.txt
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/EarLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/EjbLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/JarLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/MavenPluginLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/PomLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/RarLifecycleMappingProvider.java
 delete mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/mapping/providers/WarLifecycleMappingProvider.java
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/AbstractLifecycleProvider.java
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/AbstractLifecycleMappingProvider.java
 copy maven-core/src/main/java/org/apache/maven/{artifact/handler/providers/EarArtifactHandlerProvider.java => lifecycle/providers/packaging/EarLifecycleMappingProvider.java} (51%)
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/EjbLifecycleMappingProvider.java
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/JarLifecycleMappingProvider.java
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/MavenPluginLifecycleMappingProvider.java
 copy maven-core/src/main/java/org/apache/maven/{execution/scope/internal/MojoExecutionScopeCoreModule.java => lifecycle/providers/packaging/PomLifecycleMappingProvider.java} (59%)
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/RarLifecycleMappingProvider.java
 create mode 100644 maven-core/src/main/java/org/apache/maven/lifecycle/providers/packaging/WarLifecycleMappingProvider.java
 create mode 100644 maven-core/src/test/java/org/apache/maven/session/scope/internal/SessionScopeTest.java
 copy maven-core/src/main/java/org/apache/maven/plugin/PluginResolutionException.java => maven-embedder/src/main/java/org/apache/maven/cli/internal/ExtensionResolutionException.java (64%)
 delete mode 100644 maven-embedder/src/test/java/org/apache/maven/cli/CLIManagerTest.java
 delete mode 100644 maven-wrapper/pom.xml
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/BootstrapMainStarter.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/DefaultDownloader.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/Downloader.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/Installer.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/Logger.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/MavenWrapperMain.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/PathAssembler.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperConfiguration.java
 delete mode 100644 maven-wrapper/src/main/java/org/apache/maven/wrapper/WrapperExecutor.java
 delete mode 100644 maven-wrapper/src/site/apt/index.apt
 delete mode 100644 maven-wrapper/src/site/site.xml
 delete mode 100644 maven-wrapper/src/test/java/org/apache/maven/wrapper/DownloaderTest.java
 delete mode 100644 maven-wrapper/src/test/java/org/apache/maven/wrapper/InstallerTest.java
 delete mode 100644 maven-wrapper/src/test/java/org/apache/maven/wrapper/PathAssemblerTest.java
 delete mode 100644 maven-wrapper/src/test/java/org/apache/maven/wrapper/WrapperExecutorTest.java
 delete mode 100644 maven-wrapper/src/test/resources/org/apache/maven/wrapper/wrapper.properties

[maven] 01/01: [MNG-7276] - Refactoring - Umbrella

Posted by kh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

khmarbaise pushed a commit to branch MNG-7276
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 8015ca7c4ed3e8068e778cd2dedf09720f6ef22c
Author: Karl Heinz Marbaise <kh...@apache.org>
AuthorDate: Thu Sep 30 19:10:44 2021 +0200

    [MNG-7276] - Refactoring - Umbrella
---
 .../main/java/org/apache/maven/ReactorReader.java  | 102 ++++++++++-----------
 .../java/org/apache/maven/RepositoryUtils.java     |  47 +++-------
 .../resolver/filter/ExclusionArtifactFilter.java   |  53 ++++++-----
 .../org/apache/maven/execution/MavenSession.java   |  12 +--
 .../maven/extension/internal/CoreExports.java      |  14 ++-
 .../lifecycle/mapping/DefaultLifecycleMapping.java |   3 +-
 .../profile/DefaultProfileActivationContext.java   |  27 ++----
 7 files changed, 108 insertions(+), 150 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/ReactorReader.java b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
index 247632a..e50eabb 100644
--- a/maven-core/src/main/java/org/apache/maven/ReactorReader.java
+++ b/maven-core/src/main/java/org/apache/maven/ReactorReader.java
@@ -24,20 +24,20 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.inject.Inject;
-import javax.inject.Named;
-
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
@@ -49,6 +49,13 @@ import org.eclipse.aether.util.artifact.ArtifactIdUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.toMap;
+
 /**
  * An implementation of a workspace reader that knows how to search the Maven reactor for artifacts, either as packaged
  * jar if it has been built, or only compile output directory if packaging hasn't happened yet.
@@ -72,26 +79,22 @@ class ReactorReader
     private final Map<String, List<MavenProject>> projectsByGA;
     private final WorkspaceRepository repository;
 
+    private Function<MavenProject, String> projectIntoKey =
+            s -> ArtifactUtils.key( s.getGroupId(), s.getArtifactId(), s.getVersion() );
+
+    private Function<MavenProject, String> projectIntoVersionlessKey =
+            s -> ArtifactUtils.versionlessKey( s.getGroupId(), s.getArtifactId() );
+
     @Inject
     ReactorReader( MavenSession session )
     {
         this.session = session;
-        this.projectsByGAV = new HashMap<>( session.getAllProjects().size() * 2 );
-        session.getAllProjects().forEach( project ->
-        {
-            String projectId = ArtifactUtils.key( project.getGroupId(), project.getArtifactId(), project.getVersion() );
-            this.projectsByGAV.put( projectId, project );
-        } );
-
-        projectsByGA = new HashMap<>( projectsByGAV.size() * 2 );
-        for ( MavenProject project : projectsByGAV.values() )
-        {
-            String key = ArtifactUtils.versionlessKey( project.getGroupId(), project.getArtifactId() );
-
-            List<MavenProject> projects = projectsByGA.computeIfAbsent( key, k -> new ArrayList<>( 1 ) );
+        this.projectsByGAV =
+                session.getAllProjects().stream()
+                        .collect( toMap( projectIntoKey, identity() ) );
 
-            projects.add( project );
-        }
+        this.projectsByGA = projectsByGAV.values().stream()
+                .collect( groupingBy( projectIntoVersionlessKey ) );
 
         repository = new WorkspaceRepository( "reactor", new HashSet<>( projectsByGAV.keySet() ) );
     }
@@ -128,23 +131,11 @@ class ReactorReader
     {
         String key = ArtifactUtils.versionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
 
-        List<MavenProject> projects = projectsByGA.get( key );
-        if ( projects == null || projects.isEmpty() )
-        {
-            return Collections.emptyList();
-        }
-
-        List<String> versions = new ArrayList<>();
-
-        for ( MavenProject project : projects )
-        {
-            if ( find( project, artifact ) != null )
-            {
-                versions.add( project.getVersion() );
-            }
-        }
-
-        return Collections.unmodifiableList( versions );
+        return Optional.ofNullable( projectsByGA.get( key ) )
+                .orElse( Collections.emptyList() ).stream()
+                .filter( s -> Objects.nonNull( find( s, artifact ) ) )
+                .map( MavenProject::getVersion )
+                .collect( Collectors.collectingAndThen( Collectors.toList(), Collections::unmodifiableList ) );
     }
 
     @Override
@@ -334,28 +325,27 @@ class ReactorReader
             return mainArtifact;
         }
 
-        for ( Artifact attachedArtifact : RepositoryUtils.toArtifacts( project.getAttachedArtifacts() ) )
-        {
-            if ( attachedArtifactComparison( requestedArtifact, attachedArtifact ) )
-            {
-                return attachedArtifact;
-            }
-        }
-
-        return null;
+        return RepositoryUtils.toArtifacts( project.getAttachedArtifacts() ).stream()
+                .filter( isRequestedArtifact( requestedArtifact ) )
+                .findFirst()
+                .orElse( null );
     }
 
-    private boolean attachedArtifactComparison( Artifact requested, Artifact attached )
+    /**
+     * We are taking as much as we can from the DefaultArtifact.equals(). The requested artifact has no file, so we want
+     * to remove that from the comparison.
+     *
+     * @param requestArtifact checked against the given artifact.
+     * @return true if equals, false otherwise.
+     */
+    private Predicate<Artifact> isRequestedArtifact( Artifact requestArtifact )
     {
-        //
-        // We are taking as much as we can from the DefaultArtifact.equals(). The requested artifact has no file so
-        // we want to remove that from the comparison.
-        //
-        return requested.getArtifactId().equals( attached.getArtifactId() )
-            && requested.getGroupId().equals( attached.getGroupId() )
-            && requested.getVersion().equals( attached.getVersion() )
-            && requested.getExtension().equals( attached.getExtension() )
-            && requested.getClassifier().equals( attached.getClassifier() );
+        return s -> s.getArtifactId().equals( requestArtifact.getArtifactId() )
+                && s.getGroupId().equals( requestArtifact.getGroupId() )
+                && s.getVersion().equals( requestArtifact.getVersion() )
+                && s.getExtension().equals( requestArtifact.getExtension() )
+                && s.getClassifier().equals( requestArtifact.getClassifier() );
+
     }
 
     /**
diff --git a/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java b/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
index bafed36..ce840ee 100644
--- a/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
+++ b/maven-core/src/main/java/org/apache/maven/RepositoryUtils.java
@@ -26,6 +26,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
@@ -170,32 +172,21 @@ public class RepositoryUtils
 
         Artifact result = toArtifact( artifact );
 
-        List<Exclusion> excl = null;
-        if ( exclusions != null )
-        {
-            excl = new ArrayList<>( exclusions.size() );
-            for ( org.apache.maven.model.Exclusion exclusion : exclusions )
-            {
-                excl.add( toExclusion( exclusion ) );
-            }
-        }
-
+        List<Exclusion> excl = Optional.ofNullable( exclusions )
+                .orElse( Collections.emptyList() )
+                .stream()
+                .map( RepositoryUtils::toExclusion )
+                .collect( Collectors.toList() );
         return new Dependency( result, artifact.getScope(), artifact.isOptional(), excl );
     }
 
     public static List<RemoteRepository> toRepos( List<ArtifactRepository> repos )
     {
-        if ( repos == null )
-        {
-            return null;
-        }
-
-        List<RemoteRepository> results = new ArrayList<>( repos.size() );
-        for ( ArtifactRepository repo : repos )
-        {
-            results.add( toRepo( repo ) );
-        }
-        return results;
+        return Optional.ofNullable( repos )
+                .orElse( Collections.emptyList() )
+                .stream()
+                .map( RepositoryUtils::toRepo )
+                .collect( Collectors.toList() );
     }
 
     public static RemoteRepository toRepo( ArtifactRepository repo )
@@ -318,11 +309,8 @@ public class RepositoryUtils
             new DefaultArtifact( dependency.getGroupId(), dependency.getArtifactId(), dependency.getClassifier(), null,
                                  dependency.getVersion(), props, stereotype );
 
-        List<Exclusion> exclusions = new ArrayList<>( dependency.getExclusions().size() );
-        for ( org.apache.maven.model.Exclusion exclusion : dependency.getExclusions() )
-        {
-            exclusions.add( toExclusion( exclusion ) );
-        }
+        List<Exclusion> exclusions =
+                dependency.getExclusions().stream().map( RepositoryUtils::toExclusion ).collect( Collectors.toList() );
 
         return new Dependency( artifact,
                                             dependency.getScope(),
@@ -363,12 +351,7 @@ public class RepositoryUtils
 
     public static Collection<Artifact> toArtifacts( Collection<org.apache.maven.artifact.Artifact> artifactsToConvert )
     {
-        List<Artifact> artifacts = new ArrayList<>();
-        for ( org.apache.maven.artifact.Artifact a : artifactsToConvert )
-        {
-            artifacts.add( toArtifact( a ) );
-        }
-        return artifacts;
+        return artifactsToConvert.stream().map( RepositoryUtils::toArtifact ).collect( Collectors.toList() );
     }
 
     public static WorkspaceRepository getWorkspace( RepositorySystemSession session )
diff --git a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java
index dd50c31..18d4e83 100644
--- a/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java
+++ b/maven-core/src/main/java/org/apache/maven/artifact/resolver/filter/ExclusionArtifactFilter.java
@@ -19,11 +19,12 @@ package org.apache.maven.artifact.resolver.filter;
  * under the License.
  */
 
+import java.util.List;
+import java.util.function.Predicate;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.model.Exclusion;
 
-import java.util.List;
-
 /**
  * Filter to exclude from a list of artifact patterns.
  */
@@ -38,31 +39,33 @@ public class ExclusionArtifactFilter implements ArtifactFilter
         this.exclusions = exclusions;
     }
 
+    private Predicate<Exclusion> sameArtifactId( Artifact artifact )
+    {
+        return exclusion -> exclusion.getArtifactId().equals( artifact.getArtifactId() );
+    }
+
+    private Predicate<Exclusion> sameGroupId( Artifact artifact )
+    {
+        return exclusion -> exclusion.getGroupId().equals( artifact.getGroupId() );
+    }
+
+    private Predicate<Exclusion> groupIdIsWildcard = exclusion -> WILDCARD.equals( exclusion.getGroupId() );
+
+    private Predicate<Exclusion> artifactIdIsWildcard = exclusion -> WILDCARD.equals( exclusion.getArtifactId() );
+
+    private Predicate<Exclusion> groupIdAndArtifactIdIsWildcard = groupIdIsWildcard.and( artifactIdIsWildcard );
+
+    private Predicate<Exclusion> exclude( Artifact artifact )
+    {
+        return groupIdAndArtifactIdIsWildcard
+                .or( groupIdIsWildcard.and( sameArtifactId( artifact ) ) )
+                .or( artifactIdIsWildcard.and( sameGroupId( artifact ) ) )
+                .or( sameGroupId( artifact ).and( sameArtifactId( artifact ) ) );
+    }
+
     @Override
     public boolean include( Artifact artifact )
     {
-        for ( Exclusion exclusion : exclusions )
-        {
-            if ( WILDCARD.equals( exclusion.getGroupId() ) && WILDCARD.equals( exclusion.getArtifactId() ) )
-            {
-                return false;
-            }
-            if ( WILDCARD.equals( exclusion.getGroupId() )
-                && exclusion.getArtifactId().equals( artifact.getArtifactId() ) )
-            {
-                return false;
-            }
-            if ( WILDCARD.equals( exclusion.getArtifactId() )
-                && exclusion.getGroupId().equals( artifact.getGroupId() ) )
-            {
-                return false;
-            }
-            if ( exclusion.getGroupId().equals( artifact.getGroupId() )
-                && exclusion.getArtifactId().equals( artifact.getArtifactId() ) )
-            {
-                return false;
-            }
-        }
-        return true;
+        return !exclusions.stream().anyMatch( exclude( artifact ) );
     }
 }
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 c2f0c89..5af1734 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
@@ -91,15 +91,9 @@ public class MavenSession
         if ( !projects.isEmpty() )
         {
             this.currentProject = projects.get( 0 );
-            this.topLevelProject = currentProject;
-            for ( MavenProject project : projects )
-            {
-                if ( project.isExecutionRoot() )
-                {
-                    topLevelProject = project;
-                    break;
-                }
-            }
+            this.topLevelProject =
+                    projects.stream().filter( project -> project.isExecutionRoot() ).findFirst()
+                            .orElse( currentProject );
         }
         else
         {
diff --git a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java
index d72b3f9..2d976ae 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExports.java
@@ -20,14 +20,16 @@ package org.apache.maven.extension.internal;
  */
 
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toMap;
+
 /**
  * Provides information about artifacts (identified by groupId:artifactId string key) and classpath elements exported by
  * Maven core itself and loaded Maven core extensions.
@@ -47,13 +49,9 @@ public class CoreExports
 
     public CoreExports( ClassRealm realm, Set<String> exportedArtifacts, Set<String> exportedPackages )
     {
-        Map<String, ClassLoader> packages = new LinkedHashMap<>();
-        for ( String pkg : exportedPackages )
-        {
-            packages.put( pkg, realm );
-        }
         this.artifacts = Collections.unmodifiableSet( new HashSet<>( exportedArtifacts ) );
-        this.packages = Collections.unmodifiableMap( new HashMap<>( packages ) );
+        this.packages = exportedPackages.stream().collect(
+                collectingAndThen( toMap( identity(), v -> realm ), Collections::unmodifiableMap ) );
     }
 
     /**
diff --git a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java
index e1ff314..4001a97 100644
--- a/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java
+++ b/maven-core/src/main/java/org/apache/maven/lifecycle/mapping/DefaultLifecycleMapping.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static java.util.function.Function.identity;
 import static java.util.stream.Collectors.toMap;
 
 /**
@@ -57,7 +58,7 @@ public class DefaultLifecycleMapping
     public DefaultLifecycleMapping( final List<Lifecycle> lifecycles )
     {
         this.lifecycleMap = Collections.unmodifiableMap(
-                lifecycles.stream().collect( toMap( Lifecycle::getId, l -> l ) )
+                lifecycles.stream().collect( toMap( Lifecycle::getId, identity() ) )
         );
     }
 
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java
index 77d92a3..4fb1b26 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileActivationContext.java
@@ -21,12 +21,13 @@ package org.apache.maven.model.profile;
 
 import java.io.File;
 import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toMap;
+
 /**
  * Describes the environmental context used to determine the activation status of profiles.
  *
@@ -230,8 +231,11 @@ public class DefaultProfileActivationContext
     {
         if ( projectProperties != null )
         {
-
-            this.projectProperties = Collections.unmodifiableMap( toMap( projectProperties ) );
+            this.projectProperties = projectProperties.entrySet().stream()
+                    .collect(
+                            collectingAndThen(
+                                    toMap( k -> String.valueOf( k.getKey() ), v -> String.valueOf( v ) ),
+                                    Collections::unmodifiableMap ) );
         }
         else
         {
@@ -241,19 +245,4 @@ public class DefaultProfileActivationContext
         return this;
     }
 
-    private Map<String, String> toMap( Properties properties )
-    {
-        if ( properties == null )
-        {
-            return Collections.emptyMap();
-        }
-        Map<String, String> map = new HashMap<>();
-        Enumeration keys = properties.keys();
-        while ( keys.hasMoreElements() )
-        {
-            String key = (String) keys.nextElement();
-            map.put( key, properties.getProperty( key ) );
-        }
-        return map;
-    }
 }