mirror of
https://github.com/sbt/sbt.git
synced 2026-09-05 01:03:36 +02:00
**Problem** Running sbt 2.x with JDK 8 produces a confusing "server was not detected" error because the JDK version check only required JDK 8+ and only ran in the non-native-client path. **Solution** Move java_version detection before the native client decision and add checkJava17ForSbt2 that requires JDK 17+ when sbt major version >= 2. Fixes #8813 * [2.x] fix: Fail early when sbt 2.x is run with JDK < 17 (sbtw) Move JDK version check before native client decision in sbtw and require JDK 17+ when build.properties declares sbt 2.x. * [2.x] fix: Fail early when sbt 2.x is run with JDK < 17 (sbt.bat) Move checkjava before native client decision in sbt.bat and require JDK 17+ when build.properties declares sbt 2.x. * [2.x] test: Add minimumJdkVersion helper and unit tests for sbtw Extract JDK version check logic into Runner.minimumJdkVersion for testability. Add RunnerSpec with tests for sbt 1.x, 2.x, and 3.x version detection. * [2.x] test: Bump fake java to JDK 17 for integration tests The fake java script used by launcher integration tests reported JDK 8. Since sbt 2.x now requires JDK 17+, the citest2 (sbt 2.x) integration tests would fail with the new JDK version check. * Simulate JDK 9+ rt.jar handling in fake java script Instead of silently ignoring --rt-ext-dir (which causes sbt.bat to mkdir on an empty string), properly simulate JDK 9+ behavior by creating a temp directory with java9-rt-ext- prefix and a dummy rt.jar inside it. Co-authored-by: Dream <[email protected]>
29 lines
1.0 KiB
Python
Executable File
29 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
|
|
if '--version' in sys.argv or '-version' in sys.argv:
|
|
print('openjdk version "17.0.12" 2024-07-16')
|
|
elif '--rt-ext-dir' in sys.argv:
|
|
# Simulate JDK 9+ rt.jar ext dir: output a directory path containing
|
|
# "java9-rt-ext-" that the launcher scripts look for via grep/findstr.
|
|
ext_dir = os.path.join(tempfile.gettempdir(), 'java9-rt-ext-fake')
|
|
os.makedirs(ext_dir, exist_ok=True)
|
|
# Create a dummy rt.jar so the launcher won't try to --export-rt
|
|
rt_jar = os.path.join(ext_dir, 'rt.jar')
|
|
if not os.path.exists(rt_jar):
|
|
open(rt_jar, 'w').close()
|
|
print(ext_dir)
|
|
elif '--export-rt' in sys.argv:
|
|
# Simulate rt.jar export: create the file at the specified path
|
|
idx = sys.argv.index('--export-rt')
|
|
if idx + 1 < len(sys.argv):
|
|
rt_path = sys.argv[idx + 1]
|
|
os.makedirs(os.path.dirname(rt_path), exist_ok=True)
|
|
open(rt_path, 'w').close()
|
|
else:
|
|
for arg in sys.argv[1:]:
|
|
print(repr(arg)[1:-1])
|