quarkusio/quarkus · error · MojoExecutionException
Classpath resource <pomPropsPath> is missing groupId
Error message
Classpath resource <pomPropsPath> is missing groupId
What it means
DevMojo reads groupId from the loaded quarkus-bootstrap-maven-resolver pom.properties; a null value means the properties file exists but lacks the groupId key, so it throws this MojoExecutionException. The properties file is generated by Maven at build time and must contain full artifact coordinates.
Source
Thrown at devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java:1717
if (coreDeployment == null) {
throw new MojoExecutionException(
"Failed to locate io.quarkus:quarkus-core-deployment on the application build classpath");
}
final String pomPropsPath = "META-INF/maven/io.quarkus/quarkus-bootstrap-maven-resolver/pom.properties";
final InputStream devModePomPropsIs = DevModeMain.class.getClassLoader().getResourceAsStream(pomPropsPath);
if (devModePomPropsIs == null) {
throw new MojoExecutionException("Failed to locate " + pomPropsPath + " on the classpath");
}
final Properties devModeProps = new Properties();
try (InputStream is = devModePomPropsIs) {
devModeProps.load(is);
} catch (IOException e) {
throw new MojoExecutionException("Failed to load " + pomPropsPath + " from the classpath", e);
}
final String devModeGroupId = devModeProps.getProperty("groupId");
if (devModeGroupId == null) {
throw new MojoExecutionException("Classpath resource " + pomPropsPath + " is missing groupId");
}
final String devModeArtifactId = devModeProps.getProperty("artifactId");
if (devModeArtifactId == null) {
throw new MojoExecutionException("Classpath resource " + pomPropsPath + " is missing artifactId");
}
final String devModeVersion = devModeProps.getProperty("version");
if (devModeVersion == null) {
throw new MojoExecutionException("Classpath resource " + pomPropsPath + " is missing version");
}
final DefaultArtifact devModeJar = new DefaultArtifact(devModeGroupId, devModeArtifactId, ArtifactCoords.TYPE_JAR,
devModeVersion);
final DependencyResult cpRes = repoSystem.resolveDependencies(repoSession,
new DependencyRequest()
.setCollectRequest(
new CollectRequest()
// it doesn't matter what the root artifact is, it's an alias
.setRootArtifact(new DefaultArtifact(IO_QUARKUS, "quarkus-devmode-alias",View on GitHub (pinned to e1c734241f)
Solutions
- Re-download the quarkus-bootstrap-maven-resolver jar: remove it from ~/.m2/repository and build with -U
- Pin a matching quarkus-maven-plugin version to the Quarkus platform BOM
- Verify the jar's pom.properties contains groupId/artifactId/version keys
Defensive patterns
Strategy: validation
Validate before calling
jar xf quarkus-bootstrap-maven-resolver-<v>.jar META-INF/maven/io.quarkus/quarkus-bootstrap-maven-resolver/pom.properties && grep groupId META-INF/maven/io.quarkus/quarkus-bootstrap-maven-resolver/pom.properties
Prevention
- Use unmodified artifacts from Maven Central or your trusted mirror
- Do not hand-edit jar metadata
- Verify artifact checksums when a mirror is involved
When it happens
Trigger: The pom.properties resource on the classpath has no `groupId` entry — only possible with a hand-crafted, stripped, or incorrectly generated pom.properties inside the quarkus-bootstrap-maven-resolver jar.
Common situations: Manually rebuilt/repackaged resolver jar without Maven metadata; custom packaging excluding pom.properties keys; tampered jar in local repository or an artifact mirror serving a modified jar.
Related errors
- Classpath resource <pomPropsPath> is missing artifactId
- Classpath resource <pomPropsPath> is missing version
- Failed to locate io.quarkus:quarkus-core-deployment on the a
- Failed to locate <pomPropsPath> on the classpath
- Failed to open class path file <file>
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/c25e00fa775fc17a.
Report an issue: GitHub.