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

  1. Check filesystem permissions and existence of connectors/ and its subdir for the pluginIdentifier
  2. Re-run sh bin/install-plugin.sh to restore missing connector jars
  3. Check the full stack trace in the log to identify which path threw the IOException
  4. 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

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


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/262fc827a3971c9b. Report an issue: GitHub.