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 728a0a2b642a..ae135105052e 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -17,8 +17,10 @@ package com.intellij.compiler.server; import com.intellij.ProjectTopics; import com.intellij.compiler.CompilerConfiguration; +import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; import com.intellij.compiler.impl.CompilerUtil; +import com.intellij.compiler.impl.javaCompiler.BackendCompiler; import com.intellij.compiler.impl.javaCompiler.javac.JavacConfiguration; import com.intellij.compiler.server.impl.BuildProcessClasspathManager; import com.intellij.concurrency.JobScheduler; @@ -104,10 +106,10 @@ import org.jetbrains.jps.cmdline.BuildMain; import org.jetbrains.jps.cmdline.ClasspathBootstrap; import org.jetbrains.jps.incremental.Utils; import org.jetbrains.jps.model.java.JpsJavaSdkType; +import org.jetbrains.jps.model.java.compiler.JavaCompilers; 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; @@ -1180,13 +1182,13 @@ public class BuildManager implements Disposable { launcherCp.add(ClasspathBootstrap.getResourcePath(launcherClass)); launcherCp.addAll(BuildProcessClasspathManager.getLauncherClasspath(project)); launcherCp.add(compilerPath); - ClasspathBootstrap.appendJavaCompilerClasspath(launcherCp); + ClasspathBootstrap.appendJavaCompilerClasspath(launcherCp, shouldIncludeEclipseCompiler(projectConfig)); cmdLine.addParameter("-classpath"); cmdLine.addParameter(classpathToString(launcherCp)); - + cmdLine.addParameter(launcherClass.getName()); - final List cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(true); + final List cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(); cp.addAll(myClasspathManager.getBuildProcessPluginsClasspath(project)); if (isProfilingMode) { cp.add(new File(workDirectory, "yjp-controller-api-redist.jar").getPath()); @@ -1238,6 +1240,15 @@ public class BuildManager implements Disposable { return processHandler; } + private boolean shouldIncludeEclipseCompiler(CompilerConfiguration config) { + if (config instanceof CompilerConfigurationImpl) { + final BackendCompiler javaCompiler = ((CompilerConfigurationImpl)config).getDefaultCompiler(); + final String compilerId = javaCompiler != null? javaCompiler.getId() : null; + return JavaCompilers.ECLIPSE_ID.equals(compilerId) || JavaCompilers.ECLIPSE_EMBEDDED_ID.equals(compilerId); + } + return true; + } + public File getBuildSystemDirectory() { return new File(mySystemDirectory, SYSTEM_ROOT); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java index 5fefc7dff7ba..6bc76588b541 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java @@ -125,7 +125,7 @@ public class ClasspathBootstrap { private ClasspathBootstrap() { } - public static List getBuildProcessApplicationClasspath(boolean isLauncherUsed) { + public static List getBuildProcessApplicationClasspath() { final Set cp = ContainerUtil.newHashSet(); cp.add(getResourcePath(BuildMain.class)); @@ -147,10 +147,6 @@ public class ClasspathBootstrap { cp.addAll(getJavac8RefScannerClasspath()); //don't forget to update layoutCommunityJps() in layouts.gant accordingly - if (!isLauncherUsed) { - appendJavaCompilerClasspath(cp); - } - try { final Class cmdLineWrapper = Class.forName("com.intellij.rt.execution.CommandLineWrapper"); cp.add(getResourcePath(cmdLineWrapper)); // idea_rt.jar @@ -161,15 +157,17 @@ public class ClasspathBootstrap { return ContainerUtil.newArrayList(cp); } - public static void appendJavaCompilerClasspath(Collection cp) { + public static void appendJavaCompilerClasspath(Collection cp, boolean includeEcj) { final Class optimizedFileManagerClass = getOptimizedFileManagerClass(); if (optimizedFileManagerClass != null) { cp.add(getResourcePath(optimizedFileManagerClass)); // optimizedFileManager } - File file = EclipseCompilerTool.findEcjJarFile(); - if (file != null) { - cp.add(file.getAbsolutePath()); + if (includeEcj) { + File file = EclipseCompilerTool.findEcjJarFile(); + if (file != null) { + cp.add(file.getAbsolutePath()); + } } }