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

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

commit 01dd0eac30dde407e0901a67bf550b436c7affe7
Author: Lukas Krecan <lu...@krecan.net>
AuthorDate: Sun Jul 1 08:54:22 2018 +0200

    [SUREFIRE-1531] Option to disable Java 9 modules
---
 .../maven/plugin/failsafe/IntegrationTestMojo.java | 23 ++++++++++
 .../plugin/surefire/AbstractSurefireMojo.java      | 53 +++++++++++++++-------
 .../maven/plugin/surefire/SurefirePlugin.java      | 23 ++++++++++
 3 files changed, 83 insertions(+), 16 deletions(-)

diff --git 
a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
 
b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
index 52f9052..42b4cc6 100644
--- 
a/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
+++ 
b/maven-failsafe-plugin/src/main/java/org/apache/maven/plugin/failsafe/IntegrationTestMojo.java
@@ -370,6 +370,17 @@ public class IntegrationTestMojo
     @Parameter( property = "failsafe.shutdown", defaultValue = "testset" )
     private String shutdown;
 
+    /**
+     * Disables Jigsaw (Java 9) modular path even if <i>module-info.java</i> 
is used in project.
+     * <br>
+     * Enabled by default.
+     * If enabled, <i>module-info.java</i> exists and executes with JDK 9+, 
modular path is used.
+     *
+     * @since 3.0.0-M2
+     */
+    @Parameter( property = "failsafe.useJigsawModules", defaultValue = "true" )
+    private boolean useJigsawModules;
+
     @Override
     protected int getRerunFailingTestsCount()
     {
@@ -801,6 +812,18 @@ public class IntegrationTestMojo
     }
 
     @Override
