{"record":{"id":"b82e530c2328190e","repo":"windmill-labs/windmill","slug":"line-is-not-parsable","errorCode":null,"errorMessage":"{line} is not parsable","messagePattern":"(.+?) is not parsable","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/windmill-worker/src/java_executor.rs","lineNumber":366,"sourceCode":"        .map(|line| {\n            let unparsed_dep = line.replace(\":jar\", \"\").replace(\":lib\", \"\");\n            let mut it = unparsed_dep.split(\":\");\n\n            match (it.next(), it.next(), it.next()) {\n                (Some(group_id), Some(artifact_id), Some(version)) => {\n                    let path = format!(\n                        \"{}/{}/{artifact_id}/{version}\",\n                        *JAVA_REPOSITORY_DIR,\n                        group_id.replace(\".\", \"/\")\n                    );\n                    Ok(RequiredDependency {\n                        path,\n                        _s3_handle: format!(\"{group_id}:{artifact_id}:{version}\"),\n                        display_name: format!(\"{artifact_id}:{version}\"),\n                        custom_payload: (),\n                    })\n                }\n                _ => anyhow::bail!(\"{line} is not parsable\"),\n            }\n        })\n        .collect::<anyhow::Result<Vec<RequiredDependency<_>>>>()?;\n\n    let classpath = deps\n        .clone()\n        .into_iter()\n        .map(|RequiredDependency { path, .. }| path + \"/*\")\n        .collect_vec()\n        .join(\":\")\n        + \":target\";\n\n    #[cfg(windows)]\n    let classpath = classpath.replace(\":\", \";\");\n\n    tracing::debug!(\n        workspace_id = %job.workspace_id,\n        \"JAVA classpath: {}\", &classpath","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-worker/src/java_executor.rs#L348-L384","documentation":"When installing a Java job's dependencies, Windmill parses each line of the requirements string as a Maven coordinate of the form `groupId:artifactId:version` (after stripping `:jar`/`:lib` classifiers). If splitting a line on ':' does not yield exactly those three parts, the line cannot become a RequiredDependency and the whole install fails, naming the offending line.","triggerScenarios":"A Java script's requirements list contains a line that is not `group:artifact:version` — only `group:artifact` with no version, extra `:`-separated segments the parser does not handle, a trailing colon, or a stray blank/malformed line that survives line-splitting.","commonSituations":"Developers pasting Gradle-style or POM XML coordinates into the requirements field, omitting the version, adding a packaging/classifier suffix, or leaving an empty line or comment in the dependency list.","solutions":["Fix the offending line (shown in the message) to be exactly `groupId:artifactId:version`, e.g. `com.google.code.gson:gson:2.10.1`","Remove any `:jar`/`:lib` suffix or other extra `:`-separated segments the parser does not support","Remove empty or malformed lines from the Java script's requirements field","Split whitespace-separated multiple coordinates onto separate lines"],"exampleFix":"// before (requirements line)\ncom.google.code.gson:gson\n// after\ncom.google.code.gson:gson:2.10.1","handlingStrategy":"validation","validationCode":"// validate each requirements line before submitting the job\nfn is_maven_coordinate(line: &str) -> bool {\n    let line = line.trim();\n    if line.is_empty() || line.starts_with('#') || line.contains(' ') { return false; }\n    let mut it = line.replace(\":jar\", \"\").replace(\":lib\", \"\").split(':');\n    matches!((it.next(), it.next(), it.next(), it.next()),\n        (Some(g), Some(a), Some(v), None) if !g.is_empty() && !a.is_empty() && !v.is_empty())\n}","typeGuard":"fn is_maven_coordinate(line: &str) -> bool {\n    let mut it = line.replace(\":jar\", \"\").replace(\":lib\", \"\").split(':');\n    matches!((it.next(), it.next(), it.next(), it.next()),\n             (Some(g), Some(a), Some(v), None) if !g.is_empty() && !a.is_empty() && !v.is_empty())\n}","tryCatchPattern":null,"preventionTips":["Always write Maven coordinates as group:artifact:version with no extra colons","Keep one dependency per line in the requirements field","Strip classifier/packaging suffixes before submitting","Test a new dependency list with a minimal script before production use"],"tags":["java","maven","dependency-parsing","input-validation"],"backgroundTag":"dependency-coordinate-parse-error","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}