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;
+ }
}