This is an automated email from the ASF dual-hosted git repository.

apupier pushed a commit to branch CAMEL-22996-dropJava17
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 91169df5f6c1e66e35bd8b4f5c5c9b97c96cc733
Author: Aurélien Pupier <[email protected]>
AuthorDate: Fri Oct 16 10:02:28 2026 +0200

    CAMEL-22996: update camel-launcher to require Java 21
    
    Co-authored-by: IBM Bob 2.2.1
---
 .../camel-launcher/src/install/install.ps1         |  6 +--
 .../camel-launcher/src/install/install.sh          |  4 +-
 .../camel-cli/sdkman/release-notes.md              |  4 +-
 .../src/main/resources/bin/camel.bat               |  4 +-
 .../camel-launcher/src/main/resources/bin/camel.sh |  4 +-
 .../dsl/jbang/launcher/CamelBatDiscoveryTest.java  | 58 +++++++++-------------
 .../dsl/jbang/launcher/CamelShDiscoveryTest.java   | 47 +++++++++---------
 .../camel/dsl/jbang/launcher/FakeJavaTest.java     |  2 +-
 8 files changed, 59 insertions(+), 70 deletions(-)

diff --git a/dsl/camel-jbang/camel-launcher/src/install/install.ps1 
b/dsl/camel-jbang/camel-launcher/src/install/install.ps1
index 552c426a9370..a653646af26d 100644
--- a/dsl/camel-jbang/camel-launcher/src/install/install.ps1
+++ b/dsl/camel-jbang/camel-launcher/src/install/install.ps1
@@ -226,17 +226,17 @@ function Test-ArchiveEntry {
     }
 }
 
-# Runs the freshly staged upstream launcher; a nonzero exit (e.g. no Java 17+ 
available) aborts the
+# Runs the freshly staged upstream launcher; a nonzero exit (e.g. no Java 21+ 
available) aborts the
 # install and leaves the previously active installation untouched.
 function Test-StagedLauncher {
     param([string] $LauncherPath)
     try {
         & $LauncherPath 'version' *> $null
     } catch {
-        Fail "staged launcher failed verification (Java 17+ required)"
+        Fail "staged launcher failed verification (Java 21+ required)"
     }
     if ($LASTEXITCODE -ne 0) {
-        Fail "staged launcher failed verification (Java 17+ required)"
+        Fail "staged launcher failed verification (Java 21+ required)"
     }
 }
 
diff --git a/dsl/camel-jbang/camel-launcher/src/install/install.sh 
b/dsl/camel-jbang/camel-launcher/src/install/install.sh
index 6057dd694a83..343ee4aa7d38 100755
--- a/dsl/camel-jbang/camel-launcher/src/install/install.sh
+++ b/dsl/camel-jbang/camel-launcher/src/install/install.sh
@@ -194,12 +194,12 @@ validate_tar() {
     grep -Fqx "$expected_root/bin/camel.sh" "$listing" || fail "archive is 
missing bin/camel.sh"
 }
 
