apache/seatunnel · warning
get plugin dependency jar path failed, pluginIdentifier: {}
Error message
get plugin dependency jar path failed, pluginIdentifier: {} What it means
AbstractPluginDiscovery.getPluginJarAndDependencyPaths resolves the jar and dependency URLs for a plugin identifier by scanning the plugin directory. If filesystem I/O fails while walking the dir (unreadable directory, broken symlinks, deleted files mid-scan), it logs this warning and returns an empty stream instead of failing job submission.
Source
Thrown at seatunnel-plugin-discovery/src/main/java/org/apache/seatunnel/plugin/discovery/AbstractPluginDiscovery.java:157
.distinct()
.collect(Collectors.toList());
}
@Override
public List<URL> getPluginJarAndDependencyPaths(List<PluginIdentifier> pluginIdentifiers) {
return pluginIdentifiers.stream()
.flatMap(
pluginIdentifier -> {
try {
List<URL> jars = getPluginDependencyJarPaths(pluginIdentifier);
getPluginJarPath(pluginIdentifier).ifPresent(jars::addAll);
log.info(
"find connector jar and dependency for {}: {}",
pluginIdentifier,
jars);
return jars.stream();
} catch (IOException e) {
log.warn(
"get plugin dependency jar path failed, pluginIdentifier: {}",
pluginIdentifier,
e);
return Stream.empty();
}
})
.distinct()
.sorted(Comparator.comparing(URL::toString))
.collect(Collectors.toList());
}
@Override
public List<T> getAllPlugins(List<PluginIdentifier> pluginIdentifiers) {
return pluginIdentifiers.stream()
.map(this::createPluginInstance)
.distinct()
.collect(Collectors.toList());
}View on GitHub (pinned to cf67b549a7)
Solutions
- Check filesystem permissions and existence of connectors/ and its subdir for the pluginIdentifier
- Re-run sh bin/install-plugin.sh to restore missing connector jars
- Check the full stack trace in the log to identify which path threw the IOException
- Note the job proceeds with an empty jar list — the plugin will then fail to load with a class-not-found later; fix the I/O issue before resubmitting
Defensive patterns
Strategy: validation
Validate before calling
File dir = new File(pluginDir + "/" + pluginId);
if (!Files.isReadable(dir.toPath())) throw new IllegalStateException("plugin dir unreadable: " + dir); Try / catch
try { discovery.getPluginJarAndDependencyPaths(id) } catch (Exception e) { /* empty stream means I/O failed; check logs */ } Prevention
- Verify connector jars exist on every node before job submission
- Run install-plugin.sh after upgrades
- Avoid network filesystems for the plugin dir, or ensure stable mounts
- Fix permissions on $SEATUNNEL_HOME/connectors
When it happens
Trigger: IOException while scanning the plugin dir for the plugin's jars — e.g., permissions on the connector directory, a jar file removed while the job was starting, or a broken symlink under connectors/.
Common situations: Connector jar deleted after install-plugin.sh partially ran; network filesystem (NFS) hiccup on the plugin dir; wrong SEATUNNEL_HOME connectors path with restrictive permissions.
Understand the failure class
Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.
Related errors
- CONFIG_VALIDATION_FAILED
- can't support custom load jar
- Plugin %s not found.
- plugin dir: {} not exists, load plugin from classpath
- Cannot get plugin URL for pluginIdentifier: {}
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/262fc827a3971c9b.
Report an issue: GitHub.