diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 18ab048233b4..9013850fe851 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -104,8 +104,7 @@ import org.jetbrains.jps.cmdline.ClasspathBootstrap; import org.jetbrains.jps.incremental.Utils; import org.jetbrains.jps.model.serialization.JpsGlobalLoader; -import javax.tools.JavaCompiler; -import javax.tools.ToolProvider; +import javax.tools.*; import java.awt.*; import java.io.File; import java.io.IOException; @@ -951,7 +950,10 @@ public class BuildManager implements ApplicationComponent{ } cmdLine.addParameter("-Djava.awt.headless=true"); - cmdLine.addParameter("-Djava.endorsed.dirs=\"\""); // turn off all jre customizations for predictable behaviour + if (sdkVersion != null && sdkVersion.ordinal() < JavaSdkVersion.JDK_1_9.ordinal()) { + //-Djava.endorsed.dirs is not supported in JDK 9+, may result in abnormal process termination + cmdLine.addParameter("-Djava.endorsed.dirs=\"\""); // turn off all jre customizations for predictable behaviour + } if (IS_UNIT_TEST_MODE) { cmdLine.addParameter("-Dtest.mode=true"); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java index 751b74b459e2..ed5bf0270f5f 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java @@ -41,7 +41,8 @@ import java.util.concurrent.atomic.AtomicBoolean; * Date: 1/21/12 */ public class JavacMain { - private static final boolean IS_VM_6_VERSION = System.getProperty("java.version", "1.6").contains("1.6"); + private static final String JAVA_VERSION = System.getProperty("java.version", ""); + //private static final boolean ECLIPSE_COMPILER_SINGLE_THREADED_MODE = Boolean.parseBoolean(System.getProperty("jdt.compiler.useSingleThread", "false")); private static final Set FILTERED_OPTIONS = new HashSet(Arrays.asList( "-d", "-classpath", "-cp", "-bootclasspath" @@ -75,7 +76,9 @@ public class JavacMain { final List transformers = getSourceTransformers(); final boolean usingJavac = compilingTool instanceof JavacCompilerTool; - final JavacFileManager fileManager = new JavacFileManager(new ContextImpl(compiler, diagnosticConsumer, outputSink, canceledStatus, usingJavac), transformers); + final JavacFileManager fileManager = new JavacFileManager( + new ContextImpl(compiler, diagnosticConsumer, outputSink, canceledStatus, canUseOptimizedFileManager(compilingTool)), transformers + ); if (!platformClasspath.isEmpty()) { // for javac6 this will prevent lazy initialization of Paths.bootClassPathRtJar @@ -188,6 +191,12 @@ public class JavacMain { return false; } + private static boolean canUseOptimizedFileManager(JavaCompilingTool compilingTool) { + // since java 9 internal API's used by the optimizedFileManager have changed + return compilingTool instanceof JavacCompilerTool && + (JAVA_VERSION.contains("1.6") || JAVA_VERSION.contains("1.7") || JAVA_VERSION.contains("1.8")); + } + private static void handleCancelException(DiagnosticOutputConsumer diagnosticConsumer) { diagnosticConsumer.report(new PlainMessageDiagnostic(Diagnostic.Kind.OTHER, "Compilation was canceled")); }