You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2019/01/20 23:07:48 UTC

[maven-surefire] 01/01: [SUREFIRE-1534] ClassNotFoundException: org.apache.maven.plugin.surefire.StartupReportConfiguration using reuseForks set to false

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

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

commit 47769fd1c2d73c8728c0160c1e4db9042f873cad
Author: tibordigana <ti...@apache.org>
AuthorDate: Mon Jan 21 00:07:34 2019 +0100

    [SUREFIRE-1534] ClassNotFoundException: org.apache.maven.plugin.surefire.StartupReportConfiguration using reuseForks set to false
---
 .../plugin/surefire/AbstractSurefireMojo.java      |  8 +++++++-
 .../ModularClasspathForkConfigurationTest.java     |  3 ++-
 .../surefire/booter/AbstractPathConfiguration.java | 20 +++++++++++-------
 .../booter/ModularClasspathConfiguration.java      | 24 ++++++++++++++++++++++
 4 files changed, 46 insertions(+), 9 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 c314fb4..b6bafc4 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
@@ -1845,8 +1845,12 @@ public abstract class AbstractSurefireMojo
         ModularClasspath modularClasspath = new ModularClasspath( moduleDescriptor, testModulepath.getClassPath(),
                 packages, getTestClassesDirectory() );
 
+        Artifact[] additionalInProcArtifacts = { getCommonArtifact(), getApiArtifact(), getLoggerApiArtifact() };
+        Set<Artifact> inProcArtifacts = retainInProcArtifactsUnique( providerArtifacts, additionalInProcArtifacts );
+        Classpath inProcClasspath = createInProcClasspath( providerClasspath, inProcArtifacts );
+
         ModularClasspathConfiguration classpathConfiguration = new ModularClasspathConfiguration( modularClasspath,
-                testClasspath, providerClasspath, effectiveIsEnableAssertions(), isChildDelegation() );
+                testClasspath, providerClasspath, inProcClasspath, effectiveIsEnableAssertions(), isChildDelegation() );
 
         getConsoleLogger().debug( testClasspath.getLogMessage( "test classpath:" ) );
         getConsoleLogger().debug( testModulepath.getLogMessage( "test modulepath:" ) );
@@ -1854,6 +1858,8 @@ public abstract class AbstractSurefireMojo
         getConsoleLogger().debug( testClasspath.getCompactLogMessage( "test(compact) classpath:" ) );
         getConsoleLogger().debug( testModulepath.getCompactLogMessage( "test(compact) modulepath:" ) );
         getConsoleLogger().debug( providerClasspath.getCompactLogMessage( "provider(compact) classpath:" ) );
+        getConsoleLogger().debug( inProcClasspath.getLogMessage( "in-process classpath:" ) );
+        getConsoleLogger().debug( inProcClasspath.getCompactLogMessage( "in-process(compact) classpath:" ) );
 
         return new StartupConfiguration( providerName, classpathConfiguration, classLoaderConfiguration, isForking(),
                 false );
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
index d129df3..26410b5 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/booterclient/ModularClasspathForkConfigurationTest.java
@@ -45,6 +45,7 @@ import static java.nio.file.Files.readAllLines;
 import static java.util.Arrays.asList;
 import static java.util.Collections.singleton;
 import static org.apache.maven.shared.utils.StringUtils.replace;
