windmill-labs/windmill · error
{line} is not parsable
Error message
{line} is not parsable What it means
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.
Source
Thrown at backend/windmill-worker/src/java_executor.rs:366
.map(|line| {
let unparsed_dep = line.replace(":jar", "").replace(":lib", "");
let mut it = unparsed_dep.split(":");
match (it.next(), it.next(), it.next()) {
(Some(group_id), Some(artifact_id), Some(version)) => {
let path = format!(
"{}/{}/{artifact_id}/{version}",
*JAVA_REPOSITORY_DIR,
group_id.replace(".", "/")
);
Ok(RequiredDependency {
path,
_s3_handle: format!("{group_id}:{artifact_id}:{version}"),
display_name: format!("{artifact_id}:{version}"),
custom_payload: (),
})
}
_ => anyhow::bail!("{line} is not parsable"),
}
})
.collect::<anyhow::Result<Vec<RequiredDependency<_>>>>()?;
let classpath = deps
.clone()
.into_iter()
.map(|RequiredDependency { path, .. }| path + "/*")
.collect_vec()
.join(":")
+ ":target";
#[cfg(windows)]
let classpath = classpath.replace(":", ";");
tracing::debug!(
workspace_id = %job.workspace_id,
"JAVA classpath: {}", &classpathView on GitHub (pinned to e474e8803c)
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
Example fix
// before (requirements line) com.google.code.gson:gson // after com.google.code.gson:gson:2.10.1
Defensive patterns
Strategy: validation
Validate before calling
// validate each requirements line before submitting the job
fn is_maven_coordinate(line: &str) -> bool {
let line = line.trim();
if line.is_empty() || line.starts_with('#') || line.contains(' ') { return false; }
let mut it = line.replace(":jar", "").replace(":lib", "").split(':');
matches!((it.next(), it.next(), it.next(), it.next()),
(Some(g), Some(a), Some(v), None) if !g.is_empty() && !a.is_empty() && !v.is_empty())
} Type guard
fn is_maven_coordinate(line: &str) -> bool {
let mut it = line.replace(":jar", "").replace(":lib", "").split(':');
matches!((it.next(), it.next(), it.next(), it.next()),
(Some(g), Some(a), Some(v), None) if !g.is_empty() && !a.is_empty() && !v.is_empty())
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- the configured maven repositories did not serve: {}. Coursie
- Internal Error: {path} is not under {repository_dir}
- No data given
- Multiple error contexts provided
- Type of file_content not supported
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/b82e530c2328190e.
Report an issue: GitHub.