diff --git a/.idea/artifacts/jps_javac_rt_rpc.xml b/.idea/artifacts/jps_javac_rt_rpc.xml
deleted file mode 100644
index 047303b8581a..000000000000
--- a/.idea/artifacts/jps_javac_rt_rpc.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- $PROJECT_DIR$/out/artifacts/jps_javac_rt_rpc
-
-
-
-
-
-
\ No newline at end of file
diff --git a/build/groovy/org/jetbrains/intellij/build/CommunityStandaloneJpsBuilder.groovy b/build/groovy/org/jetbrains/intellij/build/CommunityStandaloneJpsBuilder.groovy
index ae2867f997c2..592baddd85d4 100644
--- a/build/groovy/org/jetbrains/intellij/build/CommunityStandaloneJpsBuilder.groovy
+++ b/build/groovy/org/jetbrains/intellij/build/CommunityStandaloneJpsBuilder.groovy
@@ -53,7 +53,10 @@ class CommunityStandaloneJpsBuilder {
module("intellij.platform.jps.build.javac.rt")
}
dir("rt") {
- artifact("jps-javac-rt-rpc")
+ jar("jps-javac-rt-rpc.jar") {
+ module("intellij.platform.jps.build.javac.rt.rpc")
+ }
+ moduleLibrary("intellij.platform.jps.build.javac.rt.rpc", "protobuf-java6")
}
//layout of groovy jars must be consistent with GroovyBuilder.getGroovyRtRoots method
jar("groovy-jps.jar") { module("intellij.groovy.jps") }
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 e47fbc0069ec..05ae9ea76366 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java
@@ -19,6 +19,7 @@ import io.netty.handler.codec.protobuf.ProtobufDecoder;
import io.netty.resolver.AddressResolverGroup;
import io.netty.util.NetUtil;
import net.n3.nanoxml.IXMLBuilder;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.aether.ArtifactRepositoryManager;
import org.jetbrains.jps.builders.impl.java.EclipseCompilerTool;
import org.jetbrains.jps.builders.java.JavaCompilingTool;
@@ -33,7 +34,9 @@ import org.jetbrains.org.objectweb.asm.ClassWriter;
import javax.tools.*;
import java.io.File;
+import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.*;
/**
@@ -52,7 +55,13 @@ public final class ClasspathBootstrap {
ProtobufDecoder.class, // netty codec
};
- private static final String EXTERNAL_JAVAC_JAR_ARTIFACT_NAME = "jps-javac-rt-rpc";
+
+ private static final String DEFAULT_MAVEN_REPOSITORY_PATH = ".m2/repository";
+ private static final String PROTOBUF_JAVA6_VERSION = "3.5.1";
+ private static final String PROTOBUF_JAVA6_JAR_NAME = "protobuf-java-" + PROTOBUF_JAVA6_VERSION + ".jar";
+
+ private static final String EXTERNAL_JAVAC_MODULE_NAME = "intellij.platform.jps.build.javac.rt.rpc";
+ private static final String EXTERNAL_JAVAC_JAR_NAME = "jps-javac-rt-rpc.jar";
public static List getBuildProcessApplicationClasspath() {
final Set cp = new HashSet<>();
@@ -103,6 +112,7 @@ public final class ClasspathBootstrap {
public static List getExternalJavacProcessClasspath(String sdkHome, JavaCompilingTool compilingTool) {
final Set cp = new LinkedHashSet<>();
+ cp.add(getResourceFile(ExternalJavacProcess.class)); // self
cp.add(getResourceFile(JavacReferenceCollector.class)); // jps-javac-extension library
// util
@@ -113,11 +123,7 @@ public final class ClasspathBootstrap {
for (Class> aClass : COMMON_REQUIRED_CLASSES) {
cp.add(getResourceFile(aClass));
}
- String externalJavacClassesRoot = getResourcePath(ExternalJavacProcess.class);
- cp.add(new File(externalJavacClassesRoot));
- Path jarArtifactPath = PathManager.getJarArtifactPath(externalJavacClassesRoot,
- EXTERNAL_JAVAC_JAR_ARTIFACT_NAME);
- cp.add(jarArtifactPath.toFile());
+ addExternalJavacRpcClasspath(cp);
try {
final Class> cmdLineWrapper = Class.forName("com.intellij.rt.execution.CommandLineWrapper");
@@ -170,6 +176,32 @@ public final class ClasspathBootstrap {
return new ArrayList<>(cp);
}
+ private static void addExternalJavacRpcClasspath(@NotNull Collection cp) {
+ Path rootPath = Paths.get(getResourcePath(ExternalJavacProcess.class));
+ if (Files.isRegularFile(rootPath)) {
+ // running regular installation
+ Path rtDirPath = rootPath.resolveSibling("rt");
+ cp.add(rtDirPath.resolve(EXTERNAL_JAVAC_JAR_NAME).toFile());
+ cp.add(rtDirPath.resolve(PROTOBUF_JAVA6_JAR_NAME).toFile());
+ }
+ else {
+ // running from sources or on the build server
+ cp.add(rootPath.resolveSibling(EXTERNAL_JAVAC_MODULE_NAME).toFile());
+
+ // take the library from the local maven repository
+ File localRepositoryDir = getMavenLocalRepositoryDir();
+ File protobufJava6File = new File(FileUtil.join(localRepositoryDir.getAbsolutePath(),
+ "com", "google", "protobuf", "protobuf-java", PROTOBUF_JAVA6_VERSION,
+ PROTOBUF_JAVA6_JAR_NAME));
+ cp.add(protobufJava6File);
+ }
+ }
+
+ private static @NotNull File getMavenLocalRepositoryDir() {
+ final String userHome = System.getProperty("user.home", null);
+ return userHome != null ? new File(userHome, DEFAULT_MAVEN_REPOSITORY_PATH) : new File(DEFAULT_MAVEN_REPOSITORY_PATH);
+ }
+
public static String getResourcePath(Class> aClass) {
return PathManager.getResourceRoot(aClass, "/" + aClass.getName().replace('.', '/') + ".class");
}
diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/JavaPluginLayout.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/JavaPluginLayout.groovy
index 7cf2e95bb304..4a5eb78c55f3 100644
--- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/JavaPluginLayout.groovy
+++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/JavaPluginLayout.groovy
@@ -20,7 +20,8 @@ class JavaPluginLayout {
withModule("intellij.java.resources.en", "resources.jar")
// JavacRemoteProto generated against protobuf-java6; don't let it sneak into the IDE classpath and shadow its JavacRemoteProto.
- withArtifact("jps-javac-rt-rpc", "rt")
+ withModule("intellij.platform.jps.build.javac.rt.rpc", "rt/jps-javac-rt-rpc.jar")
+ withModuleLibrary("protobuf-java6", "intellij.platform.jps.build.javac.rt.rpc", "rt")
["intellij.java.compiler.antTasks",
"intellij.java.guiForms.compiler",