pentaho/pentaho-kettle · error · KettleDatabaseException

JdbcDriverResolver: JAR not found: " + jarAbsolutePath

Error message

JdbcDriverResolver: JAR not found: " + jarAbsolutePath

What it means

toJarUrl() converts an absolute JAR path into a file: URL for the classloader URL list (buildUrlList). It first verifies the file exists and is a regular file; if not, it throws this KettleDatabaseException naming the path.

Solutions

  1. Confirm the path in the message exists on disk (ls the file)
  2. Re-run the resolution so a missing JAR is re-downloaded or relocated
  3. Restore/re-mount the volume holding the drivers directory
  4. Check whether any cleanup job deletes files from the drivers/cache directory

Example fix

// before
URL url = resolver.toJarUrl( previouslyResolvedPath ); // may be stale
// after
if ( new File( previouslyResolvedPath ).isFile() ) {
  URL url = resolver.toJarUrl( previouslyResolvedPath );
} else {
  previouslyResolvedPath = JdbcDriverResolver.resolve( driverId );
}
Defensive patterns

Strategy: validation

Validate before calling

File jar = new File( jarAbsolutePath );
if ( !jar.exists() || !jar.isFile() ) throw new IllegalStateException( "JAR missing: " + jarAbsolutePath );

Type guard

boolean isRegularJar( String p ) { File f = new File( p ); return f.isFile(); }

Try / catch

try { urls = buildUrlList( paths ); } catch ( KettleDatabaseException e ) { if ( e.getMessage().startsWith( "JdbcDriverResolver: JAR not found" ) ) { reResolveAndRetry(); } throw e; }

Prevention

When it happens

Trigger: buildUrlList received a path produced earlier in the pipeline that no longer exists — e.g. the resolved JAR was deleted between resolve() and toJarUrl(), or a stale cached path points to a removed file.

Common situations: Driver cache directory cleaned between calls (temp dirs wiped); JAR deleted while Pentaho was running; path computed from a different mount point that is not mounted in the container.

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 pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/3ea463bfcd4198f4. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/database/JdbcDriverResolver.java:399

    if ( path == null || path.trim().isEmpty() ) {
      return false;
    }
    return Files.isRegularFile( Paths.get( path ) );
  }

  /**
   * Converts an absolute JAR path to a {@link URL}, validating that the file exists
   * and has a {@code .jar} extension.
   *
   * @param jarAbsolutePath absolute path to the JAR file
   * @return the file URL
   * @throws KettleDatabaseException if the file does not exist, is not a regular file,
   *                                  does not end with .jar, or cannot be converted
   */
  private static URL toJarUrl( String jarAbsolutePath ) throws KettleDatabaseException {
    File jarFile = new File( jarAbsolutePath );
    if ( !jarFile.exists() || !jarFile.isFile() ) {
      throw new KettleDatabaseException( "JdbcDriverResolver: JAR not found: " + jarAbsolutePath );
    }
    if ( !jarFile.getName().toLowerCase().endsWith( ".jar" ) ) {
      throw new KettleDatabaseException( "JdbcDriverResolver: not a JAR file: " + jarAbsolutePath );
    }
    try {
      return jarFile.toPath().toUri().toURL();
    } catch ( Exception e ) {
      throw new KettleDatabaseException( "JdbcDriverResolver: Cannot convert path to URL: " + jarAbsolutePath, e );
    }
  }
}

View on GitHub (pinned to f3058517a1)