{"record":{"id":"07d4b17b0b9165c1","repo":"quarkusio/quarkus","slug":"module-name-not-supported-while-building","errorCode":null,"errorMessage":"Module name not supported while building","messagePattern":"Module name not supported while building","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/app-model/src/main/java/io/quarkus/maven/dependency/ResolvedDependencyBuilder.java","lineNumber":163,"sourceCode":"    }\n\n    @Override\n    public Collection<ArtifactCoords> getDependencies() {\n        return deps;\n    }\n\n    public ResolvedDependencyBuilder setDirectDependencies(Collection<Dependency> directDeps) {\n        this.directDeps = directDeps;\n        return this;\n    }\n\n    @Override\n    public Collection<Dependency> getDirectDependencies() {\n        return directDeps;\n    }\n\n    public String getModuleName() {\n        throw new UnsupportedOperationException(\"Module name not supported while building\");\n    }\n\n    @Override\n    public ResolvedDependency build() {\n        return new ResolvedArtifactDependency(this);\n    }\n\n    @Override\n    public Map<String, Object> asMap(MappableCollectionFactory factory) {\n        final Map<String, Object> map = factory.newMap(7);\n        putInMap(this, map, factory);\n        return map;\n    }\n}\n","sourceCodeStart":145,"sourceCodeEnd":178,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/maven/dependency/ResolvedDependencyBuilder.java#L145-L178","documentation":"ResolvedDependencyBuilder is a builder for ResolvedDependency; the JPMS module name is only computed on the built, resolved object, not during construction. Calling getModuleName() on the builder throws UnsupportedOperationException by design.","triggerScenarios":"Calling getModuleName() on a ResolvedDependencyBuilder instance (e.g. while iterating builder objects during dependency resolution) instead of on the ResolvedDependency returned by build().","commonSituations":"Code refactored from using ResolvedDependency directly to the builder API, accidentally calling getModuleName on the builder mid-resolution; debug code inspecting builders.","solutions":["Call build() first and invoke getModuleName() on the resulting ResolvedDependency","Restructure code so module-name inspection happens after dependency resolution completes, not during building","Check the variable's static type; if it is ResolvedDependencyBuilder, you are in the build phase"],"exampleFix":"// before\nString name = builder.getModuleName();\n// after\nString name = builder.build().getModuleName();","handlingStrategy":"type-guard","validationCode":"String safeModuleName(Object o) {\n    return (o instanceof ResolvedDependency rd)\n        ? rd.getModuleName()\n        : null; // builders do not support getModuleName\n}","typeGuard":"String moduleNameIfResolved(Object o) {\n    if (!(o instanceof ResolvedDependency)) return null;\n    return ((ResolvedDependency) o).getModuleName();\n}","tryCatchPattern":"try {\n    return builder.getModuleName();\n} catch (UnsupportedOperationException e) {\n    return builder.build().getModuleName(); // only valid post-build\n}","preventionTips":["Only call getModuleName() on ResolvedDependency, never on ResolvedDependencyBuilder","Call build() before any post-resolution inspection","Keep build-phase and resolve-phase logic in separate methods so static types guide usage"],"tags":["unsupported-operation","builder-api","jpms"],"backgroundTag":"api-called-in-wrong-phase","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"}