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

tibordigana pushed a commit to branch SUREFIRE-1585-tibor2
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git


The following commit(s) were added to refs/heads/SUREFIRE-1585-tibor2 by this 
push:
     new 1081e1a  [SUREFIRE-1585] Align JUnit Platform version at runtime
1081e1a is described below

commit 1081e1ae04df299427af152a464e50e2dc973478
Author: tibordigana <tibordig...@apache.org>
AuthorDate: Sun Feb 24 11:00:23 2019 +0100

    [SUREFIRE-1585] Align JUnit Platform version at runtime
---
 .../plugin/surefire/AbstractSurefireMojo.java      |  13 +-
 .../surefire/SurefireDependencyResolver.java       |  25 ++-
 .../plugin/surefire/AbstractSurefireMojoTest.java  | 209 ++++++++++++++++++---
 .../src/site/apt/examples/junit-platform.apt.vm    |  45 ++++-
 4 files changed, 241 insertions(+), 51 deletions(-)

diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
index da68069..39e88c9 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
@@ -96,7 +96,6 @@ import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -115,6 +114,7 @@ import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
 import static org.apache.commons.lang3.StringUtils.substringBeforeLast;
 import static org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS;
+import static 
org.apache.maven.artifact.ArtifactUtils.artifactMapByVersionlessId;
 import static 
org.apache.maven.plugin.surefire.SurefireDependencyResolver.isWithinVersionSpec;
 import static org.apache.maven.plugin.surefire.util.DependencyScanner.filter;
 import static 
org.apache.maven.plugin.surefire.SurefireHelper.replaceThreadNumberPlaceholders;
@@ -2929,14 +2929,10 @@ public abstract class AbstractSurefireMojo
             }
             else if ( hasDependencyPlatformEngine( getPluginArtifactMap() ) )
             {
+                Set<Artifact> pluginArtifacts =
+                        dependencyResolver.resolvePluginArtifactOffline( 
getMojoArtifact() ).getArtifacts();
                 Map<String, Artifact> engineArtifacts = new HashMap<>( 
getPluginArtifactMap() );
-                for ( Iterator<String> keys = 
engineArtifacts.keySet().iterator(); keys.hasNext(); )
-                {
-                    if ( keys.next().startsWith( "org.apache.maven.surefire:" 
) )
-                    {
-                        keys.remove();
-                    }
-                }
+                engineArtifacts.keySet().removeAll( 
artifactMapByVersionlessId( pluginArtifacts ).keySet() );
                 providerArtifacts.putAll( engineArtifacts );
                 alignVersions( providerArtifacts, engineArtifacts );
             }
@@ -2951,6 +2947,7 @@ public abstract class AbstractSurefireMojo
                 addEngineByApi( engineGroupId, engineArtifactId, engineVersion,
                         providerArtifacts, testDependencies );
             }
+            providerArtifacts.keySet().removeAll( testDependencies.keySet() );
             return new LinkedHashSet<>( providerArtifacts.values() );
         }
 
diff --git 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
index 43f6c52..5c05a1f 100644
--- 
a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
+++ 
b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/SurefireDependencyResolver.java
@@ -20,7 +20,6 @@ package org.apache.maven.plugin.surefire;
  */
 
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +41,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import static org.apache.maven.artifact.Artifact.SCOPE_TEST;
+import static 
org.apache.maven.artifact.ArtifactUtils.artifactMapByVersionlessId;
 import static 
