{"record":{"id":"8addafcf9125b95b","repo":"windmill-labs/windmill","slug":"the-configured-maven-repositories-did-not-serve","errorCode":null,"errorMessage":"the configured maven repositories did not serve: {}. Coursier reported success but no artifact for them was found in its cache.","messagePattern":"the configured maven repositories did not serve: (.+?)\\. Coursier reported success but no artifact for them was found in its cache\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/windmill-worker/src/java_executor.rs","lineNumber":592,"sourceCode":"                display_name: display_name.clone(),\n                found: false,\n            })\n        })\n        .collect::<anyhow::Result<Vec<_>>>()?;\n    // longest coordinate first: a group id ending in another one's coordinates (com.org.foo:bar\n    // over org.foo:bar) would otherwise be free to claim the shorter one's directory\n    wanted.sort_by_key(|w| std::cmp::Reverse(w.coordinate.len()));\n\n    find_and_copy(&PathBuf::from(fetch_dir), &mut vec![], &mut wanted).await?;\n\n    let missing = wanted\n        .iter()\n        .filter(|w| !w.found)\n        .map(|w| w.display_name.as_str())\n        .sorted()\n        .collect_vec();\n    if !missing.is_empty() {\n        bail!(\n            \"the configured maven repositories did not serve: {}. \\\n            Coursier reported success but no artifact for them was found in its cache.\",\n            missing.join(\", \")\n        );\n    }\n    Ok(())\n}\n\nasync fn compile<'a>(\n    JobHandlerInput {\n        occupancy_metrics,\n        mem_peak,\n        canceled_by,\n        worker_name,\n        job,\n        conn,\n        job_dir,\n        client,","sourceCodeStart":574,"sourceCodeEnd":610,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-worker/src/java_executor.rs#L574-L610","documentation":"After Coursier fetches Java dependencies, Windmill walks the fetch directory and checks that every requested coordinate's artifact was actually retrieved. If Coursier exited successfully but some requested artifacts are absent from its cache (e.g. the repository 404'd or left an empty directory for the coordinate), the job fails listing the missing display names.","triggerScenarios":"A Java job runs against configured Maven repositories where one or more coordinates are not actually served — a 404 at the registry URL path, a repository that leaves an empty directory, an artifact missing from the version requested, or a mirror silently swallowing the request.","commonSituations":"Typo'd group/artifact id or nonexistent version; a private Maven repo that doesn't host the artifact; `no_default_repositories` set with only a mirror missing the package; a repository whose URL path layout doesn't match what Coursier expects, so a 404 leaves an empty directory that looks like the coordinate.","solutions":["Read the missing artifact names in the message and verify the coordinate (group:artifact:version) actually exists on the configured repository — fix typos in the script's requirements","Add a Maven repository that serves the artifact via workspace settings (or re-enable default repositories if `no_default_repositories` was set)","Check the repository URL serves the expected layout (`<group path>/<artifact>/<version>/<artifact>-<version>.jar`); fix registry URL/mirror config","Clear the Coursier fetch cache on the worker if a stale empty 404 directory shadows a now-existing artifact, then retry"],"exampleFix":"// before (workspace maven repo setting)\nhttps://maven.example.com/releases\n// after (repo that actually hosts the artifact)\nhttps://repo1.maven.org/maven2","handlingStrategy":"validation","validationCode":"#!/bin/sh\n# before submitting, check the coordinate is served by the configured repo\ncurl -fsSI \"$REPO/com/example/artifact/1.0.0/artifact-1.0.0.jar\" > /dev/null \\\n  || echo \"artifact not served by repository\"","typeGuard":null,"tryCatchPattern":"match job_result {\n    Err(e) if e.to_string().contains(\"did not serve\") => {\n        let missing = extract_names(&e.to_string());\n        // surface per-artifact resolution failure, don't blind-retry\n    }\n    other => other?,\n}","preventionTips":["Verify every Maven coordinate exists in the configured repository before deploying","Use a coordinate/version known to exist in the repo layout Coursier expects","Probe new private repositories with a simple fetch test first","Treat empty directories left by 404s in the cache as missing artifacts"],"tags":["java","maven","coursier","artifact-not-found","dependency-resolution"],"backgroundTag":"artifact-not-found-in-repository","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"}