quarkusio/quarkus · error · RuntimeException
quarkus.funqy.export does not match a function: ${export}
Error message
quarkus.funqy.export does not match a function: ${export} What it means
At runtime, Funqy's Google Cloud Functions binding resolves the configured quarkus.funqy.export value to a registered function invoker. If the configured name matches no registered function, chooseInvoker throws a RuntimeException naming the bad export value.
Source
Thrown at extensions/funqy/funqy-google-cloud-functions/runtime/src/main/java/io/quarkus/funqy/gcp/functions/FunqyCloudFunctionsBindingRecorder.java:64
ObjectReader reader = objectMapper.readerFor(javaInputType);
invoker.getBindingContext().put(ObjectReader.class.getName(), reader);
}
if (invoker.hasOutput()) {
JavaType javaOutputType = objectMapper.constructType(invoker.getOutputType());
ObjectWriter writer = objectMapper.writerFor(javaOutputType);
invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);
}
}
FunctionConstructor.CONTAINER = bc;
}
public void chooseInvoker() {
// this is done at Runtime so that we can change it with an environment variable.
if (config.getValue().export().isPresent()) {
invoker = FunctionRecorder.registry.matchInvoker(config.getValue().export().get());
if (invoker == null) {
throw new RuntimeException(
"quarkus.funqy.export does not match a function: " + config.getValue().export().get());
}
} else if (FunctionRecorder.registry.invokers().size() == 0) {
throw new RuntimeException("There are no functions to process lambda");
} else if (FunctionRecorder.registry.invokers().size() > 1) {
throw new RuntimeException("Too many functions. You need to set quarkus.funqy.export");
} else {
invoker = FunctionRecorder.registry.invokers().iterator().next();
}
if (invoker.hasInput()) {
reader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());
}
if (invoker.hasOutput()) {
writer = (ObjectWriter) invoker.getBindingContext().get(ObjectWriter.class.getName());
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Set quarkus.funqy.export / FUNQY_EXPORT to the exact name of a registered @Funq method
- Verify the function class is included in the deployed uber-jar
- Remove the export setting if there is only one function
Example fix
// before (env) FUNQY_EXPORT=myFunct // after FUNQY_EXPORT=myFunction
Defensive patterns
Strategy: validation
Validate before calling
// verify the export matches a @Funq method before deploy grep -rn "@Funq" src/main/java # confirm a method named exactly as FUNQY_EXPORT
Try / catch
try {
binding.init();
} catch (RuntimeException e) {
log.error("Check quarkus.funqy.export / FUNQY_EXPORT value", e);
} Prevention
- Keep FUNQY_EXPORT identical to the @Funq method name
- Rename method and export together
- Test locally with the same env var before deploying
When it happens
Trigger: quarkus.funqy.export (often set via the FUNQY_EXPORT env var in GCF) contains a name that is not registered — misspelled, renamed, or the class containing the @Funq method is not in the deployment.
Common situations: Typo in the FUNQY_EXPORT environment variable; renaming the funq method without updating the export; deploying a jar that lacks the function class.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- There are no functions to process lambda
- Too many functions. You need to set quarkus.funqy.export
- No datasource named '<dataSourceName>' exists
- quarkus.funqy.export does not match a function: ${export}
- Too many functions. You need to set quarkus.funqy.export
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/bb97f12fbc129d8d.
Report an issue: GitHub.