org.apache.maven.artifact.versioning.VersionRange.createFromVersionSpec;
 
 /**
@@ -118,6 +118,11 @@ final class SurefireDependencyResolver
         }
     }
 
+    ArtifactResolutionResult resolvePluginArtifactOffline( Artifact artifact )
+    {
+        return resolveArtifact( artifact, null );
+    }
+
     ArtifactResolutionResult resolvePluginArtifact( Artifact artifact )
     {
         return resolveArtifact( artifact, pluginRemoteRepositories );
@@ -132,9 +137,17 @@ final class SurefireDependencyResolver
     {
         ArtifactResolutionRequest request = new ArtifactResolutionRequest()
                                                     .setArtifact( artifact )
-                                                    .setRemoteRepositories( 
repositories )
                                                     .setLocalRepository( 
localRepository )
                                                     .setResolveTransitively( 
true );
+        if ( repositories == null )
+        {
+            request.setOffline( true );
+        }
+        else
+        {
+            request.setRemoteRepositories( repositories );
+        }
+
         return repositorySystem.resolve( request );
     }
 
@@ -163,13 +176,7 @@ final class SurefireDependencyResolver
     @Nonnull
     Map<String, Artifact> getProviderClasspathAsMap( String 
providerArtifactId, String providerVersion )
     {
-        Map<String, Artifact> cpArtifactsMapping = new LinkedHashMap<>();
-        for ( Artifact cpArtifact : getProviderClasspath( providerArtifactId, 
providerVersion ) )
-        {
-            String key = cpArtifact.getGroupId() + ":" + 
cpArtifact.getArtifactId();
-            cpArtifactsMapping.put( key, cpArtifact );
-        }
-        return cpArtifactsMapping;
+        return artifactMapByVersionlessId( getProviderClasspath( 
providerArtifactId, providerVersion ) );
     }
 
     Set<Artifact> addProviderToClasspath( Map<String, Artifact> 
pluginArtifactMap, Artifact mojoPluginArtifact,
diff --git 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
index 9d2df22..78e135f 100644
--- 
a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
+++ 
b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoTest.java
@@ -586,20 +586,20 @@ public class AbstractSurefireMojoTest
                     public ArtifactResolutionResult answer( InvocationOnMock 
invocation )
                     {
                         ArtifactResolutionRequest req = 
(ArtifactResolutionRequest) invocation.getArguments()[0];
-                        Artifact artifact = req.getArtifact();
-                        if ( artifact == surefireProvider )
+                        Artifact resolvable = req.getArtifact();
+                        if ( resolvable == surefireProvider )
                         {
                             return surefireProviderResolutionResult;
                         }
-                        else if ( "org.junit.platform".equals( 
req.getArtifact().getGroupId() )
-                                && "junit-platform-engine".equals( 
req.getArtifact().getArtifactId() )
-                                && "1.4.0".equals( 
req.getArtifact().getVersion() ) )
+                        else if ( "org.junit.platform".equals( 
resolvable.getGroupId() )
+                                && "junit-platform-engine".equals( 
resolvable.getArtifactId() )
+                                && "1.4.0".equals( resolvable.getVersion() ) )
                         {
                             return createVintageEngineResolutionResult();
                         }
-                        else if ( "org.junit.platform".equals( 
req.getArtifact().getGroupId() )
-                                && "junit-platform-launcher".equals( 
req.getArtifact().getArtifactId() )
-                                && "1.4.0".equals( 
req.getArtifact().getVersion() ) )
+                        else if ( "org.junit.platform".equals( 
resolvable.getGroupId() )
+                                && "junit-platform-launcher".equals( 
resolvable.getArtifactId() )
+                                && "1.4.0".equals( resolvable.getVersion() ) )
                         {
                             return 
createExpectedJUnitPlatformLauncherResolutionResult();
                         }
@@ -734,7 +734,8 @@ public class AbstractSurefireMojoTest
                     public ArtifactResolutionResult answer( InvocationOnMock 
invocation )
                     {
                         ArtifactResolutionRequest req = 
(ArtifactResolutionRequest) invocation.getArguments()[0];
-                        if ( req.getArtifact() == surefireProvider )
+                        Artifact resolvable = req.getArtifact();
+                        if ( resolvable == surefireProvider )
                         {
                             return createSurefireProviderResolutionResult( 
surefireVersion );
                         }
@@ -760,17 +761,13 @@ public class AbstractSurefireMojoTest
                 surefireVersion, null, "jar", null, mock( 
ArtifactHandler.class ) );
         Artifact launcher = new DefaultArtifact( "org.junit.platform", 
"junit-platform-launcher",
                 createFromVersion( "1.3.2" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
-        Artifact apiguardian = new DefaultArtifact( "org.apiguardian", 
"apiguardian-api",
-                createFromVersion( "1.0.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
         Artifact engine = new DefaultArtifact( "org.junit.platform", 
"junit-platform-engine",
                 createFromVersion( "1.3.2" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
-        Artifact commons = new DefaultArtifact( "org.junit.platform", 
"junit-platform-commons",
-                createFromVersion( "1.3.2" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
         Artifact opentest4j = new DefaultArtifact( "org.opentest4j", 
"opentest4j",
                 createFromVersion( "1.1.1" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
         assertThat( resolvedProviderArtifacts )
-                .hasSize( 7 )
-                .containsOnly( provider, java5, launcher, apiguardian, engine, 
commons, opentest4j );
+                .hasSize( 5 )
+                .containsOnly( provider, java5, launcher, engine, opentest4j );
 
         assertThat( testClasspathWrapper.getTestDependencies() )
                 .hasSize( 3 )
@@ -845,18 +842,19 @@ public class AbstractSurefireMojoTest
                     public ArtifactResolutionResult answer( InvocationOnMock 
invocation )
                     {
                         ArtifactResolutionRequest req = 
(ArtifactResolutionRequest) invocation.getArguments()[0];
-                        if ( req.getArtifact() == surefireProvider )
+                        Artifact resolvable = req.getArtifact();
+                        if ( resolvable == surefireProvider )
                         {
                             return createSurefireProviderResolutionResult( 
surefireVersion );
                         }
-                        else if ( req.getArtifact().equals( 
testClasspathJUnit5 )  )
+                        else if ( resolvable.equals( testClasspathJUnit5 )  )
                         {
                             return createResolutionResult( 
testClasspathJUnit5, testClasspathApiguardian,
                                     testClasspathCommons, 
testClasspathOpentest4j );
                         }
-                        else if ( "org.junit.platform".equals( 
req.getArtifact().getGroupId() )
-                                && "junit-platform-launcher".equals( 
req.getArtifact().getArtifactId() )
-                                && "1.4.0".equals( 
req.getArtifact().getVersion() ) )
+                        else if ( "org.junit.platform".equals( 
resolvable.getGroupId() )
+                                && "junit-platform-launcher".equals( 
resolvable.getArtifactId() )
+                                && "1.4.0".equals( resolvable.getVersion() ) )
                         {
                             return 
createExpectedJUnitPlatformLauncherResolutionResult();
                         }
@@ -1107,9 +1105,9 @@ public class AbstractSurefireMojoTest
                         {
                             return 
createExpectedJUnitPlatformLauncherResolutionResult();
                         }
-                        else if ( "org.junit.platform".equals( 
req.getArtifact().getGroupId() )
-                                && "junit-platform-engine".equals( 
req.getArtifact().getArtifactId() )
-                                && "1.4.0".equals( 
req.getArtifact().getVersion() ) )
+                        else if ( "org.junit.platform".equals( 
resolvable.getGroupId() )
+                                && "junit-platform-engine".equals( 
resolvable.getArtifactId() )
+                                && "1.4.0".equals( resolvable.getVersion() ) )
                         {
                             return createVintageEngineResolutionResult();
                         }
@@ -1148,6 +1146,164 @@ public class AbstractSurefireMojoTest
                         entry( "org.opentest4j:opentest4j", 
testClasspathOpentest4j ) );
     }
 
+    @Test
+    public void 
shouldSmartlyResolveJUnit5ProviderWithJupiterEngineInPluginDependencies() 
throws Exception
+    {
+
+        final VersionRange surefireVersion = createFromVersion( "1" );
+
+        final Artifact plugin = new DefaultArtifact( 
"org.apache.maven.surefire", "maven-surefire-plugin",
+                surefireVersion, null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact forkedBooter = new DefaultArtifact( 
"org.apache.maven.surefire",
+                "surefire-booter", surefireVersion, null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepJupiterEngine = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-engine",
+                createFromVersion( "5.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepPlatformEngine = new DefaultArtifact( 
"org.junit.platform", "junit-platform-engine",
+                createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepJupiterApi = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-api",
+                createFromVersion( "5.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepApiguardian = new DefaultArtifact( 
"org.apiguardian", "apiguardian-api",
+                createFromVersion( "1.0.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepCommons = new DefaultArtifact( "org.junit.platform", 
"junit-platform-commons",
+                createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Artifact pluginDepOpentest4j = new DefaultArtifact( "org.opentest4j", 
"opentest4j",
+                createFromVersion( "1.1.1" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Map<String, Artifact> pluginDependencies = new HashMap<>();
+        pluginDependencies.put( 
"org.apache.maven.surefire:maven-surefire-plugin", plugin );
+        pluginDependencies.put( "org.apache.maven.surefire:surefire-booter", 
forkedBooter );
+        pluginDependencies.put( "org.junit.jupiter:junit-jupiter-engine", 
pluginDepJupiterEngine );
+        pluginDependencies.put( "org.junit.platform:junit-platform-engine", 
pluginDepPlatformEngine );
+        pluginDependencies.put( "org.junit.jupiter:junit-jupiter-api", 
pluginDepJupiterApi );
+        pluginDependencies.put( "org.apiguardian:apiguardian-api", 
pluginDepApiguardian );
+        pluginDependencies.put( "org.junit.platform:junit-platform-commons", 
pluginDepCommons );
+        pluginDependencies.put( "org.opentest4j:opentest4j", 
pluginDepOpentest4j );
+        mojo.setPluginArtifactMap( pluginDependencies );
+
+        MavenProject mavenProject = new MavenProject();
+        mavenProject.setArtifact( new DefaultArtifact( "dummy", "pom", 
createFromVersion( "1.0.0" ),
+                null, "jar", null, mock( ArtifactHandler.class ) ) );
+        mojo.setProject( mavenProject );
+
+        Artifact junitPlatformArtifact = new DefaultArtifact( "g", "a",
+                createFromVersion( "0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact testClasspathSomeTestArtifact = new DefaultArtifact( 
"third.party", "artifact",
+                createFromVersion( "1.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact testClasspathJupiterApi = new DefaultArtifact( 
"org.junit.jupiter", "junit-jupiter-api",
+                createFromVersion( "5.3.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact testClasspathApiguardian = new DefaultArtifact( 
"org.apiguardian", "apiguardian-api",
+                createFromVersion( "1.0.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact testClasspathCommons = new DefaultArtifact( 
"org.junit.platform", "junit-platform-commons",
+                createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        final Artifact testClasspathOpentest4j = new DefaultArtifact( 
"org.opentest4j", "opentest4j",
+                createFromVersion( "1.1.1" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+
+        Iterable<Artifact> testArtifacts = asList( 
testClasspathSomeTestArtifact, testClasspathJupiterApi,
+                testClasspathApiguardian, testClasspathCommons, 
testClasspathOpentest4j );
+
+        File classesDirectory = new File( "target/classes" );
+
+        File testClassesDirectory = new File( "target/test-classes" );
+
+        TestClassPath testClasspathWrapper =
+                new TestClassPath( testArtifacts, classesDirectory, 
testClassesDirectory, null );
+
+        mojo.setRemoteRepositories( 
Collections.<ArtifactRepository>emptyList() );
+        mojo.setProjectRemoteRepositories( 
Collections.<ArtifactRepository>emptyList() );
+        RepositorySystem repositorySystem = mock( RepositorySystem.class );
+        final Artifact surefireProvider = new DefaultArtifact( 
"org.apache.maven.surefire",
+                "surefire-junit-platform", surefireVersion, null, "jar", null, 
mock( ArtifactHandler.class ) );
+        when( repositorySystem.createDependencyArtifact( any( Dependency.class 
) ) ).thenAnswer( new Answer<Artifact>()
+        {
+            @Override
+            public Artifact answer( InvocationOnMock invocation )
+            {
+                Dependency provider = (Dependency) 
invocation.getArguments()[0];
+                assertThat( provider.getGroupId() ).isEqualTo( 
"org.apache.maven.surefire" );
+                assertThat( provider.getArtifactId() ).isEqualTo( 
"surefire-junit-platform" );
+                return surefireProvider;
+            }
+        } );
+
+        when( repositorySystem.resolve( any( ArtifactResolutionRequest.class ) 
) )
+                .thenAnswer( new Answer<ArtifactResolutionResult>()
+                {
+                    @Override
+                    public ArtifactResolutionResult answer( InvocationOnMock 
invocation )
+                    {
+                        ArtifactResolutionRequest req = 
(ArtifactResolutionRequest) invocation.getArguments()[0];
+                        Artifact resolvable = req.getArtifact();
+                        if ( resolvable == surefireProvider )
+                        {
+                            return createSurefireProviderResolutionResult( 
surefireVersion );
+                        }
+                        else if ( "org.junit.platform".equals( 
resolvable.getGroupId() )
+                                && "junit-platform-launcher".equals( 
resolvable.getArtifactId() )
+                                && "1.4.0".equals( resolvable.getVersion() ) )
+                        {
+                            return 
createExpectedJUnitPlatformLauncherResolutionResult();
+                        }
+                        else if ( "org.apache.maven.surefire".equals( 
resolvable.getGroupId() )
+                                && "maven-surefire-plugin".equals( 
resolvable.getArtifactId() )
+                                && "1".equals( resolvable.getVersion() ) )
+                        {
+                            Set<Artifact> pluginItself = new HashSet<>();
+                            pluginItself.add( plugin );
+                            pluginItself.add( forkedBooter );
+                            ArtifactResolutionResult launcherResolutionResult 
= mock( ArtifactResolutionResult.class );
+                            when( launcherResolutionResult.getArtifacts() )
+                                    .thenReturn( pluginItself );
+                            return launcherResolutionResult;
+                        }
+                        else
+                        {
+                            fail();
+                            return null;
+                        }
+                    }
+                } );
+
+        mojo.setRepositorySystem( repositorySystem );
+        mojo.setLogger( mock( Logger.class ) );
+
+        invokeMethod( mojo, "setupStuff" );
+        JUnitPlatformProviderInfo prov =
+                mojo.createJUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
+        Set<Artifact> resolvedProviderArtifacts = prov.getProviderClasspath();
+
+        Artifact java5 = new DefaultArtifact( "org.apache.maven.surefire", 
"common-java5",
+                surefireVersion, null, "jar", null, mock( 
ArtifactHandler.class ) );
+        Artifact launcher = new DefaultArtifact( "org.junit.platform", 
"junit-platform-launcher",
+                createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+        Artifact jupiterEngine = new DefaultArtifact( "org.junit.jupiter", 
"junit-jupiter-engine",
+                createFromVersion( "5.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+        Artifact platformEngine = new DefaultArtifact( "org.junit.platform", 
"junit-platform-engine",
+                createFromVersion( "1.4.0" ), null, "jar", null, mock( 
ArtifactHandler.class ) );
+        assertThat( resolvedProviderArtifacts )
+                .hasSize( 5 )
+                .containsOnly( surefireProvider, java5, launcher, 
jupiterEngine, platformEngine );
+
+        assertThat( testClasspathWrapper.getTestDependencies() )
+                .hasSize( 5 )
+                .includes( entry( "third.party:artifact", 
testClasspathSomeTestArtifact ),
+                        entry( "org.junit.jupiter:junit-jupiter-api", 
testClasspathJupiterApi ),
+                        entry( "org.apiguardian:apiguardian-api", 
testClasspathApiguardian ),
+                        entry( "org.junit.platform:junit-platform-commons", 
testClasspathCommons ),
+                        entry( "org.opentest4j:opentest4j", 
testClasspathOpentest4j ) );
+    }
+
     private static ArtifactResolutionResult 
createJUnitPlatformLauncherResolutionResult(
             Artifact junit5Engine, Artifact apiguardian, Artifact commons, 
Artifact opentest4j )
     {
@@ -1271,10 +1427,10 @@ public class AbstractSurefireMojoTest
     public static class Mojo
             extends AbstractSurefireMojo
     {
-        private JUnitPlatformProviderInfo createJUnitPlatformProviderInfo( 
Artifact junitPlatformArtifact,
+        private JUnitPlatformProviderInfo createJUnitPlatformProviderInfo( 
Artifact providerArtifact,
                                                                            
TestClassPath testClasspathWrapper )
         {
-            return new JUnitPlatformProviderInfo( junitPlatformArtifact, 
testClasspathWrapper );
+            return new JUnitPlatformProviderInfo( providerArtifact, 
testClasspathWrapper );
         }
 
         @Override
@@ -1646,7 +1802,8 @@ public class AbstractSurefireMojoTest
         @Override
         protected Artifact getMojoArtifact()
         {
-            return null;
+            return new DefaultArtifact( "org.apache.maven.surefire", 
"maven-surefire-plugin", createFromVersion( "1" ),
+                    null, "jar", null, mock( ArtifactHandler.class ) );
         }
     }
 
diff --git a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm 
b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm
index 497043c..1a11987 100644
--- a/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm
+++ b/maven-surefire-plugin/src/site/apt/examples/junit-platform.apt.vm
@@ -76,11 +76,10 @@ Using JUnit 5 Platform
 
 * Smart Resolution of Jupiter Engine and Vintage Engine for JUnit4 (since 
plugin version 3.0.0-M4)
 
-  Normally the developer does not want to access internal classes of JUnit5 
engine (e.g. <<<5.4.0>>>). In this example
-  the POM has only Jupiter API dependency in test classpath. The engine 
artifact appears in plugin dependencies.
+  JUnit5 API artifact and your test sources become isolated from engine.
 
-  Since the version 3.0.0-M4 you can specify only JUnit5 API artifact and your 
test sources become isolated from engine.
-  The engine is resolved by the plugin and downloaded from a remote repository.
+  Normally the developer does not want to access internal classes of JUnit5 
engine (e.g. <<<5.4.0>>>). In this example
+  the POM has only Jupiter API dependency in test classpath.
 
 +---+
 <dependencies>
@@ -96,7 +95,38 @@ Using JUnit 5 Platform
 ...
 <build>
     <plugins>
-        ...
+        [...]
+        <plugin>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>${project.artifactId}</artifactId>
+            <version>${project.version}</version>
+            [... configuration or goals and executions ...]
+        </plugin>
+        [...]
+    </plugins>
+</build>
+...
++---+
+
+  In the following example the engine artifact appears in plugin dependencies 
and the engine is resolved by the plugin
+  and downloaded from a remote repository for plugins. You may want to update 
the version of engine with fixed bugs in
+  <<<5.3.2>>> but the API version <<<5.3.0>>> stays intact!
+
++---+
+<dependencies>
+    [...]
+    <dependency>
+        <groupId>org.junit.jupiter</groupId>
+        <artifactId>junit-jupiter-api</artifactId>
+        <version>5.3.0</version>
+        <scope>test</scope>
+    </dependency>
+    [...]
+</dependencies>
+...
+<build>
+    <plugins>
+        [...]
         <plugin>
             <groupId>${project.groupId}</groupId>
             <artifactId>${project.artifactId}</artifactId>
@@ -105,11 +135,11 @@ Using JUnit 5 Platform
                 <dependency>
                     <groupId>org.junit.jupiter</groupId>
                     <artifactId>junit-jupiter-engine</artifactId>
-                    <version>5.4.0</version>
-                    <scope>test</scope>
+                    <version>5.3.2</version>
                 </dependency>
             </dependencies>
         </plugin>
+        [...]
     </plugins>
 </build>
 ...
@@ -142,7 +172,6 @@ Using JUnit 5 Platform
                     <groupId>org.junit.vintage</groupId>
                     <artifactId>junit-vintage-engine</artifactId>
                     <version>5.4.0</version>
-                    <scope>test</scope>
                 </dependency>
             </dependencies>
         </plugin>

Reply via email to