{"record":{"id":"127e1badba5a9659","repo":"quarkusio/quarkus","slug":"only-application-with-launch-mode-development-can","errorCode":null,"errorMessage":"Only application with launch mode DEVELOPMENT can restart","messagePattern":"Only application with launch mode DEVELOPMENT can restart","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"core/deployment/src/main/java/io/quarkus/runner/bootstrap/AugmentActionImpl.java","lineNumber":356,"sourceCode":"    }\n\n    @Override\n    public StartupActionImpl createInitialRuntimeApplication() {\n        if (launchMode == LaunchMode.NORMAL) {\n            throw new IllegalStateException(\"Cannot launch a runtime application with NORMAL launch mode\");\n        }\n        try (QuarkusClassLoader classLoader = curatedApplication.createDeploymentClassLoader()) {\n            @SuppressWarnings(\"unchecked\")\n            BuildResult result = runAugment(true, Collections.emptySet(), null, classLoader, NON_NORMAL_MODE_OUTPUTS);\n            return new StartupActionImpl(curatedApplication, result);\n        }\n    }\n\n    @Override\n    public StartupActionImpl reloadExistingApplication(boolean hasStartedSuccessfully, Set<String> changedResources,\n            ClassChangeInformation classChangeInformation) {\n        if (launchMode != LaunchMode.DEVELOPMENT) {\n            throw new IllegalStateException(\"Only application with launch mode DEVELOPMENT can restart\");\n        }\n\n        try (QuarkusClassLoader classLoader = curatedApplication.createDeploymentClassLoader()) {\n            @SuppressWarnings(\"unchecked\")\n            BuildResult result = runAugment(!hasStartedSuccessfully, changedResources, classChangeInformation, classLoader,\n                    NON_NORMAL_MODE_OUTPUTS);\n\n            return new StartupActionImpl(curatedApplication, result);\n        }\n    }\n\n    private BuildResult runAugment(boolean firstRun, Set<String> changedResources,\n            ClassChangeInformation classChangeInformation, ClassLoader deploymentClassLoader,\n            Class<? extends BuildItem>... finalOutputs) {\n        ClassLoader old = Thread.currentThread().getContextClassLoader();\n        try {\n            QuarkusClassLoader classLoader = curatedApplication.getOrCreateAugmentClassLoader();\n            Thread.currentThread().setContextClassLoader(classLoader);","sourceCodeStart":338,"sourceCodeEnd":374,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/core/deployment/src/main/java/io/quarkus/runner/bootstrap/AugmentActionImpl.java#L338-L374","documentation":"AugmentActionImpl.reloadExistingApplication() restarts an already-launched dev-mode application after resource/class changes. Restart semantics only exist in DEVELOPMENT mode, so calls in any other launch mode (including TEST) are rejected with this error.","triggerScenarios":"Calling reloadExistingApplication() when the AugmentAction was created with launchMode != LaunchMode.DEVELOPMENT, e.g. a TEST-mode augment action or a NORMAL-mode action, or a dev tool reloading an application launched in a mismatched mode.","commonSituations":"Custom dev tooling / hot-reload implementations mixing launch modes; quarkus:dev invoking reload against an app bootstrapped with a mismatched mode; test frameworks calling reload APIs.","solutions":["Ensure the application was originally started via createInitialRuntimeApplication() in LaunchMode.DEVELOPMENT","Align the launch mode of your CuratedApplication/AugmentAction with DEVELOPMENT before reloading","For tests, use the Quarkus test framework instead of manual reload APIs","For production, restart the process rather than calling reload APIs"],"exampleFix":"// before\nAugmentAction action = curated.createAugmentAction(LaunchMode.TEST);\naction.reloadExistingApplication(true, changed, info); // throws\n// after\nAugmentAction action = curated.createAugmentAction(LaunchMode.DEVELOPMENT);\naction.reloadExistingApplication(true, changed, info);","handlingStrategy":"validation","validationCode":"if (launchMode != LaunchMode.DEVELOPMENT) {\n    throw new IllegalArgumentException(\"reloadExistingApplication requires LaunchMode.DEVELOPMENT\");\n}","typeGuard":null,"tryCatchPattern":"try { action.reloadExistingApplication(started, changed, info); } catch (IllegalStateException e) { if (e.getMessage().contains(\"launch mode DEVELOPMENT\")) { /* restart in dev mode */ } else { throw e; } }","preventionTips":["Only implement hot-reload against DEVELOPMENT-mode augment actions","Keep a single launch mode for an application's whole lifecycle","Use process restart for non-dev modes"],"tags":["quarkus","dev-mode","live-reload"],"backgroundTag":"wrong-launch-mode","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}