apache/seatunnel · critical · SeaTunnelException
load flink starter error.
Error message
load flink starter error.
What it means
FlinkExecution's constructor builds a classloader URL for the Flink starter jar under Common.appStarterDir() and registers it. If the jar path is not a valid URL (typically because the starter jar is missing or the connector/connectors dir is misconfigured), it wraps the MalformedURLException in a SeaTunnelException.
Solutions
- Run sh bin/install-plugin.sh <version> to install starter jars into the connectors directory
- Verify the flink starter jar exists in <seatunnel_home>/connectors and matches the deployed SeaTunnel version
- Check FLINK_HOME and seatunnel connector paths in the startup script/env for typos or illegal characters
- Re-download/rebuild SeaTunnel if the starter jar is corrupt
Example fix
// before sh bin/seatunnel.sh --config job.conf -e flink # connectors dir empty // after sh bin/install-plugin.sh 2.3.x sh bin/seatunnel.sh --config job.conf -e flink
Defensive patterns
Strategy: validation
Validate before calling
Path starterJar = Common.appStarterDir().resolve(FlinkStarter.APP_JAR_NAME);
if (!java.nio.file.Files.exists(starterJar)) {
throw new IllegalStateException("Missing starter jar: " + starterJar);
} Try / catch
try {
new FlinkExecution(config, ...);
} catch (SeaTunnelException e) {
log.error("Starter jar load failed; run install-plugin.sh", e);
} Prevention
- Run sh bin/install-plugin.sh after installing SeaTunnel
- Verify connectors/ contains the flink starter jar before launching
- Avoid spaces or special characters in SeaTunnel install paths
- Pin connector versions to the SeaTunnel release version
When it happens
Trigger: Starting a Flink job via seatunnel.sh where the flink starter jar (seatunnel-flink-*-starter jar) cannot be resolved to a valid URL in the connector directory.
Common situations: Connectors never installed (install-plugin.sh not run); FLINK_HOME/connectors directory misconfigured or moved; wrong SeaTunnel version jars deployed; corrupted starter dir path with illegal URL characters (e.g. spaces).
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
- DRIVER_NOT_FOUND
- Remove invalid jar when inject jars into config
- the uri of jar illegal
- Agent config file not found
- agent.id must be non-empty after resolution.
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/a0e91635f05b552d.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-core/seatunnel-flink-starter/seatunnel-flink-starter-common/src/main/java/org/apache/seatunnel/core/starter/flink/execution/FlinkExecution.java:98
private final PluginExecuteProcessor<DataStreamTableInfo, FlinkRuntimeEnvironment>
transformPluginExecuteProcessor;
private final PluginExecuteProcessor<DataStreamTableInfo, FlinkRuntimeEnvironment>
sinkPluginExecuteProcessor;
private final List<URL> jarPaths;
public FlinkExecution(Config config) {
try {
jarPaths =
new ArrayList<>(
Collections.singletonList(
new File(
Common.appStarterDir()
.resolve(FlinkStarter.APP_JAR_NAME)
.toString())
.toURI()
.toURL()));
} catch (MalformedURLException e) {
throw new SeaTunnelException("load flink starter error.", e);
}
Config envConfig = config.getConfig("env");
registerPlugin(envConfig);
JobContext jobContext = new JobContext();
jobContext.setJobMode(RuntimeEnvironment.getJobMode(config));
jobContext.setEnableCheckpoint(RuntimeEnvironment.getEnableCheckpoint(config));
this.sourcePluginExecuteProcessor =
new SourceExecuteProcessor(
jarPaths, envConfig, config.getConfigList(Constants.SOURCE), jobContext);
this.transformPluginExecuteProcessor =
new TransformExecuteProcessor(
jarPaths,
envConfig,
TypesafeConfigUtils.getConfigList(
config, Constants.TRANSFORM, Collections.emptyList()),
jobContext);
this.sinkPluginExecuteProcessor =View on GitHub (pinned to cf67b549a7)