jps-bootstrap: specify project to load

this is useful when project home could not be detected from inside the project
e.g. some projects sharing common community folder

GitOrigin-RevId: bc3c7cb277f89429f7344f88cea9b8cace6c70e7
This commit is contained in:
Leonid Shalupov
2022-02-16 19:39:53 +00:00
committed by intellij-monorepo-bot
parent 105613a758
commit 068b6d3d4a
9 changed files with 41 additions and 24 deletions

1
build/.gitignore vendored
View File

@@ -1,5 +1,6 @@
/kotlinc/ /kotlinc/
/jdk/ /jdk/
/download/ /download/
/jps-bootstrap-work/
kotlin-plugin*.zip kotlin-plugin*.zip
dependencies/buildSrc/build dependencies/buildSrc/build

View File

@@ -4,8 +4,8 @@ GOTO :CMDSCRIPT
::CMDLITERAL ::CMDLITERAL
set -eux 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 :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% EXIT /B %ERRORLEVEL%

View File

@@ -11,6 +11,7 @@
<excludeFolder url="file://$MODULE_DIR$/protobuf/cache" /> <excludeFolder url="file://$MODULE_DIR$/protobuf/cache" />
<excludeFolder url="file://$MODULE_DIR$/protobuf/bin" /> <excludeFolder url="file://$MODULE_DIR$/protobuf/bin" />
<excludeFolder url="file://$MODULE_DIR$/download" /> <excludeFolder url="file://$MODULE_DIR$/download" />
<excludeFolder url="file://$MODULE_DIR$/jps-bootstrap-work" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />

View File

@@ -4,8 +4,8 @@ GOTO :CMDSCRIPT
::CMDLITERAL ::CMDLITERAL
set -eux 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 :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% EXIT /B %ERRORLEVEL%

View File

@@ -4,8 +4,9 @@ GOTO :CMDSCRIPT
::CMDLITERAL ::CMDLITERAL
set -eux 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 :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% EXIT /B %ERRORLEVEL%

View File

@@ -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_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR=%%~dpF
for %%F in ("%JPS_BOOTSTRAP_COMMUNITY_PLATFORM_DIR%\.") do set JPS_BOOTSTRAP_COMMUNITY_HOME=%%~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 setlocal
@@ -77,14 +77,14 @@ if not exist "%JAVA_HOME%\bin\java.exe" (
echo Using JVM at %JAVA_HOME% echo Using JVM at %JAVA_HOME%
REM Download and compile jps-bootstrap itself 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 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 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 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 if errorlevel 1 goto fail
REM Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log REM Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log

View File

@@ -5,7 +5,7 @@ set -eu
JPS_BOOTSTRAP_DIR="$(cd "$(dirname "$0")"; pwd)" JPS_BOOTSTRAP_DIR="$(cd "$(dirname "$0")"; pwd)"
JPS_BOOTSTRAP_COMMUNITY_HOME="$(cd "$JPS_BOOTSTRAP_DIR/../.."; 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 SCRIPT_VERSION=jps-bootstrap-cmd-v1
@@ -58,15 +58,15 @@ else
fi fi
JVM_URL="$ZULU_BASE/$ZULU_PREFIX-$ZULU_ARCH.tar.gz" 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 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 # Everything is up-to-date in $JVM_TARGET_DIR, do nothing
true true
else 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 trap 'echo "Removing $JVM_TEMP_FILE"; rm -f "$JVM_TEMP_FILE"; trap - EXIT' EXIT INT HUP
warn "Downloading $JVM_URL to $JVM_TEMP_FILE" warn "Downloading $JVM_URL to $JVM_TEMP_FILE"
@@ -105,15 +105,15 @@ fi
set -x set -x
# Download and compile jps-bootstrap # 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 # shellcheck disable=SC2064
trap "rm -f '$_java_args_file'" EXIT INT HUP trap "rm -f '$_java_args_file'" EXIT INT HUP
# Run jps-bootstrap and produce java args file to run actual user class # Run jps-bootstrap and produce java args file to run actual user class
export JPS_BOOTSTRAP_COMMUNITY_HOME 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 # Run user class via wrapper from platform to correctly capture and report exception to TeamCity build log
"$JAVA_HOME/bin/java" "@$_java_args_file" "$JAVA_HOME/bin/java" "@$_java_args_file"

View File

@@ -92,8 +92,20 @@ public class JpsBootstrapMain {
showUsagesAndExit(); showUsagesAndExit();
} }
moduleNameToRun = freeArgs.get(0); String projectHomeFromCommandline = null;
classNameToRun = freeArgs.get(1);
// 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"); additionalSystemProperties = cmdline.getOptionProperties("D");
@@ -118,7 +130,9 @@ public class JpsBootstrapMain {
Path ultimateHome = communityHome.getParent(); Path ultimateHome = communityHome.getParent();
Path ultimateCheckFile = ultimateHome.resolve("intellij.idea.ultimate.main.iml"); 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; projectHome = riderHome;
} }
else if (Files.exists(ultimateCheckFile)) { else if (Files.exists(ultimateCheckFile)) {
@@ -129,12 +143,11 @@ public class JpsBootstrapMain {
projectHome = communityHome; projectHome = communityHome;
} }
jpsBootstrapWorkDir = communityHome.resolve("out").resolve("jps-bootstrap"); jpsBootstrapWorkDir = projectHome.resolve("build").resolve("jps-bootstrap-work");
info("Working directory: " + jpsBootstrapWorkDir); info("Working directory: " + jpsBootstrapWorkDir);
Files.createDirectories(jpsBootstrapWorkDir); Files.createDirectories(jpsBootstrapWorkDir);
mainArgsToRun = freeArgs.subList(2, freeArgs.size());
javaArgsFileTarget = Path.of(cmdline.getOptionValue(OPT_JAVA_ARGFILE_TARGET)); 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; buildTargetXmx = cmdline.hasOption(OPT_BUILD_TARGET_XMX) ? cmdline.getOptionValue(OPT_BUILD_TARGET_XMX) : DEFAULT_BUILD_SCRIPT_XMX;
} }

View File

@@ -4,8 +4,9 @@ GOTO :CMDSCRIPT
::CMDLITERAL ::CMDLITERAL
set -eux 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 :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% EXIT /B %ERRORLEVEL%