{"record":{"id":"5745aa32f303ac18","repo":"quarkusio/quarkus","slug":"invalid-artifact-artifact-5745aa","errorCode":null,"errorMessage":"Invalid artifact ${artifact}","messagePattern":"Invalid artifact (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/jbang/JBangDevModeLauncherImpl.java","lineNumber":117,"sourceCode":"            //todo : proper support for everything\n            final QuarkusBootstrap.Builder builder = QuarkusBootstrap.builder()\n                    .setBaseClassLoader(JBangDevModeLauncherImpl.class.getClassLoader())\n                    .setIsolateDeployment(true)\n                    .setMode(QuarkusBootstrap.Mode.DEV)\n                    .setTargetDirectory(targetClasses)\n                    .setAppArtifact(appArtifact)\n                    .setManagingProject(ArtifactCoords.pom(\"io.quarkus\", \"quarkus-bom\", getQuarkusVersion()))\n                    .setForcedDependencies(deps.entrySet().stream().map(s -> {\n                        String[] parts = s.getKey().split(\":\");\n                        Dependency artifact;\n                        if (parts.length == 3) {\n                            artifact = new ArtifactDependency(parts[0], parts[1], null, ArtifactCoords.TYPE_JAR, parts[2]);\n                        } else if (parts.length == 4) {\n                            artifact = new ArtifactDependency(parts[0], parts[1], null, parts[2], parts[3]);\n                        } else if (parts.length == 5) {\n                            artifact = new ArtifactDependency(parts[0], parts[1], parts[3], parts[2], parts[4]);\n                        } else {\n                            throw new RuntimeException(\"Invalid artifact \" + s);\n                        }\n                        //artifact.setPath(s.getValue());\n                        return artifact;\n                    }).collect(Collectors.toList()))\n                    .setApplicationRoot(targetClasses)\n                    .setProjectRoot(projectRoot)\n                    .setBuildSystemProperties(configurationProperties)\n                    .setRuntimeProperties(configurationProperties);\n\n            Map<String, Object> context = new HashMap<>();\n            context.put(\"app-project\", currentProject);\n            context.put(\"args\", args);\n            context.put(\"app-classes\", targetClasses);\n\n            final BootstrapMavenContext mvnCtx = new BootstrapMavenContext(\n                    BootstrapMavenContext.config().setCurrentProject(currentProject));\n            final MavenArtifactResolver mvnResolver = new MavenArtifactResolver(mvnCtx);\n            builder.setMavenArtifactResolver(mvnResolver);","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/jbang/JBangDevModeLauncherImpl.java#L99-L135","documentation":"JBangDevModeLauncherImpl.main() parses dependency coordinate strings into ArtifactDependency objects. A string that does not split into 3, 4, or 5 colon-separated parts triggers RuntimeException(\"Invalid artifact \" + s). Note this variant passes parts in the order (groupId, artifactId, version, extension, classifier) for 5-part inputs.","triggerScenarios":"A dependency string in the dev-mode launcher configuration has an unsupported number of ':' segments — e.g. missing version, or more than 5 segments.","commonSituations":"Hand-edited dev-mode launch configs; copying coordinates with extra fields; forgetting the version segment; typos introducing extra colons.","solutions":["Use groupId:artifactId:version (3 parts), or 4–5 parts for extension/classifier variants","Remove extra segments like scope or invalid suffixes","Cross-check the string against Maven coordinate conventions used by the bootstrap resolver"],"exampleFix":"// before\ncom.example:util:jar:1.0:extra\n// after\ncom.example:util:jar:1.0","handlingStrategy":"validation","validationCode":"static void requireValidCoords(String s) {\n    String[] parts = s.split(\":\", -1);\n    if (parts.length < 3 || parts.length > 5)\n        throw new IllegalArgumentException(\"Expected 3-5 colon-separated coordinate parts, got \" + parts.length + \": \" + s);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate coordinate strings before writing them into dev-mode launcher configs","Use groupId:artifactId:version as the canonical form","Watch for the 5-part ordering (groupId, artifactId, version, extension, classifier) in this code path"],"tags":["jbang","configuration","artifact-coordinates","parsing"],"backgroundTag":"invalid-artifact-coordinates","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}