quarkusio/quarkus · error · GradleException

Classpath resource + pomPropsPath + is missing groupId

Error message

Classpath resource + pomPropsPath + is missing groupId

What it means

QuarkusGradleUtils/QuarkusDev loads a quarkus-build-catalog poms.properties resource from the dev-mode classpath to determine the GAV coordinates of the quarkus-bootstrap resolver dependency. If the properties file exists but lacks the groupId key, QuarkusDev.getQuarkusBootstrapResolver throws this GradleException. It indicates a malformed or truncated quarkus maven/gradle plugin properties resource on the classpath, typically from a broken Quarkus installation or corrupted local repository artifact.

Source

Thrown at devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusDev.java:641

    private Dependency getQuarkusMavenBootstrapResolver() {
        return getQuarkusBootstrapResolver("quarkus-bootstrap-maven-resolver");
    }

    private Dependency getQuarkusBootstrapResolver(String artifactId) {
        final String pomPropsPath = "META-INF/maven/io.quarkus/" + artifactId + "/pom.properties";
        final InputStream devModePomPropsIs = DevModeMain.class.getClassLoader().getResourceAsStream(pomPropsPath);
        if (devModePomPropsIs == null) {
            throw new GradleException("Failed to locate " + pomPropsPath + " on the classpath");
        }
        final Properties devModeProps = new Properties();
        try (InputStream is = devModePomPropsIs) {
            devModeProps.load(is);
        } catch (IOException e) {
            throw new GradleException("Failed to load " + pomPropsPath + " from the classpath", e);
        }
        final String devModeGroupId = devModeProps.getProperty("groupId");
        if (devModeGroupId == null) {
            throw new GradleException("Classpath resource " + pomPropsPath + " is missing groupId");
        }
        final String devModeArtifactId = devModeProps.getProperty("artifactId");
        if (devModeArtifactId == null) {
            throw new GradleException("Classpath resource " + pomPropsPath + " is missing artifactId");
        }
        final String devModeVersion = devModeProps.getProperty("version");
        if (devModeVersion == null) {
            throw new GradleException("Classpath resource " + pomPropsPath + " is missing version");
        }
        return project.getDependencies()
                .create(String.format("%s:%s:%s", devModeGroupId, devModeArtifactId, devModeVersion));
    }

    private Dependency getQuarkusCoreDeployment(ApplicationModel appModel) {
        ResolvedDependency coreDeployment = null;
        for (ResolvedDependency d : appModel.getDependencies()) {
            if (d.isDeploymentCp() && d.getArtifactId().equals("quarkus-core-deployment")
                    && d.getGroupId().equals("io.quarkus")) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Clear the cached quarkus plugin artifacts: delete io/quarkus entries from ~/.gradle/caches/modules-2 and ~/.m2/repository/io/quarkus, then re-run with --refresh-dependencies.
  2. Align the Quarkus Gradle plugin version with the Quarkus platform/BOM version in build.gradle.
  3. Verify the poms.properties file on the classpath contains groupId/artifactId/version keys.
  4. Re-import/refresh the project in the IDE to rebuild the classpath.

Example fix

// before: mismatched plugin and platform
id 'io.quarkus' version '3.0.0.Final'
implementation enforcedPlatform('io.quarkus.platform:quarkus-bom:3.15.0')
// after
id 'io.quarkus' version '3.15.0'
implementation enforcedPlatform('io.quarkus.platform:quarkus-bom:3.15.0')
Defensive patterns

Strategy: validation

Validate before calling

// Verify the plugin artifact metadata is intact before running dev mode
Process p = new ProcessBuilder("unzip", "-p",
    "/path/to/quarkus-gradle-plugin.jar", "META-INF/maven/io.quarkus/pom.properties")
    .start();
String props = new String(p.getInputStream().readAllBytes());
if (!props.contains("groupId=")) throw new IllegalStateException("Corrupted Quarkus plugin artifact; clear caches");

Try / catch

try {
  ./gradlew quarkusDev
} catch (GradleException e) {
  if (e.getMessage().contains("is missing groupId")) {
    // purge ~/.gradle/caches/modules-2 and ~/.m2/repository io.quarkus entries, re-run with --refresh-dependencies
  }
}

Prevention

When it happens

Trigger: Running a dev-mode task (quarkusDev) where the resolved poms.properties classpath resource does not contain a 'groupId' entry; happens inside getQuarkusBootstrapResolver, invoked by getQuarkusGradleBootstrapResolver and getQuarkusMavenBootstrapResolver.

Common situations: Corrupted entries in ~/.m2/repository or Gradle cache for quarkus plugin artifacts; a partially downloaded/overwritten pom.properties; mixing mismatched Quarkus Gradle plugin and Quarkus BOM versions; manually editing or excluding plugin resources.

Related errors


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