From 0b96eda9bcabc1fc64dc01b00a8d017a6faf4b32 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Sat, 12 May 2012 12:44:23 +0200 Subject: [PATCH] correctly determine the path to compiler when starting build process --- .../compiler/CompileServerManager.java | 3 +- .../compiler/server/BuildManager.java | 28 ++++++++++++++----- .../jetbrains/jps/cmdline/BuildSession.java | 5 ++-- .../jps/server/ClasspathBootstrap.java | 10 +------ 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 519e55bd9cf9..7ac97854bead 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -643,7 +643,8 @@ public class CompileServerManager implements ApplicationComponent{ cmdLine.addParameter("-classpath"); - final List cp = ClasspathBootstrap.getCompileServerApplicationClasspath(); + final List cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(); + cp.add(ClasspathBootstrap.getResourcePath(systemCompiler.getClass())); // tools.jar cp.addAll(myClasspathManager.getCompileServerPluginsClasspath()); cmdLine.addParameter(classpathToString(cp)); 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 00206e02133a..694e701848f5 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -565,14 +565,10 @@ public class BuildManager implements ApplicationComponent{ } private Process launchBuildProcess(Project project, final int port, final UUID sessionId) throws ExecutionException { - // validate tools.jar presence - final JavaCompiler systemCompiler = ToolProvider.getSystemJavaCompiler(); - if (systemCompiler == null) { - throw new ExecutionException("No system java compiler is provided by the JRE. Make sure tools.jar is present in IntelliJ IDEA classpath."); - } // choosing sdk with which the build process should be run - Sdk projectJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); + final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); + Sdk projectJdk = internalJdk; final String versionString = projectJdk.getVersionString(); if (versionString != null) { JavaSdkVersion sdkVersion = ((JavaSdk)projectJdk.getSdkType()).getVersion(versionString); @@ -600,6 +596,23 @@ public class BuildManager implements ApplicationComponent{ } } + // validate tools.jar presence + final File compilerPath; + if (projectJdk.equals(internalJdk)) { + final JavaCompiler systemCompiler = ToolProvider.getSystemJavaCompiler(); + if (systemCompiler == null) { + throw new ExecutionException("No system java compiler is provided by the JRE. Make sure tools.jar is present in IntelliJ IDEA classpath."); + } + compilerPath = ClasspathBootstrap.getResourcePath(systemCompiler.getClass()); + } + else { + final String path = ((JavaSdk)projectJdk.getSdkType()).getToolsPath(projectJdk); + if (path == null) { + throw new ExecutionException("Cannot determine path to 'tools.jar' library for " + projectJdk.getName() + " (" + projectJdk.getHomePath() + ")"); + } + compilerPath = new File(path); + } + final GeneralCommandLine cmdLine = new GeneralCommandLine(); final String vmExecutablePath = ((JavaSdkType)projectJdk.getSdkType()).getVMExecutablePath(projectJdk); cmdLine.setExePath(vmExecutablePath); @@ -667,7 +680,8 @@ public class BuildManager implements ApplicationComponent{ cmdLine.addParameter("-classpath"); - final List cp = ClasspathBootstrap.getCompileServerApplicationClasspath(); + final List cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(); + cp.add(compilerPath); cp.addAll(myClasspathManager.getCompileServerPluginsClasspath()); cmdLine.addParameter(classpathToString(cp)); diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index 423decc28335..fc1b17756ee8 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -168,11 +168,12 @@ final class BuildSession implements Runnable, CanceledStatus { final Project project = loadProject(projectPath); final File dataStorageRoot = Utils.getDataStorageRoot(project); + final boolean inMemoryMappingsDelta = System.getProperty(GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION) != null; ProjectTimestamps projectTimestamps = null; BuildDataManager dataManager = null; try { projectTimestamps = new ProjectTimestamps(dataStorageRoot); - dataManager = new BuildDataManager(dataStorageRoot, true); + dataManager = new BuildDataManager(dataStorageRoot, inMemoryMappingsDelta); if (dataManager.versionDiffers()) { forceCleanCaches = true; msgHandler.processMessage(new CompilerMessage("build", BuildMessage.Kind.INFO, "Dependency data format has changed, project rebuild required")); @@ -190,7 +191,7 @@ final class BuildSession implements Runnable, CanceledStatus { forceCleanCaches = true; FileUtil.delete(dataStorageRoot); projectTimestamps = new ProjectTimestamps(dataStorageRoot); - dataManager = new BuildDataManager(dataStorageRoot, true); + dataManager = new BuildDataManager(dataStorageRoot, inMemoryMappingsDelta); // second attempt succeded msgHandler.processMessage(new CompilerMessage("build", BuildMessage.Kind.INFO, "Project rebuild forced: " + e.getMessage())); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java index 1279c09b17b2..59627572644e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java @@ -86,7 +86,7 @@ public class ClasspathBootstrap { private ClasspathBootstrap() { } - public static List getCompileServerApplicationClasspath() { + public static List getBuildProcessApplicationClasspath() { final Set cp = new LinkedHashSet(); cp.add(getResourcePath(Server.class)); for (String path : PathManager.getUtilClassPath()) { cp.add(new File(path)); } // util @@ -114,14 +114,6 @@ public class ClasspathBootstrap { catch (Throwable ignored) { } - final JavaCompiler systemCompiler = ToolProvider.getSystemJavaCompiler(); - if (systemCompiler != null) { - try { - cp.add(getResourcePath(systemCompiler.getClass())); // tools.jar - } - catch (Throwable ignored) { - } - } return new ArrayList(cp); }