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 2020/04/28 06:49:14 UTC

[maven-surefire] branch master updated: [SUREFIRE-1783] Fork JVM defined by Toolchain should not inherit JAVA_HOME from Maven process

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 8fbb614  [SUREFIRE-1783] Fork JVM defined by Toolchain should not inherit JAVA_HOME from Maven process
8fbb614 is described below

commit 8fbb614652682c81c8716150712e19a721082aab
Author: akomakom <ak...@users.noreply.github.com>
AuthorDate: Tue Apr 28 02:49:05 2020 -0400

    [SUREFIRE-1783] Fork JVM defined by Toolchain should not inherit JAVA_HOME from Maven process
---
 .../maven/plugin/surefire/AbstractSurefireMojo.java | 10 ++++++++++
 .../plugin/surefire/AbstractSurefireMojoTest.java   |  9 +++++++++
 .../AbstractSurefireMojoToolchainsTest.java         | 21 +++++++++++++++++++++
 3 files changed, 40 insertions(+)

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 8a0cd0a..ee3106a 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
@@ -89,6 +89,7 @@ import org.apache.maven.surefire.util.RunOrder;
 import org.apache.maven.toolchain.DefaultToolchain;
 import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
+import org.apache.maven.toolchain.java.DefaultJavaToolChain;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.languages.java.jpms.LocationManager;
 import org.codehaus.plexus.languages.java.jpms.ResolvePathsRequest;
@@ -2555,6 +2556,15 @@ public abstract class AbstractSurefireMojo
                                              || defaultToolchain.matchesRequirements( JAVA_9_MATCHER_OLD_NOTATION );
                 }
 
+                if ( toolchain instanceof DefaultJavaToolChain )
+                {
+                    DefaultJavaToolChain defaultJavaToolChain = (DefaultJavaToolChain) toolchain;
+                    if ( !environmentVariables.containsKey( "JAVA_HOME" ) )
+                    {
+                        environmentVariables.put( "JAVA_HOME", defaultJavaToolChain.getJavaHome() );
+                    }
+                }
+
                 if ( !javaVersion9 )
                 {
                     javaVersion9 = isJava9AtLeast( jvmToUse );
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 0553de7..fc9a6fc 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
@@ -44,6 +44,7 @@ import org.apache.maven.surefire.booter.Classpath;
 import org.apache.maven.surefire.booter.StartupConfiguration;
 import org.apache.maven.surefire.extensions.ForkNodeFactory;
 import org.apache.maven.surefire.suite.RunResult;
+import org.apache.maven.toolchain.Toolchain;
 import org.codehaus.plexus.logging.Logger;
 import org.junit.Before;
 import org.junit.Rule;
@@ -61,6 +62,7 @@ import org.powermock.modules.junit4.PowerMockRunner;
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -2174,6 +2176,13 @@ public class AbstractSurefireMojoTest
         {
 
         }
+
+        public void setToolchain( Toolchain toolchain ) throws Exception
+        {
+            Field toolchainField = AbstractSurefireMojo.class.getDeclaredField( "toolchain" );
+            toolchainField.setAccessible( true );
+            toolchainField.set( this, toolchain );
+        }
     }
 
     private static File mockFile( String absolutePath )
diff --git a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
index 7589718..5fd8101 100644
--- a/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
+++ b/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/AbstractSurefireMojoToolchainsTest.java
@@ -23,6 +23,8 @@ import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
+import org.apache.maven.toolchain.java.DefaultJavaToolChain;
+import org.fest.assertions.MapAssert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
@@ -135,6 +137,25 @@ public class AbstractSurefireMojoToolchainsTest
     }
 
     /**
+     * Ensures that the environmentVariables map for launching a test jvm
+     * contains a Toolchain-driven entry when toolchain is set.
+     */
+    @Test
+    public void shouldChangeJavaHomeFromToolchain() throws Exception
+    {
+        AbstractSurefireMojoTest.Mojo mojo = new AbstractSurefireMojoTest.Mojo();
+        DefaultJavaToolChain toolchain = mock( DefaultJavaToolChain.class );
+        when( toolchain.findTool( "java" ) ).thenReturn( "/some/path/bin/java" );
+        when( toolchain.getJavaHome() ).thenReturn( "/some/path" );
+        mojo.setToolchain( toolchain );
+
+        assertThat( mojo.getEnvironmentVariables() ).isEmpty();
+        invokeMethod( mojo, "getEffectiveJvm" );
+        assertThat( mojo.getEnvironmentVariables() ).includes( MapAssert.entry( "JAVA_HOME", "/some/path" ) );
+    }
+
+
+    /**
      * Mocks a ToolchainManager
      */
     public static final class MockToolchainManager extends MockToolchainManagerMaven32