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

  1. Delete and re-download quarkus-bootstrap-maven-resolver from ~/.m2/repository with -U
  2. Align quarkus-maven-plugin version with the Quarkus platform version
  3. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/fc6fa142a0225c6a. Report an issue: GitHub.