+    protected boolean useJigsawModules()
+    {
+        return useJigsawModules;
+    }
+
+    @Override
+    protected void setUseJigsawModules( boolean useJigsawModules )
+    {
+        this.useJigsawModules = useJigsawModules;
+    }
+
+    @Override
     protected final List<File> suiteXmlFiles()
     {
         return hasSuiteXmlFiles() ? Arrays.asList( suiteXmlFiles ) : 
Collections.<File>emptyList();
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 319f21d..4a1a213 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
@@ -104,6 +104,7 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 
+import static java.lang.Boolean.TRUE;
 import static java.lang.Thread.currentThread;
 import static java.util.Arrays.asList;
 import static java.util.Collections.addAll;
@@ -728,6 +729,9 @@ public abstract class AbstractSurefireMojo
     @Parameter( property = "dependenciesToScan" )
     private String[] dependenciesToScan;
 
+    /**
+     *
+     */
     @Component
     private ToolchainManager toolchainManager;
 
@@ -787,6 +791,10 @@ public abstract class AbstractSurefireMojo
 
     protected abstract String getReportSchemaLocation();
 
+    protected abstract boolean useJigsawModules();
+
+    protected abstract void setUseJigsawModules( boolean useJigsawModules );
+
     /**
      * This plugin MOJO artifact.
      *
@@ -954,7 +962,7 @@ public abstract class AbstractSurefireMojo
         if ( !getTestClassesDirectory().exists()
             && ( getDependenciesToScan() == null || 
getDependenciesToScan().length == 0 ) )
         {
-            if ( Boolean.TRUE.equals( getFailIfNoTests() ) )
+            if ( TRUE.equals( getFailIfNoTests() ) )
             {
                 throw new MojoFailureException( "No tests to run!" );
             }
@@ -1123,17 +1131,18 @@ public abstract class AbstractSurefireMojo
         RunOrderParameters runOrderParameters =
             new RunOrderParameters( getRunOrder(), getStatisticsFile( 
getConfigChecksum() ) );
 
+        Platform platform = PLATFORM.withJdkExecAttributesForTests( 
getEffectiveJvm() );
         if ( isNotForking() )
         {
             createCopyAndReplaceForkNumPlaceholder( effectiveProperties, 1 
).copyToSystemProperties();
 
             InPluginVMSurefireStarter surefireStarter =
-                createInprocessStarter( provider, classLoaderConfiguration, 
runOrderParameters, scanResult );
+                createInprocessStarter( provider, classLoaderConfiguration, 
runOrderParameters, scanResult, platform );
             return surefireStarter.runSuitesInProcess( scanResult );
         }
         else
         {
-            ForkConfiguration forkConfiguration = getForkConfiguration();
+            ForkConfiguration forkConfiguration = createForkConfiguration( 
platform );
             if ( getConsoleLogger().isDebugEnabled() )
             {
                 showMap( getEnvironmentVariables(), "environment variable" );
@@ -1144,7 +1153,7 @@ public abstract class AbstractSurefireMojo
             try
             {
                 forkStarter = createForkStarter( provider, forkConfiguration, 
classLoaderConfiguration,
-                                                       runOrderParameters, 
getConsoleLogger(), scanResult );
+                                                       runOrderParameters, 
getConsoleLogger(), scanResult, platform );
 
                 return forkStarter.run( effectiveProperties, scanResult );
             }
@@ -1231,6 +1240,13 @@ public abstract class AbstractSurefireMojo
         return new File( getClassesDirectory(), "module-info.class" );
     }
 
+    private boolean canExecuteProviderWithJigsaw( Platform platform )
+    {
+        return useJigsawModules()
+                && platform.getJdkExecAttributesForTests().isJava9AtLeast()
+                && existsModuleDescriptor();
+    }
+
     /**
      * Converts old TestNG configuration parameters over to new properties 
based configuration
      * method. (if any are defined the old way)
@@ -1683,18 +1699,18 @@ public abstract class AbstractSurefireMojo
 
     private StartupConfiguration createStartupConfiguration( @Nonnull 
ProviderInfo provider, boolean isInprocess,
                                                              @Nonnull 
ClassLoaderConfiguration classLoaderConfiguration,
-                                                             @Nonnull 
DefaultScanResult scanResult )
+                                                             @Nonnull 
DefaultScanResult scanResult,
+                                                             @Nonnull Platform 
platform )
         throws MojoExecutionException
     {
         try
         {
-            File moduleDescriptor = getModuleDescriptor();
             Set<Artifact> providerArtifacts = provider.getProviderClasspath();
             String providerName = provider.getProviderName();
-            if ( moduleDescriptor.exists() && !isInprocess )
+            if ( canExecuteProviderWithJigsaw( platform ) && !isInprocess )
             {
                 return newStartupConfigWithModularPath( 
classLoaderConfiguration, providerArtifacts, providerName,
-                        moduleDescriptor, scanResult );
+                        getModuleDescriptor(), scanResult );
             }
             else
             {
@@ -2107,11 +2123,11 @@ public abstract class AbstractSurefireMojo
     private ForkStarter createForkStarter( @Nonnull ProviderInfo provider, 
@Nonnull ForkConfiguration forkConfiguration,
                                            @Nonnull ClassLoaderConfiguration 
classLoaderConfiguration,
                                            @Nonnull RunOrderParameters 
runOrderParameters, @Nonnull ConsoleLogger log,
-                                           @Nonnull DefaultScanResult 
scanResult )
+                                           @Nonnull DefaultScanResult 
scanResult, @Nonnull Platform platform )
         throws MojoExecutionException, MojoFailureException
     {
         StartupConfiguration startupConfiguration =
-                createStartupConfiguration( provider, false, 
classLoaderConfiguration, scanResult );
+                createStartupConfiguration( provider, false, 
classLoaderConfiguration, scanResult, platform );
         String configChecksum = getConfigChecksum();
         StartupReportConfiguration startupReportConfiguration = 
getStartupReportConfiguration( configChecksum, true );
         ProviderConfiguration providerConfiguration = 
createProviderConfiguration( runOrderParameters );
@@ -2122,11 +2138,12 @@ public abstract class AbstractSurefireMojo
     private InPluginVMSurefireStarter createInprocessStarter( @Nonnull 
ProviderInfo provider,
                                                               @Nonnull 
ClassLoaderConfiguration classLoaderConfig,
                                                               @Nonnull 
RunOrderParameters runOrderParameters,
-                                                              @Nonnull 
DefaultScanResult scanResult )
+                                                              @Nonnull 
DefaultScanResult scanResult,
+                                                              @Nonnull 
Platform platform )
         throws MojoExecutionException, MojoFailureException
     {
         StartupConfiguration startupConfiguration =
-                createStartupConfiguration( provider, true, classLoaderConfig, 
scanResult );
+                createStartupConfiguration( provider, true, classLoaderConfig, 
scanResult, platform );
         String configChecksum = getConfigChecksum();
         StartupReportConfiguration startupReportConfiguration = 
getStartupReportConfiguration( configChecksum, false );
         ProviderConfiguration providerConfiguration = 
createProviderConfiguration( runOrderParameters );
@@ -2135,7 +2152,7 @@ public abstract class AbstractSurefireMojo
     }
 
     @Nonnull
-    private ForkConfiguration getForkConfiguration() throws 
MojoFailureException
+    private ForkConfiguration createForkConfiguration( Platform platform )
     {
         File tmpDir = getSurefireTempDir();
 
@@ -2143,9 +2160,7 @@ public abstract class AbstractSurefireMojo
 
         Classpath bootClasspath = getArtifactClasspath( shadeFire != null ? 
shadeFire : surefireBooterArtifact );
 
-        Platform platform = PLATFORM.withJdkExecAttributesForTests( 
getEffectiveJvm() );
-
-        if ( platform.getJdkExecAttributesForTests().isJava9AtLeast() && 
existsModuleDescriptor() )
+        if ( canExecuteProviderWithJigsaw( platform ) )
         {
             return new ModularClasspathForkConfiguration( bootClasspath,
                     tmpDir,
@@ -2414,6 +2429,7 @@ public abstract class AbstractSurefireMojo
         checksum.add( getForkedProcessExitTimeoutInSeconds() );
         checksum.add( getRerunFailingTestsCount() );
         checksum.add( getTempDir() );
+        checksum.add( useJigsawModules() );
         addPluginSpecificChecksumItems( checksum );
         return checksum.getSha1();
     }
@@ -3479,6 +3495,11 @@ public abstract class AbstractSurefireMojo
         this.dependenciesToScan = dependenciesToScan;
     }
 
+    public PluginDescriptor getPluginDescriptor()
+    {
+        return pluginDescriptor;
+    }
+
     public MavenProject getProject()
     {
         return project;
diff --git 
a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
 
b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
index 73ea01e..7fbbe20 100644
--- 
a/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
+++ 
b/maven-surefire-plugin/src/main/java/org/apache/maven/plugin/surefire/SurefirePlugin.java
@@ -349,6 +349,17 @@ public class SurefirePlugin
     @Parameter( property = "surefire.shutdown", defaultValue = "testset" )
     private String shutdown;
 
+    /**
+     * Disables Jigsaw (Java 9) modular path even if <i>module-info.java</i> 
is used in project.
+     * <br>
+     * Enabled by default.
+     * If enabled, <i>module-info.java</i> exists and executes with JDK 9+, 
modular path is used.
+     *
+     * @since 3.0.0-M2
+     */
+    @Parameter( property = "surefire.useJigsawModules", defaultValue = "true" )
+    private boolean useJigsawModules;
+
     @Override
     protected int getRerunFailingTestsCount()
     {
@@ -703,6 +714,18 @@ public class SurefirePlugin
     }
 
     @Override
+    protected boolean useJigsawModules()
+    {
+        return useJigsawModules;
+    }
+
+    @Override
+    protected void setUseJigsawModules( boolean useJigsawModules )
+    {
+        this.useJigsawModules = useJigsawModules;
+    }
+
+    @Override
     protected final List<File> suiteXmlFiles()
     {
         return hasSuiteXmlFiles() ? Arrays.asList( suiteXmlFiles ) : 
Collections.<File>emptyList();

Reply via email to