-# Runs the freshly staged upstream launcher; a nonzero exit (e.g. no Java 17+ 
available) aborts
+# Runs the freshly staged upstream launcher; a nonzero exit (e.g. no Java 21+ 
available) aborts
 # the install and leaves the previously active installation untouched.
 verify_staged() {
     staged_sh="$1"
     chmod +x "$staged_sh" 2>/dev/null || true
-    "$staged_sh" version >/dev/null 2>&1 || fail "staged launcher failed 
verification (Java 17+ required)"
+    "$staged_sh" version >/dev/null 2>&1 || fail "staged launcher failed 
verification (Java 21+ required)"
 }
 
 activate() {
diff --git 
a/dsl/camel-jbang/camel-launcher/src/jreleaser/distributions/camel-cli/sdkman/release-notes.md
 
b/dsl/camel-jbang/camel-launcher/src/jreleaser/distributions/camel-cli/sdkman/release-notes.md
index fea5d6177f7f..10a778b12ad7 100644
--- 
a/dsl/camel-jbang/camel-launcher/src/jreleaser/distributions/camel-cli/sdkman/release-notes.md
+++ 
b/dsl/camel-jbang/camel-launcher/src/jreleaser/distributions/camel-cli/sdkman/release-notes.md
@@ -23,8 +23,8 @@
     `publish` implementation to include when composing the SDKMAN release 
announcement.
 -->
 
-Apache Camel CLI requires Java 17 or newer. If you do not already have a
+Apache Camel CLI requires Java 21 or newer. If you do not already have a
 compatible Java, "sdk install java" provides one and SDKMAN will export
-JAVA_HOME for it; any other Java 17+ runtime works equally well. The bin/camel
+JAVA_HOME for it; any other Java 21+ runtime works equally well. The bin/camel
 launcher discovers Java via JAVACMD, JAVA_HOME, PATH, then CAMEL_FALLBACK_JAVA,
 and prints a diagnostic listing these sources if none qualify.
diff --git a/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.bat 
b/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.bat
index 9d485f9a39f9..2df7eeaa70b5 100644
--- a/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.bat
+++ b/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.bat
@@ -28,9 +28,9 @@ set DIRNAME=%~dp0
 if "%DIRNAME%" == "" set DIRNAME=.
 set BASEDIR=%DIRNAME%
 
-@REM --- Shared Java 17+ discovery contract ---
+@REM --- Shared Java 21+ discovery contract ---
 @REM Candidates in order: JAVACMD, %JAVA_HOME%\bin\java.exe, java.exe on PATH, 
CAMEL_FALLBACK_JAVA.
-set CAMEL_MIN_JAVA=17
+set CAMEL_MIN_JAVA=21
 
 set "CAMEL_JAVACMD="
 call :tryJava "%JAVACMD%"
diff --git a/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.sh 
b/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.sh
index 36a66c77efab..f38fa2edbe37 100644
--- a/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.sh
+++ b/dsl/camel-jbang/camel-launcher/src/main/resources/bin/camel.sh
@@ -47,12 +47,12 @@ if $cygwin ; then
   [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
 fi
 
-# --- Shared Java 17+ discovery contract ---
+# --- Shared Java 21+ discovery contract ---
 # Candidates are tried in order: JAVACMD, $JAVA_HOME/bin/java, java on PATH, 
CAMEL_FALLBACK_JAVA.
 # ($JAVA_HOME is also how SDKMAN's java candidate exposes its runtime.)
 # Each must exist, be executable, and report a Java major version >= 
CAMEL_MIN_JAVA.
 # Probe output is captured and never printed during a normal invocation.
-CAMEL_MIN_JAVA=17
+CAMEL_MIN_JAVA=21
 
 # Echo the Java major version of the launcher in $1, or nothing if it cannot 
be determined.
 camel_java_major() {
diff --git 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelBatDiscoveryTest.java
 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelBatDiscoveryTest.java
index 03883353c0eb..e78134ad0ddc 100644
--- 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelBatDiscoveryTest.java
+++ 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelBatDiscoveryTest.java
@@ -40,7 +40,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
- * Windows equivalent of {@link CamelShDiscoveryTest}: verifies camel.bat 
implements the same shared Java 17+ discovery
+ * Windows equivalent of {@link CamelShDiscoveryTest}: verifies camel.bat 
implements the same shared Java 21+ discovery
  * contract with observably equivalent behavior.
  */
 @EnabledOnOs(OS.WINDOWS)
@@ -48,11 +48,12 @@ class CamelBatDiscoveryTest {
 
     private static final Path SCRIPT = 
Paths.get("src/main/resources/bin/camel.bat");
 
-    private static final String JAVA17 = "openjdk version \"17.0.2\" 
2022-01-18";
     private static final String JAVA21 = "openjdk version \"21.0.3\" 
2024-04-16";
+    private static final String JAVA25 = "openjdk version \"25\" 2025-09-16";
+    private static final String JAVA17 = "openjdk version \"17.0.2\" 
2022-01-18";
+    private static final String JAVA17_EA = "openjdk version \"17-ea\"";
     private static final String JAVA11 = "openjdk version \"11.0.20\" 
2023-07-18";
     private static final String JAVA8 = "java version \"1.8.0_202\"";
-    private static final String JAVA17_EA = "openjdk version \"17-ea\"";
     private static final String GARBAGE = "totally not a java banner";
 
     private Path home(Path base) throws Exception {
@@ -83,7 +84,7 @@ class CamelBatDiscoveryTest {
         Files.writeString(h.resolve("camel-launcher-zzz-sources.jar"), 
"sources");
         Files.writeString(h.resolve("camel-launcher-9.9.9-javadoc.jar"), 
"javadoc");
         Files.writeString(h.resolve("camel-launcher-zzz-javadoc.jar"), 
"javadoc");
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "JAVACMD");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "JAVACMD");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
 
@@ -96,9 +97,9 @@ class CamelBatDiscoveryTest {
     }
 
     @Test
-    void acceptsJava17ViaJavacmd(@TempDir Path base) throws Exception {
+    void acceptsJava21ViaJavacmd(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "JAVACMD");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "JAVACMD");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
 
@@ -110,23 +111,10 @@ class CamelBatDiscoveryTest {
         assertFalse(r.stderr().contains("openjdk version"), "probe banner 
leaked to stderr");
     }
 
-    @Test
-    void acceptsJava21ViaJavacmd(@TempDir Path base) throws Exception {
-        Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "JAVA21");
-        Map<String, String> env = isolatedEnvironment();
-        env.put("JAVACMD", java.toString());
-
-        FakeJava.Result r = FakeJava.run(h.resolve("camel.bat"), env, 
"version");
-
-        assertEquals(0, r.exitCode(), r.stderr());
-        assertTrue(r.stdout().contains("RAN=JAVA21"), r.stdout());
-    }
-
     @Test
     void precedenceJavacmdBeatsJavaHome(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, 
"JAVACMD-FIRST");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, 
"JAVACMD-FIRST");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
         env.put("JAVA_HOME", currentJavaHome().toString());
@@ -216,7 +204,7 @@ class CamelBatDiscoveryTest {
     void precedenceNativePathBeatsCamelFallbackJava(@TempDir Path base) throws 
Exception {
         Path h = home(base);
         writeRealJavaMarkerJar(h);
-        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA17, 0, "FALLBACK");
+        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA21, 0, "FALLBACK");
         Map<String, String> env = isolatedEnvironment();
         env.put("PATH", currentJavaHome().resolve("bin") + ";" + 
env.get("PATH"));
         env.put("CAMEL_FALLBACK_JAVA", fallback.toString());
@@ -232,7 +220,7 @@ class CamelBatDiscoveryTest {
     void skipsOldJavacmdFallsBackToFallback(@TempDir Path base) throws 
Exception {
         Path h = home(base);
         Path old = FakeJava.writeFakeJava(base.resolve("old"), "java", JAVA11, 
0, "OLD");
-        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA17, 0, "FALLBACK");
+        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA21, 0, "FALLBACK");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", old.toString());
         env.put("JAVA_HOME", base.resolve("invalid-java-home").toString());
@@ -255,7 +243,7 @@ class CamelBatDiscoveryTest {
         FakeJava.Result r = FakeJava.run(h.resolve("camel.bat"), env, 
"version");
 
         assertEquals(1, r.exitCode());
-        assertTrue(r.stderr().contains("17"), "diagnostic must state the Java 
17 minimum: " + r.stderr());
+        assertTrue(r.stderr().contains("21"), "diagnostic must state the Java 
21 minimum: " + r.stderr());
         assertTrue(r.stderr().toLowerCase().contains("java"), r.stderr());
     }
 
@@ -275,7 +263,7 @@ class CamelBatDiscoveryTest {
     void rejectsNonnumericMajorAndContinuesToFallback(@TempDir Path base) 
throws Exception {
         Path h = home(base);
         Path earlyAccess = 
FakeJava.writeFakeJava(base.resolve("early-access"), "java", JAVA17_EA, 0, 
"EARLY");
-        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA17, 0, "FALLBACK");
+        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA21, 0, "FALLBACK");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", earlyAccess.toString());
         env.put("CAMEL_FALLBACK_JAVA", fallback.toString());
@@ -290,7 +278,7 @@ class CamelBatDiscoveryTest {
     @Test
     void handlesSpacesAndUnicodeInJavaPath(@TempDir Path base) throws 
Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base.resolve("spa ce/über"), 
"java", JAVA17, 0, "UNICODE");
+        Path java = FakeJava.writeFakeJava(base.resolve("spa ce/über"), 
"java", JAVA21, 0, "UNICODE");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
 
@@ -303,7 +291,7 @@ class CamelBatDiscoveryTest {
     @Test
     void defaultsHeapWhenJavaOptsUnset(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "HEAP");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "HEAP");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
 
@@ -316,7 +304,7 @@ class CamelBatDiscoveryTest {
     @Test
     void preservesJavaOptsWhenSet(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "OPTS");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "OPTS");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", java.toString());
         env.put("JAVA_OPTS", "-Dcamel.test=1 -Xmx256m");
@@ -334,7 +322,7 @@ class CamelBatDiscoveryTest {
         Path h = home(base);
         Path wrapper = writeBatch(base.resolve("wrapper"), "java",
                 "if \"%~1\"==\"-version\" (",
-                "  echo " + JAVA17 + " 1>&2",
+                "  echo " + JAVA21 + " 1>&2",
                 "  exit /b 0",
                 ")",
                 "set ARG_COUNT=0",
@@ -371,7 +359,7 @@ class CamelBatDiscoveryTest {
     void finalBatchWrapperReturnsToLauncherStatementAfterCall(@TempDir Path 
base) throws Exception {
         Path sentinel = base.resolve("launcher-resumed.txt");
         Path h = instrumentBatchLaunchReturn(home(base), sentinel);
-        Path wrapper = FakeJava.writeFakeJava(base.resolve("wrapper"), "java", 
JAVA17, 41, "RETURN");
+        Path wrapper = FakeJava.writeFakeJava(base.resolve("wrapper"), "java", 
JAVA21, 41, "RETURN");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", wrapper.toString());
 
@@ -386,7 +374,7 @@ class CamelBatDiscoveryTest {
     void 
fallbackBatchWrapperIsReachedAfterInvalidCandidatesAndPropagatesExit(@TempDir 
Path base) throws Exception {
         Path h = home(base);
         Path old = FakeJava.writeFakeJava(base.resolve("old"), "java", JAVA11, 
0, "OLD");
-        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA17, 29, "FALLBACK-WRAPPER");
+        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA21, 29, "FALLBACK-WRAPPER");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", old.toString());
         env.put("JAVA_HOME", base.resolve("missing-home").toString());
@@ -405,7 +393,7 @@ class CamelBatDiscoveryTest {
         Path java = writeBatch(base.resolve("wrapper"), "java",
                 "if \"%~1\"==\"-version\" (",
                 "  echo %_PROBE% >\"" + probePathMarker + "\"",
-                "  echo " + JAVA17 + " 1>&2",
+                "  echo " + JAVA21 + " 1>&2",
                 "  exit /b 0",
                 ")",
                 "echo RAN=BASEDIR-PROBE",
@@ -431,11 +419,11 @@ class CamelBatDiscoveryTest {
         Path h = home(base);
         Path rejected = writeBatch(base.resolve("rejected"), "java",
                 "if \"%~1\"==\"-version\" (",
-                "  echo " + JAVA17 + " 1>&2",
+                "  echo " + JAVA21 + " 1>&2",
                 "  exit /b 7",
                 ")",
                 "echo RAN=REJECTED");
-        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA17, 0, "FALLBACK");
+        Path fallback = FakeJava.writeFakeJava(base.resolve("fallback"), 
"java", JAVA21, 0, "FALLBACK");
         Map<String, String> env = isolatedEnvironment();
         env.put("JAVACMD", rejected.toString());
         env.put("CAMEL_FALLBACK_JAVA", fallback.toString());
@@ -453,7 +441,7 @@ class CamelBatDiscoveryTest {
         Path java = writeBatch(base.resolve("banner"), "java",
                 "if \"%~1\"==\"-version\" (",
                 "  echo wrapper version metadata 1>&2",
-                "  echo " + JAVA17 + " 1>&2",
+                "  echo " + JAVA21 + " 1>&2",
                 "  exit /b 0",
                 ")",
                 "echo RAN=VALID-BANNER",
@@ -475,7 +463,7 @@ class CamelBatDiscoveryTest {
         Path java = writeBatch(base.resolve("stdin"), "java",
                 "if \"%~1\"==\"-version\" (",
                 "  set /p \"ignored=\"",
-                "  echo " + JAVA17 + " 1>&2",
+                "  echo " + JAVA21 + " 1>&2",
                 "  exit /b 0",
                 ")",
                 "echo RAN=PROBE-STDIN",
diff --git 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelShDiscoveryTest.java
 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelShDiscoveryTest.java
index 08fac4adf315..71f15c200677 100644
--- 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelShDiscoveryTest.java
+++ 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/CamelShDiscoveryTest.java
@@ -32,7 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
- * Verifies the shared Java 17+ discovery contract implemented in camel.sh. 
POSIX only; the Windows batch equivalent
+ * Verifies the shared Java 21+ discovery contract implemented in camel.sh. 
POSIX only; the Windows batch equivalent
  * lives in {@link CamelBatDiscoveryTest}.
  */
 @DisabledOnOs(OS.WINDOWS)
@@ -40,8 +40,9 @@ class CamelShDiscoveryTest {
 
     private static final Path SCRIPT = 
Paths.get("src/main/resources/bin/camel.sh");
 
-    private static final String JAVA17 = "openjdk version \"17.0.2\" 
2022-01-18";
     private static final String JAVA21 = "openjdk version \"21.0.3\" 
2024-04-16";
+    private static final String JAVA25 = "openjdk version \"25\" 2025-09-16";
+    private static final String JAVA17 = "openjdk version \"17.0.2\" 
2022-01-18";
     private static final String JAVA11 = "openjdk version \"11.0.20\" 
2023-07-18";
     private static final String JAVA8 = "java version \"1.8.0_202\"";
     private static final String GARBAGE = "totally not a java banner";
@@ -63,7 +64,7 @@ class CamelShDiscoveryTest {
         Files.writeString(h.resolve("camel-launcher-zzz-sources.jar"), 
"sources");
         Files.writeString(h.resolve("camel-launcher-9.9.9-javadoc.jar"), 
"javadoc");
         Files.writeString(h.resolve("camel-launcher-zzz-javadoc.jar"), 
"javadoc");
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "JAVACMD");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "JAVACMD");
         Map<String, String> env = new HashMap<>();
         env.put("LC_ALL", "C");
         env.put("JAVACMD", java.toString());
@@ -77,9 +78,9 @@ class CamelShDiscoveryTest {
     }
 
     @Test
-    void acceptsJava17ViaJavacmd(@TempDir Path base) throws Exception {
+    void acceptsJava21ViaJavacmd(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "JAVACMD");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "JAVACMD");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
 
@@ -108,7 +109,7 @@ class CamelShDiscoveryTest {
     @Test
     void precedenceJavacmdBeatsJavaHomeAndPath(@TempDir Path base) throws 
Exception {
         Path h = home(base);
-        Path first = FakeJava.writeFakeJava(base.resolve("j1"), "java", 
JAVA17, 0, "JAVACMD");
+        Path first = FakeJava.writeFakeJava(base.resolve("j1"), "java", 
JAVA21, 0, "JAVACMD");
         Path jhomeBin = base.resolve("jh/bin");
         FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
         Path pathDir = base.resolve("pd");
@@ -130,7 +131,7 @@ class CamelShDiscoveryTest {
         // SDKMAN provides Java by exporting JAVA_HOME (candidate #2) with no 
JAVACMD set.
         Path h = home(base);
         Path jhomeBin = base.resolve("jh/bin");
-        FakeJava.writeFakeJava(jhomeBin, "java", JAVA17, 0, "JAVAHOME");
+        FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVA_HOME", base.resolve("jh").toString());
@@ -146,7 +147,7 @@ class CamelShDiscoveryTest {
     void skipsInvalidJavacmdFallsBackToJavaHome(@TempDir Path base) throws 
Exception {
         Path h = home(base);
         Path jhomeBin = base.resolve("jh/bin");
-        FakeJava.writeFakeJava(jhomeBin, "java", JAVA17, 0, "JAVAHOME");
+        FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", base.resolve("does-not-exist").toString());
@@ -165,7 +166,7 @@ class CamelShDiscoveryTest {
         Files.writeString(nonExecutable, "#!/bin/sh\nexit 0\n");
         assertFalse(Files.isExecutable(nonExecutable), "test candidate must 
not be executable");
         Path jhomeBin = base.resolve("jh/bin");
-        FakeJava.writeFakeJava(jhomeBin, "java", JAVA17, 0, "JAVAHOME");
+        FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", nonExecutable.toString());
@@ -183,7 +184,7 @@ class CamelShDiscoveryTest {
         Path jhomeBin = base.resolve("jh/bin");
         FakeJava.writeFakeJava(jhomeBin, "java", JAVA11, 0, "JAVAHOME"); // 
too old
         Path pathDir = base.resolve("pd");
-        FakeJava.writeFakeJava(pathDir, "java", JAVA17, 0, "PATH");
+        FakeJava.writeFakeJava(pathDir, "java", JAVA21, 0, "PATH");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVA_HOME", base.resolve("jh").toString());
@@ -201,7 +202,7 @@ class CamelShDiscoveryTest {
     void precedenceJavaHomeBeatsPath(@TempDir Path base) throws Exception {
         Path h = home(base);
         Path jhomeBin = base.resolve("jh/bin");
-        FakeJava.writeFakeJava(jhomeBin, "java", JAVA17, 0, "JAVAHOME");
+        FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
         Path pathDir = base.resolve("pd");
         FakeJava.writeFakeJava(pathDir, "java", JAVA21, 0, "PATH");
 
@@ -219,7 +220,7 @@ class CamelShDiscoveryTest {
     void precedencePathBeatsCamelFallbackJava(@TempDir Path base) throws 
Exception {
         Path h = home(base);
         Path pathDir = base.resolve("pd");
-        FakeJava.writeFakeJava(pathDir, "java", JAVA17, 0, "PATH");
+        FakeJava.writeFakeJava(pathDir, "java", JAVA21, 0, "PATH");
         Path fallback = FakeJava.writeFakeJava(base.resolve("fb"), "java", 
JAVA21, 0, "FALLBACK");
 
         Map<String, String> env = new HashMap<>();
@@ -235,7 +236,7 @@ class CamelShDiscoveryTest {
     @Test
     void usesCamelFallbackJavaWhenNothingElseQualifies(@TempDir Path base) 
throws Exception {
         Path h = home(base);
-        Path fb = FakeJava.writeFakeJava(base.resolve("fb"), "java", JAVA17, 
0, "FALLBACK");
+        Path fb = FakeJava.writeFakeJava(base.resolve("fb"), "java", JAVA21, 
0, "FALLBACK");
 
         Map<String, String> env = new HashMap<>();
         env.put("PATH", pathWithNonqualifyingJava(base));
@@ -259,7 +260,7 @@ class CamelShDiscoveryTest {
         FakeJava.Result r = FakeJava.run(h.resolve("camel.sh"), env, 
"version");
 
         assertEquals(1, r.exitCode());
-        assertTrue(r.stderr().contains("17"), "diagnostic must state the Java 
17 minimum: " + r.stderr());
+        assertTrue(r.stderr().contains("21"), "diagnostic must state the Java 
21 minimum: " + r.stderr());
         assertTrue(r.stderr().toLowerCase().contains("java"), r.stderr());
     }
 
@@ -282,7 +283,7 @@ class CamelShDiscoveryTest {
         Path h = home(base);
         Path garbage = FakeJava.writeFakeJava(base.resolve("g"), "java", 
GARBAGE, 0, "GARBAGE");
         Path jhomeBin = base.resolve("jh/bin");
-        FakeJava.writeFakeJava(jhomeBin, "java", JAVA17, 0, "JAVAHOME");
+        FakeJava.writeFakeJava(jhomeBin, "java", JAVA21, 0, "JAVAHOME");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", garbage.toString());
@@ -315,7 +316,7 @@ class CamelShDiscoveryTest {
     void handlesSpacesAndUnicodeInJavaPath(@TempDir Path base) throws 
Exception {
         Path h = home(base);
         Path dir = base.resolve("spa ce/über");
-        Path java = FakeJava.writeFakeJava(dir, "java", JAVA17, 0, "UNICODE");
+        Path java = FakeJava.writeFakeJava(dir, "java", JAVA21, 0, "UNICODE");
 
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
@@ -329,7 +330,7 @@ class CamelShDiscoveryTest {
     @Test
     void preservesArgumentsWithSpaces(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "ARGS");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "ARGS");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
 
@@ -342,7 +343,7 @@ class CamelShDiscoveryTest {
     @Test
     void defaultsHeapWhenJavaOptsUnset(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "HEAP");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "HEAP");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
 
@@ -354,7 +355,7 @@ class CamelShDiscoveryTest {
     @Test
     void preservesJavaOptsWhenSet(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "OPTS");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "OPTS");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
         env.put("JAVA_OPTS", "-Dcamel.test=1 -Xmx256m");
@@ -369,7 +370,7 @@ class CamelShDiscoveryTest {
     @Test
     void preservesChildExitCode(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 42, "EXIT");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 42, "EXIT");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
 
@@ -381,7 +382,7 @@ class CamelShDiscoveryTest {
     @Test
     void preservesChildStdinStdoutAndStderr(@TempDir Path base) throws 
Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, "STDIO");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, "STDIO");
         Map<String, String> env = new HashMap<>();
         env.put("JAVACMD", java.toString());
 
@@ -396,11 +397,11 @@ class CamelShDiscoveryTest {
     @Test
     void probeCannotConsumeChildStdin(@TempDir Path base) throws Exception {
         Path h = home(base);
-        Path java = FakeJava.writeFakeJava(base, "java", JAVA17, 0, 
"PROBE-STDIN");
+        Path java = FakeJava.writeFakeJava(base, "java", JAVA21, 0, 
"PROBE-STDIN");
         Files.writeString(java, "#!/bin/sh\n"
                                 + "if [ \"$1\" = \"-version\" ]; then\n"
                                 + "  IFS= read -r ignored\n"
-                                + "  echo '" + JAVA17 + "' 1>&2\n"
+                                + "  echo '" + JAVA21 + "' 1>&2\n"
                                 + "  exit 0\n"
                                 + "fi\n"
                                 + "echo 'RAN=PROBE-STDIN'\n"
diff --git 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/FakeJavaTest.java
 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/FakeJavaTest.java
index fb99336cc922..bc20bc80b538 100644
--- 
a/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/FakeJavaTest.java
+++ 
b/dsl/camel-jbang/camel-launcher/src/test/java/org/apache/camel/dsl/jbang/launcher/FakeJavaTest.java
@@ -51,7 +51,7 @@ class FakeJavaTest {
 
     @Test
     void fakeJavaPreservesInputAndNormalStderr() throws Exception {
-        Path java = FakeJava.writeFakeJava(tempDir, "java", "openjdk version 
\"17.0.2\"", 0, "STDIO");
+        Path java = FakeJava.writeFakeJava(tempDir, "java", "openjdk version 
\"21.0.3\"", 0, "STDIO");
 
         FakeJava.Result result = FakeJava.runWithInput(java, Map.of(), "route 
input\n", "version");
 

Reply via email to