{"record":{"id":"d2e4db9c5a505f82","repo":"quarkusio/quarkus","slug":"failed-to-obtain-descriptor-for-maven-plugin-plug","errorCode":null,"errorMessage":"Failed to obtain descriptor for Maven plugin <pluginId> goal <goal>","messagePattern":"Failed to obtain descriptor for Maven plugin <pluginId> goal <goal>","errorType":"exception","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java","lineNumber":1128,"sourceCode":"     * <li>both equals (ignoring case)</li>\n     * </ul>\n     *\n     * @param currentExecutionId current execution id (if defined)\n     * @param executionId execution id to test matching (if defined)\n     * @return <code>true</code> if executions ids do match.\n     */\n    private static boolean matchesExecution(String currentExecutionId, String executionId) {\n        if (currentExecutionId == null) {\n            return true;\n        }\n        return executionId == null || currentExecutionId.equalsIgnoreCase(executionId);\n    }\n\n    private MojoDescriptor getMojoDescriptor(Plugin plugin, String goal) throws MojoExecutionException {\n        try {\n            return pluginManager.getMojoDescriptor(plugin, goal, pluginRepos, repoSession);\n        } catch (Exception e) {\n            throw new MojoExecutionException(\n                    \"Failed to obtain descriptor for Maven plugin \" + plugin.getId() + \" goal \" + goal, e);\n        }\n    }\n\n    private Plugin getConfiguredPluginOrNull(String groupId, String artifactId) {\n        if (pluginMap == null) {\n            pluginMap = new HashMap<>();\n            // the original plugin keys may include property expressions, so we can't rely on the exact groupId:artifactId keys\n            for (Plugin p : project.getBuildPlugins()) {\n                pluginMap.put(ArtifactKey.ga(p.getGroupId(), p.getArtifactId()), p);\n            }\n        }\n        return pluginMap.get(ArtifactKey.ga(groupId, artifactId));\n    }\n\n    private Map<Path, Long> readPomFileTimestamps(DevModeRunner runner) throws IOException {\n        Map<Path, Long> ret = new HashMap<>();\n        for (Path i : runner.pomFiles()) {","sourceCodeStart":1110,"sourceCodeEnd":1146,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java#L1110-L1146","documentation":"DevMojo fetches a plugin's MojoDescriptor via pluginManager.getMojoDescriptor to determine how to invoke a goal (e.g. when restarting after POM changes). Failure to resolve the plugin or its goal descriptor is wrapped in MojoExecutionException with the plugin id and goal name.","triggerScenarios":"Invoking a Maven goal through dev mode where the plugin cannot be resolved: unknown goal name, plugin artifact not downloadable, wrong groupId:artifactId in build configuration, or repository/network failure while fetching the plugin.","commonSituations":"Typos in goal names in run/goal configuration; custom plugin deployed only to an internal repository that is unreachable; plugin version pinned in pom.xml is not published; offline mode prevents downloading the plugin.","solutions":["Verify the goal name and plugin coordinates in the configuration are correct.","Run with -U / check repository access so the plugin jar and its descriptor can be downloaded.","Pin a published, existing version of the plugin in pom.xml or pluginManagement.","Ensure internal repositories hosting the plugin are reachable and configured in settings.xml."],"exampleFix":"// before\nmvn quarkus:dev -Dquarkus.run-goals=org.acme:weird-plugin:1.0.0:not-a-goal\n// after\nmvn quarkus:dev -Dquarkus.run-goals=org.acme:weird-plugin:1.0.0:my-goal","handlingStrategy":"validation","validationCode":"// confirm the plugin/goal exists before invoking\nmvn org.acme:my-plugin:1.0.0:help -Dgoal=my-goal -N","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Double-check plugin groupId:artifactId:version:goal coordinates.","Ensure all repositories hosting custom plugins are configured in settings.xml.","Pin plugin versions that are actually published.","Avoid -o offline mode when the plugin is not yet cached."],"tags":["maven","plugin-resolution","dev-mode","quarkus"],"backgroundTag":"plugin-not-found","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"}