quarkusio/quarkus · critical · IllegalStateException
Quarkus manual start cannot proceed as warmup did not run
Error message
Quarkus manual start cannot proceed as warmup did not run
What it means
Thrown by Quarkus.manualStart() as IllegalStateException when the manual state is not MANUAL_INITIALIZED, i.e. manualInitialize() never completed successfully (or was never called, or already advanced/failed). manualStart() requires the warmup performed by manualInitialize().
Source
Thrown at core/runtime/src/main/java/io/quarkus/runtime/Quarkus.java:311
* This method will call Application.start() and register shutdown hook
* It will fail if Quarkus.manualInitialize() has not been called.
*
*
*/
public static void manualStart() {
int tmpState = manualState;
if (tmpState == MANUAL_FAILURE)
throw new IllegalStateException("Quarkus failed to start up");
if (tmpState >= MANUAL_STARTING)
return;
synchronized (manualLock) {
tmpState = manualState;
if (tmpState == MANUAL_FAILURE)
throw new RuntimeException("Quarkus manual bootstrap failed");
if (tmpState >= MANUAL_STARTING)
return;
if (tmpState != MANUAL_INITIALIZED)
throw new IllegalStateException("Quarkus manual start cannot proceed as warmup did not run");
manualState = MANUAL_STARTING;
}
try {
String[] args = {};
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
ShutdownRecorder.runShutdown();
manualApp.doStop();
}
});
manualApp.doStart(args);
} catch (RuntimeException e) {
manualState = MANUAL_FAILURE;
throw e;
}
manualState = MANUAL_STARTED;
}View on GitHub (pinned to e1c734241f)
Solutions
- Call Quarkus.manualInitialize() to completion before Quarkus.manualStart().
- Call each method exactly once, in order, from the same initialization path.
- If init already failed, fix that failure instead of forcing start.
Example fix
// before Quarkus.manualStart(); // warmup never ran // after Quarkus.manualInitialize(); Quarkus.manualStart();
Defensive patterns
Strategy: validation
Validate before calling
// enforce order in your own entry point:
public static void bootstrap() { Quarkus.manualInitialize(); Quarkus.manualStart(); } Try / catch
try { Quarkus.manualStart(); } catch (IllegalStateException e) { log.error("call manualInitialize() first", e); throw e; } Prevention
- Always call manualInitialize() before manualStart()
- Call each exactly once
- Keep both calls in the same initialization code path
When it happens
Trigger: Calling Quarkus.manualStart() without a preceding successful Quarkus.manualInitialize(); calling manualStart() twice (state already past MANUAL_STARTING returns early, but failed/partial init leaves other states); calling start while init is still in progress.
Common situations: Serverless glue code that calls manualStart() in a different code path from manualInitialize(); reordering the two calls during refactoring.
Related errors
- The application has not been started
- Quarkus failed to start up
- All parameters have already been loaded, it is too late to c
- Internal error: An attempt was made to start an application
- Cannot reset a started application
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/b15c9df25d427e75.
Report an issue: GitHub.