Re: [maven-surefire] 01/01: [SUREFIRE-1531] Option to disable Java 9 modules

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: [maven-surefire] 01/01: [SUREFIRE-1531] Option to disable Java 9 modules

Tibor Digana
Hi Robert,
Sorry I have not seen your email before.
" useModulePath " sounds good. I will rename the property if no objections.

BR
Tibor

On Sat, Nov 17, 2018 at 1:00 PM Robert Scholte <[hidden email]> wrote:

> On Sat, 17 Nov 2018 11:34:43 +0100, <[hidden email]> wrote:
>
> > 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 f333b7d9e89ddfe086fd1cb930df0f77a0edbc96
> > Author: Lukas Krecan <[hidden email]>
> > 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
> > +++++++++++++++-------
> >  .../AbstractSurefireMojoJava7PlusTest.java         | 12 +++++
> >  .../plugin/surefire/AbstractSurefireMojoTest.java  | 12 +++++
> >  .../maven/plugin/surefire/MojoMocklessTest.java    | 12 +++++
> >  .../maven/plugin/surefire/SurefirePlugin.java      | 23 ++++++++++
> >  6 files changed, 119 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;
> > +
>
>
> I think we should avoid referring to Jigsaw, that was the name of the
> project.
> I'd prefer useJavaModules instead, or maybe even useModulePath.
>
>
> >      @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-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
>
> >
> b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
> > index f73124a..b3dc339 100644
> > ---
> >
> a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
> > +++
> >
> b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoJava7PlusTest.java
> > @@ -560,6 +560,18 @@ public class AbstractSurefireMojoJava7PlusTest
> >          }
> >         @Override
> > +        protected boolean useJigsawModules()
> > +        {
> > +            return false;
> > +        }
> > +
> > +        @Override
> > +        protected void setUseJigsawModules( boolean useJigsawModules )
> > +        {
> > +
> > +        }
> > +
> > +        @Override
> >          protected Artifact getMojoArtifact()
> >          {
> >              return null;
> > 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 de62c60..8514269 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
> > @@ -705,6 +705,18 @@ public class AbstractSurefireMojoTest
> >          }
> >         @Override
> > +        protected boolean useJigsawModules()
> > +        {
> > +            return false;
> > +        }
> > +
> > +        @Override
> > +        protected void setUseJigsawModules( boolean useJigsawModules )
> > +        {
> > +
> > +        }
> > +
> > +        @Override
> >          protected Artifact getMojoArtifact()
> >          {
> >              return null;
> > diff --git
> >
> a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
>
> >
> b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
> > index 597527b..e555b00 100644
> > ---
> >
> a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
> > +++
> >
> b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/MojoMocklessTest.java
> > @@ -612,6 +612,18 @@ public class MojoMocklessTest
> >          }
> >         @Override
> > +        protected boolean useJigsawModules()
> > +        {
> > +            return false;
> > +        }
> > +
> > +        @Override
> > +        protected void setUseJigsawModules( boolean useJigsawModules )
> > +        {
> > +
> > +        }
> > +
> > +        @Override
> >          protected Artifact getMojoArtifact()
> >          {
> >              return null;
> > 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();
>