quarkusio/quarkus · error · MojoExecutionException
Classpath resource <pomPropsPath> is missing artifactId
Error message
Classpath resource <pomPropsPath> is missing artifactId
What it means
DevMojo reads artifactId from the quarkus-bootstrap-maven-resolver pom.properties and throws this MojoExecutionException when the key is absent. Like the groupId check, it validates that the classpath resource carries complete Maven coordinates for the dev-mode launcher artifact.
Source
Thrown at devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java:1721
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",
ArtifactCoords.TYPE_JAR, "1.0"))
.setManagedDependencies(getProjectAetherDependencyManagement())
.setDependencies(List.of(
new org.eclipse.aether.graph.Dependency(devModeJar, JavaScopes.RUNTIME),View on GitHub (pinned to e1c734241f)
Solutions
- Delete and re-download quarkus-bootstrap-maven-resolver from ~/.m2/repository with -U
- Align quarkus-maven-plugin version with the Quarkus platform version
- Inspect the jar's pom.properties and confirm all three coordinate keys are present
Defensive patterns
Strategy: validation
Validate before calling
unzip -p <resolver.jar> META-INF/maven/io.quarkus/quarkus-bootstrap-maven-resolver/pom.properties | grep artifactId
Prevention
- Never strip META-INF/maven from jars in custom builds
- Re-download suspicious artifacts instead of patching them
- Keep plugin versions aligned with the platform
When it happens
Trigger: The pom.properties resource for quarkus-bootstrap-maven-resolver contains a groupId but no `artifactId` property — a malformed or stripped metadata file in the jar.
Common situations: Repackaged or manually edited jar missing parts of META-INF/maven metadata; corrupted artifact served by a mirror; custom build pipeline rewriting pom.properties.
Related errors
- Classpath resource <pomPropsPath> is missing groupId
- 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/fc6fa142a0225c6a.
Report an issue: GitHub.