apache/iceberg · warning

Failed to load version properties from

Error message

Failed to load version properties from {}

What it means

IcebergBuild.loadBuildInfo() reads /iceberg-build.properties from the classpath to populate build metadata (git commit, branch, version). If the resource is missing or unreadable, it logs this warning and falls back to 'unknown' for all fields; it never throws. The library emits it so operators know runtime version reporting (e.g. in logs and diagnostics) is degraded.

Solutions

  1. Verify iceberg-build.properties exists at the jar root of the iceberg-api jar on the classpath (unzip -l iceberg-api-*.jar | grep iceberg-build.properties).
  2. Use official, unmodified Iceberg release artifacts instead of manually repackaged jars, or ensure your shading config (e.g. Maven Shade) does not exclude .properties resources.
  3. Run a full Gradle build (or use published artifacts) so the build-info resource is generated rather than compiling the module alone in an IDE.
  4. If the warning is cosmetic in a controlled deployment, it can be safely ignored — the library continues with 'unknown' version strings.

Example fix

// before (maven-shade-plugin)
<filters>
  <filter><artifact>*:*</artifact><excludes><exclude>*.properties</exclude></excludes></filter>
</filters>

// after
<filters>
  <filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude></excludes></filter>
</filters>
Defensive patterns

Strategy: validation

Validate before calling

// Check the resource is on the classpath before relying on build metadata
boolean present = IcebergBuild.class.getResource("/iceberg-build.properties") != null;
if (!present) {
  LOG.warn("iceberg-build.properties missing from classpath; version reporting will be 'unknown'");
}

Prevention

When it happens

Trigger: Calling any IcebergBuild static accessor (version(), fullVersion(), gitCommitId(), etc.) triggers ensureLoaded() -> loadBuildInfo(), which warns when /iceberg-build.properties is absent from the classpath or its InputStream fails to load (e.g. corrupted jar, classloader shading stripped the resource).

Common situations: Shading/relocating Iceberg jars without including resource files; fat jars built with resource filtering that excludes .properties; running a repackaged or IDE-compiled build where the build-time resource generation step was skipped; custom classloaders that don't see the resource in the Iceberg jar.

Understand the failure class

Background: "Config file not found": what it means and how to fix it in docker-sync, Maven, Vagrant, Turborepo and other tools — this error's family across 60 libraries.

Related errors


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

Appendix: source

Thrown at api/src/main/java/org/apache/iceberg/IcebergBuild.java:54

  private static final String VERSION_PROPERTIES_FILE = "/iceberg-build.properties";
  private static final String UNKNOWN_DEFAULT = "unknown";

  private static volatile boolean isLoaded = false;

  private static String shortId; // 10 character short git hash of the build
  private static String commitId; // 40 character full git hash of the build
  private static String branch;
  private static List<String> tags;
  private static String version;
  private static String fullVersion;

  /** Loads the version.properties file for this module. */
  public static void loadBuildInfo() {
    Properties buildProperties = new Properties();
    try (InputStream is = readResource(VERSION_PROPERTIES_FILE)) {
      buildProperties.load(is);
    } catch (Exception e) {
      LOG.warn("Failed to load version properties from {}", VERSION_PROPERTIES_FILE, e);
    }

    IcebergBuild.shortId = buildProperties.getProperty("git.commit.id.abbrev", UNKNOWN_DEFAULT);
    IcebergBuild.commitId = buildProperties.getProperty("git.commit.id", UNKNOWN_DEFAULT);
    IcebergBuild.branch = buildProperties.getProperty("git.branch", UNKNOWN_DEFAULT);
    String tagList = buildProperties.getProperty("git.tags", "");
    if (!tagList.isEmpty()) {
      IcebergBuild.tags = ImmutableList.copyOf(Splitter.on(",").split(tagList));
    } else {
      IcebergBuild.tags = ImmutableList.of();
    }
    IcebergBuild.version = buildProperties.getProperty("git.build.version", UNKNOWN_DEFAULT);
    IcebergBuild.fullVersion = String.format("Apache Iceberg %s (commit %s)", version, commitId);
  }

  public static String gitCommitId() {
    ensureLoaded();
    return commitId;

View on GitHub (pinned to 86d9c8fc54)