quarkusio/quarkus · error · java.lang.IllegalStateException
Unable to create global provider:
Error message
Unable to create global provider:
What it means
EngineProducer.createGlobalProvider wraps all reflective failures when instantiating a configured TemplateGlobalProvider into this IllegalStateException, with the underlying exception as cause. The message appends initializerClassName from the quarkus.qute.global-provider.<n>.classes config.
Source
Thrown at extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/EngineProducer.java:383
}
throw new IllegalStateException("Not a resolver: " + resolverClassName);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
throw new IllegalStateException("Unable to create resolver: " + resolverClassName, e);
}
}
private TemplateGlobalProvider createGlobalProvider(String initializerClassName) {
try {
Class<?> initializerClazz = Thread.currentThread()
.getContextClassLoader().loadClass(initializerClassName);
if (TemplateGlobalProvider.class.isAssignableFrom(initializerClazz)) {
return (TemplateGlobalProvider) initializerClazz.getDeclaredConstructor().newInstance();
}
throw new IllegalStateException("Not a global provider: " + initializerClazz);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException | IllegalArgumentException
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
throw new IllegalStateException("Unable to create global provider: " + initializerClassName, e);
}
}
private boolean isExcluded(String path) {
for (Pattern p : templatePathExcludes) {
if (p.matcher(path).matches()) {
return true;
}
}
return false;
}
private Optional<TemplateLocation> locate(String path) {
if (isExcluded(path)) {
return Optional.empty();
}
// First try the template contents, i.e. templates not backed by files
LOGGER.debugf("Locate template contents for %s", path);View on GitHub (pinned to e1c734241f)
Solutions
- Inspect the cause chain to identify missing class vs missing constructor vs constructor exception.
- Correct the class name or add the missing dependency/module.
- Give the provider a public no-arg constructor.
- For native image, ensure the class is registered for reflection (Quarkus usually handles config-referenced classes — verify your build).
Example fix
// before
class MyGlobals { public MyGlobals(String cfg) {...} } // no no-arg ctor
// after
class MyGlobals { public MyGlobals() {...} } Defensive patterns
Strategy: validation
Validate before calling
try { Class.forName("com.example.MyGlobals").getConstructor(); } catch (ClassNotFoundException | NoSuchMethodException e) { throw new IllegalStateException("Provider missing or lacks no-arg constructor", e); } Try / catch
try { app.start(); } catch (IllegalStateException e) { if (e.getMessage().startsWith("Unable to create global provider")) { log.error("Cause: ", e.getCause()); } else throw e; } Prevention
- Always give global providers a public no-arg constructor
- Confirm the dependency containing the class is on the runtime classpath
- Test startup in JVM and native profiles
When it happens
Trigger: The configured global provider class is not on the classpath, is abstract/an interface, has no public no-arg constructor, or its constructor throws — at Quarkus engine creation time.
Common situations: Class name typo; provider class lives in a dependency not shipped; no-arg constructor missing after refactoring; native image lacking reflection metadata for the class.
Related errors
- Unable to create resolver:
- Not a resolver:
- Not a global provider:
- Expected : after attribute
- Unable to create instance of Logging Filter ''
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/cf39496e94ab0f3d.
Report an issue: GitHub.