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 ee3106a..6fd5df4 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
@@ -2537,6 +2537,10 @@
             }
 
             File jdkHome = toJdkHomeFromJvmExec( pathToJava.getPath() );
+            if ( !environmentVariables.containsKey( "JAVA_HOME" ) )
+            {
+                environmentVariables.put( "JAVA_HOME", jdkHome.getAbsolutePath() );
+            }
             BigDecimal version = jdkHome == null ? null : toJdkVersionFromReleaseFile( jdkHome );
             boolean javaVersion9 = version == null ? isJava9AtLeast( pathToJava.getPath() ) : isJava9AtLeast( version );
             return new JdkAttributes( pathToJava.getPath(), javaVersion9 );
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 fc9a6fc..a2a8795 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
@@ -62,7 +62,6 @@
 
 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;
@@ -97,6 +96,7 @@
 import static org.powermock.api.mockito.PowerMockito.spy;
 import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
 import static org.powermock.reflect.Whitebox.invokeMethod;
+import static org.powermock.reflect.Whitebox.setInternalState;
 
 /**
  * Test for {@link AbstractSurefireMojo}.
@@ -2179,9 +2179,12 @@
 
         public void setToolchain( Toolchain toolchain ) throws Exception
         {
-            Field toolchainField = AbstractSurefireMojo.class.getDeclaredField( "toolchain" );
-            toolchainField.setAccessible( true );
-            toolchainField.set( this, toolchain );
+            setInternalState( this, "toolchain", toolchain );
+        }
+
+        public void setJvm( String jvm ) throws Exception
+        {
+            setInternalState( this, "jvm", jvm );
         }
     }
 
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 5fd8101..64437fb 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
@@ -21,6 +21,7 @@
 
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.surefire.shared.io.FilenameUtils;
 import org.apache.maven.toolchain.Toolchain;
 import org.apache.maven.toolchain.ToolchainManager;
 import org.apache.maven.toolchain.java.DefaultJavaToolChain;
@@ -31,6 +32,7 @@
 import org.powermock.core.classloader.annotations.PrepareForTest;
 import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.io.File;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +41,7 @@
 import static java.util.Collections.singletonList;
 import static java.util.Collections.singletonMap;
 import static junit.framework.TestCase.assertNull;
+import static org.apache.maven.surefire.booter.SystemUtils.toJdkHomeFromJre;
 import static org.fest.assertions.Assertions.assertThat;
 import static org.powermock.api.mockito.PowerMockito.mock;
 import static org.powermock.api.mockito.PowerMockito.mockStatic;
@@ -145,15 +148,77 @@
     {
         AbstractSurefireMojoTest.Mojo mojo = new AbstractSurefireMojoTest.Mojo();
         DefaultJavaToolChain toolchain = mock( DefaultJavaToolChain.class );
-        when( toolchain.findTool( "java" ) ).thenReturn( "/some/path/bin/java" );
+        when( toolchain.findTool( "java" ) ).thenReturn( "/path/from/toolchain" );
         when( toolchain.getJavaHome() ).thenReturn( "/some/path" );
         mojo.setToolchain( toolchain );
 
         assertThat( mojo.getEnvironmentVariables() ).isEmpty();
-        invokeMethod( mojo, "getEffectiveJvm" );
+        JdkAttributes effectiveJvm = invokeMethod( mojo, "getEffectiveJvm" );
         assertThat( mojo.getEnvironmentVariables() ).includes( MapAssert.entry( "JAVA_HOME", "/some/path" ) );
+        assertThat( effectiveJvm.getJvmExecutable() ).contains( "/path/from/toolchain" );
     }
 
+    @Test
+    public void shouldNotChangeJavaHomeFromToolchainIfAlreadySet() throws Exception
+    {
+        AbstractSurefireMojoTest.Mojo mojo = new AbstractSurefireMojoTest.Mojo();
+        mojo.setEnvironmentVariables( singletonMap( "JAVA_HOME", "/already/set/path" ) );
+
+        DefaultJavaToolChain toolchain = mock( DefaultJavaToolChain.class );
+        when( toolchain.findTool( "java" ) ).thenReturn( "/path/from/toolchain" );
+        when( toolchain.getJavaHome() ).thenReturn( "/some/path" );
+        mojo.setToolchain( toolchain );
+
+        JdkAttributes effectiveJvm = invokeMethod( mojo, "getEffectiveJvm" );
+        assertThat( mojo.getEnvironmentVariables() ).includes( MapAssert.entry( "JAVA_HOME", "/already/set/path" ) );
+        assertThat( effectiveJvm.getJvmExecutable() ).contains( "/path/from/toolchain" );
+    }
+
+    /**
+     * Ensures that the environmentVariables map for launching a test jvm
+     * contains a jvm parameter-driven entry when jvm is set.
+     */
+    @Test
+    public void shouldChangeJavaHomeFromJvm() throws Exception
+    {
+        AbstractSurefireMojoTest.Mojo mojo = new AbstractSurefireMojoTest.Mojo();
+
+        File currentJdkHome = toJdkHomeFromJre();
+        String javaExecutablePath = FilenameUtils.concat(
+            currentJdkHome.getAbsolutePath(), "bin/java" );
+
+        mojo.setJvm( javaExecutablePath );
+
+        assertThat( mojo.getEnvironmentVariables() ).isEmpty();
+        JdkAttributes effectiveJvm = invokeMethod( mojo, "getEffectiveJvm" );
+        assertThat( mojo.getEnvironmentVariables() ).
+            includes( MapAssert.entry( "JAVA_HOME", currentJdkHome.getAbsolutePath() ) );
+        assertThat( effectiveJvm.getJvmExecutable() ).contains( javaExecutablePath );
+    }
+
+    /**
+     * Ensures that users can manually configure a value for JAVA_HOME
+     * and we will not override it
+     */
+    @Test
+    public void shouldNotChangeJavaHomeFromJvmIfAlreadySet() throws Exception
+    {
+        AbstractSurefireMojoTest.Mojo mojo = new AbstractSurefireMojoTest.Mojo();
+        mojo.setEnvironmentVariables( singletonMap( "JAVA_HOME", "/already/set/path" ) );
+
+        File currentJdkHome = toJdkHomeFromJre();
+        String javaExecutablePath = FilenameUtils.concat(
+            currentJdkHome.getAbsolutePath(), "bin/java" );
+
+        mojo.setJvm( javaExecutablePath );
+
+        JdkAttributes effectiveJvm = invokeMethod( mojo, "getEffectiveJvm" );
+        assertThat( mojo.getEnvironmentVariables() ).
+            includes( MapAssert.entry( "JAVA_HOME", "/already/set/path" ) );
+        assertThat( effectiveJvm.getJvmExecutable() ).contains( javaExecutablePath );
+    }
+
+
 
     /**
      * Mocks a ToolchainManager
