From 0fdd1ef8dadf1658acd78ad1773f7600b26a3c25 Mon Sep 17 00:00:00 2001 From: Eldar Abusalimov Date: Mon, 2 Nov 2020 18:05:52 +0300 Subject: [PATCH] jps: Revert creating an artifact, construct classpath manually instead GitOrigin-RevId: 0430b42f94907c2d6abcc6c6b882af5bff65d0c5 --- .idea/artifacts/jps_javac_rt_rpc.xml | 9 ---- .../CommunityStandaloneJpsBuilder.groovy | 5 ++- .../jps/cmdline/ClasspathBootstrap.java | 44 ++++++++++++++++--- .../intellij/build/JavaPluginLayout.groovy | 3 +- 4 files changed, 44 insertions(+), 17 deletions(-) delete mode 100644 .idea/artifacts/jps_javac_rt_rpc.xml 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",