diff --git a/build/.gitignore b/build/.gitignore
index de4c555304d0..60660d4da867 100644
--- a/build/.gitignore
+++ b/build/.gitignore
@@ -1,5 +1,6 @@
/kotlinc/
/jdk/
/download/
+/jps-bootstrap-work/
kotlin-plugin*.zip
dependencies/buildSrc/build
diff --git a/build/full_updater.cmd b/build/full_updater.cmd
index 228902cc7a83..4fd194585690 100755
--- a/build/full_updater.cmd
+++ b/build/full_updater.cmd
@@ -4,8 +4,8 @@ GOTO :CMDSCRIPT
::CMDLITERAL
set -eux
-exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build FullUpdaterBuildTarget
+exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$(cd "$(dirname "$0")"; pwd)/.." intellij.idea.community.build FullUpdaterBuildTarget
:CMDSCRIPT
-call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build FullUpdaterBuildTarget
+call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0\.." intellij.idea.community.build FullUpdaterBuildTarget
EXIT /B %ERRORLEVEL%
diff --git a/build/intellij.idea.community.build.iml b/build/intellij.idea.community.build.iml
index 548c78a88147..593480b8a2c5 100644
--- a/build/intellij.idea.community.build.iml
+++ b/build/intellij.idea.community.build.iml
@@ -11,6 +11,7 @@
+
diff --git a/build/updateFromSources.cmd b/build/updateFromSources.cmd
index 1463121ebe6f..a9ed2910bdb3 100755
--- a/build/updateFromSources.cmd
+++ b/build/updateFromSources.cmd
@@ -4,8 +4,8 @@ GOTO :CMDSCRIPT
::CMDLITERAL
set -eux
-exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget
+exec "$(cd "$(dirname "$0")"; pwd)/../platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$(cd "$(dirname "$0")"; pwd)/.." intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget
:CMDSCRIPT
-call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget
+call "%~dp0\..\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0\.." intellij.idea.community.build OpenSourceCommunityUpdateFromSourcesBuildTarget
EXIT /B %ERRORLEVEL%
diff --git a/installers.cmd b/installers.cmd
index 8476826648b0..73e15563e5b9 100755
--- a/installers.cmd
+++ b/installers.cmd
@@ -4,8 +4,9 @@ GOTO :CMDSCRIPT
::CMDLITERAL
set -eux
-exec "$(cd "$(dirname "$0")"; pwd)/platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget
+root="$(cd "$(dirname "$0")"; pwd)"
+exec "$root/platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$root" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget
:CMDSCRIPT
-call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget
+call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0" intellij.idea.community.build OpenSourceCommunityInstallersBuildTarget
EXIT /B %ERRORLEVEL%
diff --git a/platform/jps-bootstrap/jps-bootstrap.cmd b/platform/jps-bootstrap/jps-bootstrap.cmd
index c821aa13a412..9f388eae67f4 100644
--- a/platform/jps-bootstrap/jps-bootstrap.cmd
+++ b/platform/jps-bootstrap/jps-bootstrap.cmd
@@ -5,7 +5,7 @@ set JPS_BOOTSTRAP_DIR=%~dp0
for %%F in ("%JPS_BOOTSTRAP_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR=%%~dpF
for %%F in ("%JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_HOME=%%~dpF
-set JPS_BOOTSTRAP_WORK_DIR=%JPS_BOOTSTRAP_COMMUNITY_HOME%out\jps-bootstrap\
+set JPS_BOOTSTRAP_PREPARE_DIR=%JPS_BOOTSTRAP_COMMUNITY_HOME%out\jps-bootstrap\
setlocal
@@ -77,14 +77,14 @@ if not exist "%JAVA_HOME%\bin\java.exe" (
echo Using JVM at %JAVA_HOME%
REM Download and compile jps-bootstrap itself
-"%JAVA_HOME%\bin\java.exe" -ea -Daether.connector.resumeDownloads=false -jar "%JPS_BOOTSTRAP_COMMUNITY_HOME%lib\ant\lib\ant-launcher.jar" "-Dbuild.dir=%JPS_BOOTSTRAP_WORK_DIR%." -f "%JPS_BOOTSTRAP_DIR%jps-bootstrap-classpath.xml"
+"%JAVA_HOME%\bin\java.exe" -ea -Daether.connector.resumeDownloads=false -jar "%JPS_BOOTSTRAP_COMMUNITY_HOME%lib\ant\lib\ant-launcher.jar" "-Dbuild.dir=%JPS_BOOTSTRAP_PREPARE_DIR%." -f "%JPS_BOOTSTRAP_DIR%jps-bootstrap-classpath.xml"
if errorlevel 1 goto fail
REM %RANDOM% may not be so random, but let's assume this script does not run several times per second
-set _JPS_BOOTSTRAP_JAVA_ARGS_FILE=%JPS_BOOTSTRAP_WORK_DIR%\java.args.%RANDOM%.txt
+set _JPS_BOOTSTRAP_JAVA_ARGS_FILE=%JPS_BOOTSTRAP_PREPARE_DIR%\java.args.%RANDOM%.txt
REM Run jps-bootstrap and produce java args file to run actual user class
-"%JAVA_HOME%\bin\java.exe" -ea -Xmx4g -Djava.awt.headless=true -classpath "%JPS_BOOTSTRAP_WORK_DIR%jps-bootstrap.out.lib\*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=%_JPS_BOOTSTRAP_JAVA_ARGS_FILE%" %*
+"%JAVA_HOME%\bin\java.exe" -ea -Xmx4g -Djava.awt.headless=true -classpath "%JPS_BOOTSTRAP_PREPARE_DIR%jps-bootstrap.out.lib\*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=%_JPS_BOOTSTRAP_JAVA_ARGS_FILE%" %*
if errorlevel 1 goto fail
REM Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log
diff --git a/platform/jps-bootstrap/jps-bootstrap.sh b/platform/jps-bootstrap/jps-bootstrap.sh
index f873e0bf9071..eab47a64bb27 100755
--- a/platform/jps-bootstrap/jps-bootstrap.sh
+++ b/platform/jps-bootstrap/jps-bootstrap.sh
@@ -5,7 +5,7 @@ set -eu
JPS_BOOTSTRAP_DIR="$(cd "$(dirname "$0")"; pwd)"
JPS_BOOTSTRAP_COMMUNITY_HOME="$(cd "$JPS_BOOTSTRAP_DIR/../.."; pwd)"
-JPS_BOOTSTRAP_WORK_DIR="$JPS_BOOTSTRAP_COMMUNITY_HOME/out/jps-bootstrap"
+JPS_BOOTSTRAP_PREPARE_DIR="$JPS_BOOTSTRAP_COMMUNITY_HOME/out/jps-bootstrap"
SCRIPT_VERSION=jps-bootstrap-cmd-v1
@@ -58,15 +58,15 @@ else
fi
JVM_URL="$ZULU_BASE/$ZULU_PREFIX-$ZULU_ARCH.tar.gz"
-JVM_TARGET_DIR="$JPS_BOOTSTRAP_WORK_DIR/jvm/$ZULU_PREFIX-$ZULU_ARCH-$SCRIPT_VERSION"
+JVM_TARGET_DIR="$JPS_BOOTSTRAP_PREPARE_DIR/jvm/$ZULU_PREFIX-$ZULU_ARCH-$SCRIPT_VERSION"
-mkdir -p "$JPS_BOOTSTRAP_WORK_DIR/jvm"
+mkdir -p "$JPS_BOOTSTRAP_PREPARE_DIR/jvm"
if [ -e "$JVM_TARGET_DIR/.flag" ] && [ -n "$(ls "$JVM_TARGET_DIR")" ] && [ "x$(cat "$JVM_TARGET_DIR/.flag")" = "x${JVM_URL}" ]; then
# Everything is up-to-date in $JVM_TARGET_DIR, do nothing
true
else
- JVM_TEMP_FILE=$(mktemp "$JPS_BOOTSTRAP_WORK_DIR/jvm.tar.gz.XXXXXXXXX")
+ JVM_TEMP_FILE=$(mktemp "$JPS_BOOTSTRAP_PREPARE_DIR/jvm.tar.gz.XXXXXXXXX")
trap 'echo "Removing $JVM_TEMP_FILE"; rm -f "$JVM_TEMP_FILE"; trap - EXIT' EXIT INT HUP
warn "Downloading $JVM_URL to $JVM_TEMP_FILE"
@@ -105,15 +105,15 @@ fi
set -x
# Download and compile jps-bootstrap
-"$JAVA_HOME/bin/java" -ea -Daether.connector.resumeDownloads=false -jar "$JPS_BOOTSTRAP_COMMUNITY_HOME/lib/ant/lib/ant-launcher.jar" "-Dbuild.dir=$JPS_BOOTSTRAP_WORK_DIR" -f "$JPS_BOOTSTRAP_DIR/jps-bootstrap-classpath.xml"
+"$JAVA_HOME/bin/java" -ea -Daether.connector.resumeDownloads=false -jar "$JPS_BOOTSTRAP_COMMUNITY_HOME/lib/ant/lib/ant-launcher.jar" "-Dbuild.dir=$JPS_BOOTSTRAP_PREPARE_DIR" -f "$JPS_BOOTSTRAP_DIR/jps-bootstrap-classpath.xml"
-_java_args_file="$JPS_BOOTSTRAP_WORK_DIR/java.args.$$.txt"
+_java_args_file="$JPS_BOOTSTRAP_PREPARE_DIR/java.args.$$.txt"
# shellcheck disable=SC2064
trap "rm -f '$_java_args_file'" EXIT INT HUP
# Run jps-bootstrap and produce java args file to run actual user class
export JPS_BOOTSTRAP_COMMUNITY_HOME
-"$JAVA_HOME/bin/java" -ea -Xmx4g -Djava.awt.headless=true -classpath "$JPS_BOOTSTRAP_WORK_DIR/jps-bootstrap.out.lib/*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=$_java_args_file" "$@"
+"$JAVA_HOME/bin/java" -ea -Xmx4g -Djava.awt.headless=true -classpath "$JPS_BOOTSTRAP_PREPARE_DIR/jps-bootstrap.out.lib/*" org.jetbrains.jpsBootstrap.JpsBootstrapMain "--java-argfile-target=$_java_args_file" "$@"
# Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log
"$JAVA_HOME/bin/java" "@$_java_args_file"
diff --git a/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java b/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java
index 45b86b9a4e75..ec02885eddc9 100644
--- a/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java
+++ b/platform/jps-bootstrap/src/main/java/org/jetbrains/jpsBootstrap/JpsBootstrapMain.java
@@ -92,8 +92,20 @@ public class JpsBootstrapMain {
showUsagesAndExit();
}
- moduleNameToRun = freeArgs.get(0);
- classNameToRun = freeArgs.get(1);
+ String projectHomeFromCommandline = null;
+
+ // Temporary measures to migrate from 2 arguments to 3
+ if (freeArgs.size() == 2) {
+ moduleNameToRun = freeArgs.get(0);
+ classNameToRun = freeArgs.get(1);
+ mainArgsToRun = Collections.emptyList();
+ }
+ else {
+ projectHomeFromCommandline = freeArgs.get(0);
+ moduleNameToRun = freeArgs.get(1);
+ classNameToRun = freeArgs.get(2);
+ mainArgsToRun = freeArgs.subList(3, freeArgs.size());
+ }
additionalSystemProperties = cmdline.getOptionProperties("D");
@@ -118,7 +130,9 @@ public class JpsBootstrapMain {
Path ultimateHome = communityHome.getParent();
Path ultimateCheckFile = ultimateHome.resolve("intellij.idea.ultimate.main.iml");
- if (Files.exists(riderCheckFile)) {
+ if (projectHomeFromCommandline != null) {
+ projectHome = Path.of(projectHomeFromCommandline).normalize();
+ } else if (Files.exists(riderCheckFile)) {
projectHome = riderHome;
}
else if (Files.exists(ultimateCheckFile)) {
@@ -129,12 +143,11 @@ public class JpsBootstrapMain {
projectHome = communityHome;
}
- jpsBootstrapWorkDir = communityHome.resolve("out").resolve("jps-bootstrap");
+ jpsBootstrapWorkDir = projectHome.resolve("build").resolve("jps-bootstrap-work");
info("Working directory: " + jpsBootstrapWorkDir);
Files.createDirectories(jpsBootstrapWorkDir);
- mainArgsToRun = freeArgs.subList(2, freeArgs.size());
javaArgsFileTarget = Path.of(cmdline.getOptionValue(OPT_JAVA_ARGFILE_TARGET));
buildTargetXmx = cmdline.hasOption(OPT_BUILD_TARGET_XMX) ? cmdline.getOptionValue(OPT_BUILD_TARGET_XMX) : DEFAULT_BUILD_SCRIPT_XMX;
}
diff --git a/tests.cmd b/tests.cmd
index 0606a712bcd5..2307c7390acd 100755
--- a/tests.cmd
+++ b/tests.cmd
@@ -4,8 +4,9 @@ GOTO :CMDSCRIPT
::CMDLITERAL
set -eux
-exec "$(cd "$(dirname "$0")"; pwd)/platform/jps-bootstrap/jps-bootstrap.sh" "$@" intellij.idea.community.build CommunityRunTestsBuildTarget
+root="$(cd "$(dirname "$0")"; pwd)"
+exec "$root/platform/jps-bootstrap/jps-bootstrap.sh" "$@" "$root" intellij.idea.community.build CommunityRunTestsBuildTarget
:CMDSCRIPT
-call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* intellij.idea.community.build CommunityRunTestsBuildTarget
+call "%~dp0\platform\jps-bootstrap\jps-bootstrap.cmd" %* "%~dp0" intellij.idea.community.build CommunityRunTestsBuildTarget
EXIT /B %ERRORLEVEL%