2828import java .nio .file .Paths ;
2929import java .nio .file .StandardCopyOption ;
3030import java .util .Arrays ;
31-
31+ import java . util . Optional ;
3232
3333public class MavenInvokatorMavenTaskRunner implements MavenTaskRunner {
3434
3535 private static final Logger log = LoggerFactory .getLogger (MavenInvokatorMavenTaskRunner .class );
3636
37- private static final String MAVEN_OPTS =
38- "-Dmaven.compiler.source=1.8 -Dmaven.compiler.target=1.8"
37+ private static final String MAVEN_OPTS = "-Dmaven.compiler.source=1.8 "
38+ + " -Dmaven.compiler.target=1.8"
3939 + " -XX:+TieredCompilation -XX:TieredStopAtLevel=1" ;
4040
41+ private static final Path WINDOWS_JAVA_DEFAULT_FOLDER = Paths .get ("C:\\ Program Files\\ Java" );
42+
4143 @ Override
4244 public MavenExecutionResult exec (Path projectPath , String [] mavenArgs ) {
4345
4446 InvocationRequest request = new DefaultInvocationRequest ();
4547 request .setMavenOpts (MAVEN_OPTS );
48+
49+ try {
50+ String javaHome = System .getenv ("JAVA_HOME" );
51+ if (SystemUtils .IS_OS_WINDOWS
52+ && (javaHome == null || javaHome .trim ().isEmpty ()
53+ || !Files .exists (Paths .get (javaHome .trim ())))) {
54+ String currentJava = System .getProperty ("java.version" ).trim ();
55+ Optional <Path > foundHome = Files .list (WINDOWS_JAVA_DEFAULT_FOLDER )
56+ .filter (Files ::isDirectory )
57+ .filter (path -> {
58+ return path .getFileName ().toString ().contains (currentJava );
59+ }).findAny ();
60+ if (foundHome .isPresent ()) {
61+ Path home = foundHome .get ();
62+ request .setJavaHome (home .toFile ());
63+ }
64+ }
65+ } catch (Exception e ) {
66+ log .debug ("Could not fix java home" , e );
67+ }
68+
4669 try {
4770 String jdkhome = System .getenv ("jdkhome" );
4871 if (jdkhome != null ) {
@@ -55,7 +78,6 @@ public MavenExecutionResult exec(Path projectPath, String[] mavenArgs) {
5578 log .debug ("jdkhome variable not valid, skipping" , e );
5679 }
5780
58-
5981 String mavenHome = System .getenv ("M3_HOME" );
6082 if (mavenHome == null ) {
6183 mavenHome = System .getenv ("M2_HOME" );
@@ -83,16 +105,14 @@ public MavenExecutionResult exec(Path projectPath, String[] mavenArgs) {
83105 InvocationResult result = null ;
84106 request .setPomFile (projectPath .resolve ("pom.xml" ).toFile ());
85107 request .setBaseDirectory (projectPath .toFile ());
86- request .setOutputHandler (
87- line -> {
88- log .info ("MavenInvokator: {}" , line );
89- out .println (line );
90- });
91- request .setErrorHandler (
92- line -> {
93- log .info ("MavenInvokator: {}" , line );
94- err .println (line );
95- });
108+ request .setOutputHandler (line -> {
109+ log .info ("MavenInvokator: {}" , line );
110+ out .println (line );
111+ });
112+ request .setErrorHandler (line -> {
113+ log .info ("MavenInvokator: {}" , line );
114+ err .println (line );
115+ });
96116
97117 request .setGoals (Arrays .asList (mavenArgs ));
98118
@@ -155,7 +175,7 @@ static Path getConfigDirectory() {
155175 configPath = Paths .get (appdata );
156176 }
157177 } else {
158- //Assume we're using Unix (Linux, Mac OS X or *BSD)
178+ // Assume we're using Unix (Linux, Mac OS X or *BSD)
159179 String configEnv = System .getenv ("XDG_CONFIG_HOME" );
160180
161181 if (configEnv != null && configEnv .length () > 0 ) {
0 commit comments