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

  1. Run ./gradlew <project.path>:generateRuntimeDeps to create the baseline file
  2. Commit the generated file so verification passes on CI and for other developers
  3. 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

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


AI-assisted analysis of apache/iceberg@86d9c8fc54 (2026-09-12). Data as JSON: /api/errors/450f84e2c4bc1442. Report an issue: GitHub.