Repository: quarkusio/quarkus
Issue: No hot reload on bad configuration wich block the quarkus startup and when http.port is overridden 

**Describe the bug**
If you configure a bad value that block the first application start, there is no way to have hot reload.

If you start on a good value, but after plug a bbad config, the hot reload is ok. A configuration change will trigger the hot reload as wanted. 

**Expected behavior**
The hot reload is trigger if you change the configuration file, or a code change, even it never could be started correctly.

**Actual behavior**
The hot reload is broken if the app never could be started a first time.

**To Reproduce**
Steps to reproduce the behavior:
1. configure a bad jdbc url on hibernate (or flyway)
2. start the app 
3. change to good value (it won't reload)


**Environment (please complete the following information):**
 - Output of `uname -a` or `ver`: Darwin 18.5.0 Darwin Kernel Version 18.5.0
 - Output of `java -version`: openjdk version "13" 2019-09-17
 - GraalVM version (if different from Java): 
 - Quarkus version or git rev: 0.25.0

**Additional context**
(Add any other context about the problem here.)
@cescoffier the issue that we discuss after the quarkus workshop

Changed files:
core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java

diff --git a/core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java b/core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java
index 37aff77da4c..40092f8331d 100644
--- a/core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java
+++ b/core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java
@@ -96,10 +96,6 @@ public void start() throws Exception {
             if (context.isAbortOnFailedStart()) {
                 throw new RuntimeException(deploymentProblem == null ? compileProblem : deploymentProblem);
             }
-            log.error("Failed to start Quarkus, attempting to start hot replacement endpoint to recover");
-            if (runtimeUpdatesProcessor != null) {
-                runtimeUpdatesProcessor.startupFailed();
-            }
         }
         Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
             @Override
@@ -180,6 +176,20 @@ public void execute(BuildContext context) {
                 runner.run();
                 DevModeMain.runner = runner;
                 deploymentProblem = null;
+
+            } catch (Throwable t) {
+                deploymentProblem = t;
+                if (context.isAbortOnFailedStart() || liveReload) {
+                    log.error("Failed to start quarkus", t);
+                } else {
+                    //we need to set this here, while we still have the correct TCCL
+                    //this is so the config is still valid, and we can read HTTP config from application.properties
+                    log.error("Failed to start Quarkus, attempting to start hot replacement endpoint to recover");
+                    if (runtimeUpdatesProcessor != null) {
+                        runtimeUpdatesProcessor.startupFailed();
+                    }
+                }
+
             } finally {
                 Thread.currentThread().setContextClassLoader(old);
             }