{"record":{"id":"024e26202e4daea0","repo":"quarkusio/quarkus","slug":"classpath-resource-pompropspath-is-missing-gro","errorCode":null,"errorMessage":"Classpath resource + pomPropsPath + is missing groupId","messagePattern":"Classpath resource \\+ pomPropsPath \\+ is missing groupId","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusDev.java","lineNumber":641,"sourceCode":"    private Dependency getQuarkusMavenBootstrapResolver() {\n        return getQuarkusBootstrapResolver(\"quarkus-bootstrap-maven-resolver\");\n    }\n\n    private Dependency getQuarkusBootstrapResolver(String artifactId) {\n        final String pomPropsPath = \"META-INF/maven/io.quarkus/\" + artifactId + \"/pom.properties\";\n        final InputStream devModePomPropsIs = DevModeMain.class.getClassLoader().getResourceAsStream(pomPropsPath);\n        if (devModePomPropsIs == null) {\n            throw new GradleException(\"Failed to locate \" + pomPropsPath + \" on the classpath\");\n        }\n        final Properties devModeProps = new Properties();\n        try (InputStream is = devModePomPropsIs) {\n            devModeProps.load(is);\n        } catch (IOException e) {\n            throw new GradleException(\"Failed to load \" + pomPropsPath + \" from the classpath\", e);\n        }\n        final String devModeGroupId = devModeProps.getProperty(\"groupId\");\n        if (devModeGroupId == null) {\n            throw new GradleException(\"Classpath resource \" + pomPropsPath + \" is missing groupId\");\n        }\n        final String devModeArtifactId = devModeProps.getProperty(\"artifactId\");\n        if (devModeArtifactId == null) {\n            throw new GradleException(\"Classpath resource \" + pomPropsPath + \" is missing artifactId\");\n        }\n        final String devModeVersion = devModeProps.getProperty(\"version\");\n        if (devModeVersion == null) {\n            throw new GradleException(\"Classpath resource \" + pomPropsPath + \" is missing version\");\n        }\n        return project.getDependencies()\n                .create(String.format(\"%s:%s:%s\", devModeGroupId, devModeArtifactId, devModeVersion));\n    }\n\n    private Dependency getQuarkusCoreDeployment(ApplicationModel appModel) {\n        ResolvedDependency coreDeployment = null;\n        for (ResolvedDependency d : appModel.getDependencies()) {\n            if (d.isDeploymentCp() && d.getArtifactId().equals(\"quarkus-core-deployment\")\n                    && d.getGroupId().equals(\"io.quarkus\")) {","sourceCodeStart":623,"sourceCodeEnd":659,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusDev.java#L623-L659","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["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.","Align the Quarkus Gradle plugin version with the Quarkus platform/BOM version in build.gradle.","Verify the poms.properties file on the classpath contains groupId/artifactId/version keys.","Re-import/refresh the project in the IDE to rebuild the classpath."],"exampleFix":"// before: mismatched plugin and platform\nid 'io.quarkus' version '3.0.0.Final'\nimplementation enforcedPlatform('io.quarkus.platform:quarkus-bom:3.15.0')\n// after\nid 'io.quarkus' version '3.15.0'\nimplementation enforcedPlatform('io.quarkus.platform:quarkus-bom:3.15.0')","handlingStrategy":"validation","validationCode":"// Verify the plugin artifact metadata is intact before running dev mode\nProcess p = new ProcessBuilder(\"unzip\", \"-p\",\n    \"/path/to/quarkus-gradle-plugin.jar\", \"META-INF/maven/io.quarkus/pom.properties\")\n    .start();\nString props = new String(p.getInputStream().readAllBytes());\nif (!props.contains(\"groupId=\")) throw new IllegalStateException(\"Corrupted Quarkus plugin artifact; clear caches\");","typeGuard":null,"tryCatchPattern":"try {\n  ./gradlew quarkusDev\n} catch (GradleException e) {\n  if (e.getMessage().contains(\"is missing groupId\")) {\n    // purge ~/.gradle/caches/modules-2 and ~/.m2/repository io.quarkus entries, re-run with --refresh-dependencies\n  }\n}","preventionTips":["Keep Quarkus Gradle plugin and platform BOM versions identical.","Run CI builds with --refresh-dependencies periodically to self-heal caches.","Avoid manually editing files under ~/.m2/repository or Gradle module caches.","Pin Quarkus versions in settings.gradle pluginManagement."],"tags":["gradle","classpath","build","quarkus-dev-mode"],"backgroundTag":"corrupted-dependency-metadata","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"}