+import static org.apache.maven.surefire.booter.Classpath.emptyClasspath;
 import static org.fest.assertions.Assertions.assertThat;
 
 /**
@@ -146,7 +147,7 @@ public class ModularClasspathForkConfigurationTest
         Classpath surefireClasspathUrls = Classpath.emptyClasspath();
         ModularClasspathConfiguration modularClasspathConfiguration =
                 new ModularClasspathConfiguration( modularClasspath, testClasspathUrls, surefireClasspathUrls,
-                        true, true );
+                        emptyClasspath(), true, true );
         ClassLoaderConfiguration clc = new ClassLoaderConfiguration( true, true );
         StartupConfiguration startupConfiguration =
                 new StartupConfiguration( "JUnitCoreProvider", modularClasspathConfiguration, clc, true, true );
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/AbstractPathConfiguration.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/AbstractPathConfiguration.java
index c9651ab..30d9a86 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/AbstractPathConfiguration.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/AbstractPathConfiguration.java
@@ -21,7 +21,6 @@ package org.apache.maven.surefire.booter;
 
 import javax.annotation.Nonnull;
 
-import static org.apache.maven.surefire.booter.Classpath.emptyClasspath;
 import static org.apache.maven.surefire.booter.Classpath.join;
 
 /**
@@ -77,10 +76,7 @@ public abstract class AbstractPathConfiguration
      */
     public abstract boolean isClassPathConfig();
 
-    protected Classpath getInprocClasspath()
-    {
-        return emptyClasspath();
-    }
+    protected abstract Classpath getInprocClasspath();
 
     public <T extends AbstractPathConfiguration> T toRealPath( Class<T> type )
     {
@@ -95,8 +91,7 @@ public abstract class AbstractPathConfiguration
     public ClassLoader createMergedClassLoader()
             throws SurefireExecutionException
     {
-        return join( getInprocClasspath(), getTestClasspath() )
-                .createClassLoader( isChildDelegation(), isEnableAssertions(), "test" );
+        return createMergedClassLoader( getInprocTestClasspath() );
     }
 
     public Classpath getProviderClasspath()
@@ -114,4 +109,15 @@ public abstract class AbstractPathConfiguration
     {
         return childDelegation;
     }
+
+    final Classpath getInprocTestClasspath()
+    {
+        return join( getInprocClasspath(), getTestClasspath() );
+    }
+
+    final ClassLoader createMergedClassLoader( Classpath cp )
+            throws SurefireExecutionException
+    {
+        return cp.createClassLoader( isChildDelegation(), isEnableAssertions(), "test" );
+    }
 }
diff --git a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspathConfiguration.java b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspathConfiguration.java
index 823b445..e19bd4f 100644
--- a/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspathConfiguration.java
+++ b/surefire-booter/src/main/java/org/apache/maven/surefire/booter/ModularClasspathConfiguration.java
@@ -21,6 +21,10 @@ package org.apache.maven.surefire.booter;
 
 import javax.annotation.Nonnull;
 
+import java.util.Collection;
+
+import static org.apache.maven.surefire.booter.Classpath.join;
+
 /**
  * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
  * @since 2.21.0.Jigsaw
@@ -30,15 +34,22 @@ public class ModularClasspathConfiguration extends AbstractPathConfiguration
     private final ModularClasspath modularClasspath;
     private final Classpath testClasspathUrls;
 
+    /**
+     * The surefire classpath to use when invoking in-process with the plugin
+     */
+    private final Classpath inprocClasspath;
+
     public ModularClasspathConfiguration( @Nonnull ModularClasspath modularClasspath,
                                           @Nonnull Classpath testClasspathUrls,
                                           @Nonnull Classpath surefireClasspathUrls,
+                                          @Nonnull Classpath inprocClasspath,
                                           boolean enableAssertions,
                                           boolean childDelegation )
     {
         super( surefireClasspathUrls, enableAssertions, childDelegation );
         this.modularClasspath = modularClasspath;
         this.testClasspathUrls = testClasspathUrls;
+        this.inprocClasspath = inprocClasspath;
     }
 
     @Override
@@ -63,4 +74,17 @@ public class ModularClasspathConfiguration extends AbstractPathConfiguration
     {
         return modularClasspath;
     }
+
+    public ClassLoader createMergedClassLoader()
+            throws SurefireExecutionException
+    {
+        Collection<String> modulePath = getModularClasspath().getModulePath();
+        return createMergedClassLoader( join( getInprocTestClasspath(), new Classpath( modulePath ) ) );
+    }
+
+    @Override
+    protected Classpath getInprocClasspath()
+    {
+        return inprocClasspath;
+    }
 }