Make the build time configuration available at runtime so that the server can run without having to specify some of
* the properties again.
diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/Environment.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/Environment.java
index ede7477f5db..438022205fe 100644
--- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/Environment.java
+++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/Environment.java
@@ -91,6 +91,9 @@ public final class Environment {
}
}
+ /**
+ * Check if the we're currently in or built as dev mode.
+ */
public static boolean isDevMode() {
if (org.keycloak.common.util.Environment.isDevMode()) {
return true;
@@ -100,7 +103,7 @@ public final class Environment {
}
public static boolean isDevProfile(){
- return Optional.ofNullable(org.keycloak.common.util.Environment.getProfile()).orElse("").equalsIgnoreCase(org.keycloak.common.util.Environment.DEV_PROFILE_VALUE);
+ return org.keycloak.common.util.Environment.isDevMode();
}
public static boolean isWindows() {
diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/KeycloakMain.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/KeycloakMain.java
index 8e434ac3343..7ab1fe3730f 100644
--- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/KeycloakMain.java
+++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/KeycloakMain.java
@@ -66,11 +66,11 @@ public class KeycloakMain implements QuarkusApplication {
ensureForkJoinPoolThreadFactoryHasBeenSetToQuarkus();
InfinispanUtils.ensureVirtualThreadsParallelism();
- System.setProperty("kc.version", Version.VERSION);
-
Picocli picocli;
+ Properties clonedProps = null;
if (!(Thread.currentThread().getContextClassLoader() instanceof RunnerClassLoader)) {
- picocli = new Picocli() { // embedded launch case, avoid System.exit
+ clonedProps = (Properties) System.getProperties().clone();
+ picocli = new Picocli() { // non-script launch case, avoid System.exit
@Override
public void exit(int exitCode) {
Quarkus.asyncExit(exitCode);
@@ -79,7 +79,16 @@ public class KeycloakMain implements QuarkusApplication {
} else {
picocli = new Picocli();
}
- main(args, picocli);
+
+ System.setProperty("kc.version", Version.VERSION);
+
+ try {
+ main(args, picocli);
+ } finally {
+ if (clonedProps != null) {
+ reset(clonedProps);
+ }
+ }
}
public static void reset(Properties systemProperties) {
diff --git a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java
index 11f431acb82..d911d0ad367 100644
--- a/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java
+++ b/quarkus/runtime/src/test/java/org/keycloak/quarkus/runtime/cli/PicocliTest.java
@@ -157,6 +157,8 @@ public class PicocliTest extends AbstractConfigurationTest {
NonRunningPicocli nonRunningPicocli = pseudoLaunch("start-dev");
assertFalse(nonRunningPicocli.getOutString(), nonRunningPicocli.getOutString().toUpperCase().contains("WARN"));
assertFalse(nonRunningPicocli.getOutString(), nonRunningPicocli.getOutString().toUpperCase().contains("ERROR"));
+ onAfter();
+ assertFalse(Environment.isDevProfile());
}
@Test
diff --git a/quarkus/tests/junit5/src/main/java/org/keycloak/Keycloak.java b/quarkus/tests/junit5/src/main/java/org/keycloak/Keycloak.java
index 4fe820a0629..63c9f29d49f 100644
--- a/quarkus/tests/junit5/src/main/java/org/keycloak/Keycloak.java
+++ b/quarkus/tests/junit5/src/main/java/org/keycloak/Keycloak.java
@@ -23,6 +23,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -178,6 +179,7 @@ public class Keycloak {
private List