diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ExternalProcessUtil.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ExternalProcessUtil.java index c8d7cf399aa3..dd4f68975961 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ExternalProcessUtil.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ExternalProcessUtil.java @@ -8,6 +8,7 @@ import org.jetbrains.jps.cmdline.ClasspathBootstrap; import java.io.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -35,7 +36,7 @@ public class ExternalProcessUtil { List bootClasspath, List classpath, List vmParams, - List programParams) { + List programParams, final boolean useCommandLineWrapper) { final List cmdLine = new ArrayList(); cmdLine.add(javaExecutable); @@ -50,33 +51,40 @@ public class ExternalProcessUtil { } if (!classpath.isEmpty()) { - File classpathFile = null; - final Class wrapperClass = getCommandLineWrapperClass(); - if (wrapperClass != null) { - try { - classpathFile = FileUtil.createTempFile("classpath", null); - final PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(classpathFile))); + List commandLineWrapperArgs = null; + if (useCommandLineWrapper) { + final Class wrapperClass = getCommandLineWrapperClass(); + if (wrapperClass != null) { try { - for (String path : classpath) { - writer.println(path); + File classpathFile = FileUtil.createTempFile("classpath", null); + final PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(classpathFile))); + try { + for (String path : classpath) { + writer.println(path); + } } + finally { + writer.close(); + } + commandLineWrapperArgs = Arrays.asList( + "-classpath", + ClasspathBootstrap.getResourcePath(wrapperClass).getPath(), + wrapperClass.getName(), + classpathFile.getAbsolutePath() + ); } - finally { - writer.close(); + catch (IOException ex) { + LOG.info("Error starting " + mainClass + "; Classpath wrapper will not be used: ", ex); } } - catch (IOException ex) { - LOG.info("Error starting " + mainClass + "; Classpath wrapper will not be used: ", ex); + else { + LOG.info("CommandLineWrapper class not found, classpath wrapper will not be used"); } } // classpath - if (classpathFile != null) { - cmdLine.add("-classpath"); - final File wrapperClasspath = ClasspathBootstrap.getResourcePath(wrapperClass); - cmdLine.add(wrapperClasspath.getPath()); - cmdLine.add(wrapperClass.getName()); - cmdLine.add(classpathFile.getAbsolutePath()); + if (commandLineWrapperArgs != null) { + cmdLine.addAll(commandLineWrapperArgs); } else { cmdLine.add("-classpath"); diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java index 026c848115e6..fdf3b5cbdb15 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java @@ -371,7 +371,7 @@ public class AndroidDexBuilder extends TargetBuilder commandLine = ExternalProcessUtil .buildJavaCommandLine(JpsJavaSdkType.getJavaExecutable((JpsSdk)javaSdk.getProperties()), AndroidDxRunner.class.getName(), - Collections.emptyList(), classPath, vmOptions, programParamList); + Collections.emptyList(), classPath, vmOptions, programParamList, true); LOG.info(AndroidCommonUtils.command2string(commandLine)); diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java index 8de6cb2c50ac..846d79ce3009 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java @@ -150,7 +150,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { "-Dfile.encoding=" + System.getProperty("file.encoding")/*, "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5239"*/), Arrays.asList(myForStubs ? "stubs" : "groovyc", - tempFile.getPath()) + tempFile.getPath()), true ); final Process process = Runtime.getRuntime().exec(ArrayUtil.toStringArray(cmd));