Code review comment: The fact that this method is only used in dev mode is not immediately obvious to me... So, maybe:  ```suggestion             VertxConfiguration vertxConfiguration = ConfigUtils.configBuilder(true, LaunchMode.current()) ```

Code before review:
public static void startServerAfterFailedStart() {
if (closeTask != null) {
final Handler<RoutingContext> prevHotReplacementHandler = hotReplacementHandler;
shutDownDevMode();
hotReplacementHandler = prevHotReplacementHandler;
}
Supplier<Vertx> supplier = VertxCoreRecorder.getVertx();
Vertx vertx;
if (supplier == null) {
VertxConfiguration vertxConfiguration = ConfigUtils.configBuilder(true, LaunchMode.DEVELOPMENT)
.withMapping(VertxConfiguration.class)
.build()
.getConfigMapping(VertxConfiguration.class);
vertx = VertxCoreRecorder.recoverFailedStart(vertxConfiguration).get();
} else {
vertx = supplier.get();
}
try {
HttpBuildTimeConfig buildConfig = new HttpBuildTimeConfig();
ConfigInstantiator.handleObject(buildConfig);
ManagementInterfaceBuildTimeConfig managementBuildTimeConfig = new ManagementInterfaceBuildTimeConfig();
ConfigInstantiator.handleObject(managementBuildTimeConfig);
HttpConfiguration config = new HttpConfiguration();
ConfigInstantiator.handleObject(config);
ManagementInterfaceConfiguration managementConfig = new ManagementInterfaceConfiguration();
ConfigInstantiator.handleObject(managementConfig);
if (config.host == null) {
config.host = "localhost";
}
Router router = Router.router(vertx);
if (hotReplacementHandler != null) {
router.route().order(Integer.MIN_VALUE).blockingHandler(hotReplacementHandler);
}
Handler<HttpServerRequest> root = router;
LiveReloadConfig liveReloadConfig = new LiveReloadConfig();
ConfigInstantiator.handleObject(liveReloadConfig);
if (liveReloadConfig.password.isPresent()
&& hotReplacementContext.getDevModeType() == DevModeType.REMOTE_SERVER_SIDE) {
root = remoteSyncHandler = new RemoteSyncHandler(liveReloadConfig.password.get(), root, hotReplacementContext);
}
rootHandler = root;
doServerStart(vertx, buildConfig, managementBuildTimeConfig, null, config, managementConfig, LaunchMode.DEVELOPMENT,
new Supplier<Integer>() {
@Override
public Integer get() {
return ProcessorInfo.availableProcessors();
}
}, null, false);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

Line under review: VertxConfiguration vertxConfiguration = ConfigUtils.configBuilder(true, LaunchMode.DEVELOPMENT)

Code after addressing the review:
public static void startServerAfterFailedStart() {
if (closeTask != null) {
final Handler<RoutingContext> prevHotReplacementHandler = hotReplacementHandler;
shutDownDevMode();
hotReplacementHandler = prevHotReplacementHandler;
}
Supplier<Vertx> supplier = VertxCoreRecorder.getVertx();
Vertx vertx;
if (supplier == null) {
VertxConfiguration vertxConfiguration = ConfigUtils.emptyConfigBuilder()
.addDiscoveredSources()
.withMapping(VertxConfiguration.class)
.build().getConfigMapping(VertxConfiguration.class);
vertx = VertxCoreRecorder.recoverFailedStart(vertxConfiguration).get();
} else {
vertx = supplier.get();
}
try {
HttpBuildTimeConfig buildConfig = new HttpBuildTimeConfig();
ConfigInstantiator.handleObject(buildConfig);
ManagementInterfaceBuildTimeConfig managementBuildTimeConfig = new ManagementInterfaceBuildTimeConfig();
ConfigInstantiator.handleObject(managementBuildTimeConfig);
HttpConfiguration config = new HttpConfiguration();
ConfigInstantiator.handleObject(config);
ManagementInterfaceConfiguration managementConfig = new ManagementInterfaceConfiguration();
ConfigInstantiator.handleObject(managementConfig);
if (config.host == null) {
config.host = "localhost";
}
Router router = Router.router(vertx);
if (hotReplacementHandler != null) {
router.route().order(Integer.MIN_VALUE).blockingHandler(hotReplacementHandler);
}
Handler<HttpServerRequest> root = router;
LiveReloadConfig liveReloadConfig = new LiveReloadConfig();
ConfigInstantiator.handleObject(liveReloadConfig);
if (liveReloadConfig.password.isPresent()
&& hotReplacementContext.getDevModeType() == DevModeType.REMOTE_SERVER_SIDE) {
root = remoteSyncHandler = new RemoteSyncHandler(liveReloadConfig.password.get(), root, hotReplacementContext);
}
rootHandler = root;
doServerStart(vertx, buildConfig, managementBuildTimeConfig, null, config, managementConfig, LaunchMode.DEVELOPMENT,
new Supplier<Integer>() {
@Override
public Integer get() {
return ProcessorInfo.availableProcessors();
}
}, null, false);
} catch (Exception e) {
throw new RuntimeException(e);
}
}