28
28
import java .nio .file .Paths ;
29
29
import java .nio .file .StandardCopyOption ;
30
30
import java .util .Arrays ;
31
-
31
+ import java . util . Optional ;
32
32
33
33
public class MavenInvokatorMavenTaskRunner implements MavenTaskRunner {
34
34
35
35
private static final Logger log = LoggerFactory .getLogger (MavenInvokatorMavenTaskRunner .class );
36
36
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"
39
39
+ " -XX:+TieredCompilation -XX:TieredStopAtLevel=1" ;
40
40
41
+ private static final Path WINDOWS_JAVA_DEFAULT_FOLDER = Paths .get ("C:\\ Program Files\\ Java" );
42
+
41
43
@ Override
42
44
public MavenExecutionResult exec (Path projectPath , String [] mavenArgs ) {
43
45
44
46
InvocationRequest request = new DefaultInvocationRequest ();
45
47
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
+
46
69
try {
47
70
String jdkhome = System .getenv ("jdkhome" );
48
71
if (jdkhome != null ) {
@@ -55,7 +78,6 @@ public MavenExecutionResult exec(Path projectPath, String[] mavenArgs) {
55
78
log .debug ("jdkhome variable not valid, skipping" , e );
56
79
}
57
80
58
-
59
81
String mavenHome = System .getenv ("M3_HOME" );
60
82
if (mavenHome == null ) {
61
83
mavenHome = System .getenv ("M2_HOME" );
@@ -83,16 +105,14 @@ public MavenExecutionResult exec(Path projectPath, String[] mavenArgs) {
83
105
InvocationResult result = null ;
84
106
request .setPomFile (projectPath .resolve ("pom.xml" ).toFile ());
85
107
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
+ });
96
116
97
117
request .setGoals (Arrays .asList (mavenArgs ));
98
118
@@ -155,7 +175,7 @@ static Path getConfigDirectory() {
155
175
configPath = Paths .get (appdata );
156
176
}
157
177
} 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)
159
179
String configEnv = System .getenv ("XDG_CONFIG_HOME" );
160
180
161
181
if (configEnv != null && configEnv .length () > 0 ) {
0 commit comments