apache/iceberg · warning
WARNING: Missing ${depsFile.name} in ${projectDir}. Run: ./g
Error message
WARNING: Missing ${depsFile.name} in ${projectDir}. Run: ./gradlew ${project.path}:generateRuntimeDeps What it means
The verifyRuntimeDeps task in runtime-deps.gradle checks that a checked-in baseline file of runtime dependencies matches what the configuration actually resolves. If the baseline file does not exist, the task logs a warning and returns instead of failing, telling you to regenerate it first. It exists to catch accidental dependency drift in CI.
Source
Thrown at runtime-deps.gradle:88
group = 'verification'
description = 'Regenerate the runtime dependency baseline after intentional dependency changes'
outputs.file(depsFile)
doLast {
def deps = resolveRuntimeDeps()
depsFile.text = deps.join('\n') + '\n'
logger.lifecycle("Wrote ${deps.size()} dependencies to ${depsFile}")
logger.lifecycle("Review the diff, then update LICENSE and NOTICE if licenses changed.")
}
}
tasks.register('checkRuntimeDeps') {
group = 'verification'
description = 'Verify runtime dependencies match the checked-in baseline'
inputs.files(configurations.runtimeClasspath)
outputs.file(depsFile)
doLast {
if (!depsFile.exists()) {
logger.warn("WARNING: Missing ${depsFile.name} in ${projectDir}. " +
"Run: ./gradlew ${project.path}:generateRuntimeDeps")
return
}
def actual = resolveRuntimeDeps()
def expected = depsFile.readLines().findAll { it.trim() }.toSorted()
def groupArtifact = { coord -> coord.substring(0, coord.lastIndexOf(':')) }
def actualByModule = actual.collectEntries { [(groupArtifact(it)): it] }
def expectedByModule = expected.collectEntries { [(groupArtifact(it)): it] }
def added = actualByModule.keySet() - expectedByModule.keySet()
def removed = expectedByModule.keySet() - actualByModule.keySet()
def shared = actualByModule.keySet().intersect(expectedByModule.keySet())
def versionChanged = shared.findAll {
actualByModule[it] != expectedByModule[it]
}
View on GitHub (pinned to 86d9c8fc54)
Solutions
- Run ./gradlew <project.path>:generateRuntimeDeps to create the baseline file
- Commit the generated file so verification passes on CI and for other developers
- If the file should exist, check that it is not gitignored or located in the wrong projectDir
Example fix
// before ./gradlew :iceberg-core:verifyRuntimeDeps # WARNING: Missing ... // after ./gradlew :iceberg-core:generateRuntimeDeps ./gradlew :iceberg-core:verifyRuntimeDeps # passes
Defensive patterns
Strategy: validation
Validate before calling
if (!file('runtime-deps.txt').exists()) { tasks.named('verifyRuntimeDeps') { dependsOn 'generateRuntimeDeps' } } Prevention
- Run generateRuntimeDeps whenever adding a new module
- Never gitignore the generated baseline file
- Add generation to the module scaffold template
When it happens
Trigger: Running the verifyRuntimeDeps task in a project whose baseline file (e.g. runtime-deps.txt) has never been generated, or after the file was deleted or is missing from a fresh clone.
Common situations: Adding a new subproject that inherited the convention plugin but whose baseline was never committed; CI on a repo where the generated file is gitignored by mistake; contributors running verification before the initial generation step.
Understand the failure class
Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.
Related errors
- This build must be run with JDK 17 or 21 but was executed wi
- Neither version.txt nor git version exists:
- Runtime dependency check failed. To update the baseline run:
- File %s is referenced in the logs of Delta Lake table at %s,
- ============================================================
AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12).
Data as JSON: /api/errors/450f84e2c4bc1442.
Report an issue: GitHub.