You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java开发Apache Flink程序遭遇ClassNotFoundError问题求助

核心原因

运行时类路径中缺失Flink Table API相关依赖包,即使pom.xml中已配置,大概率是依赖的scope设置问题,或是运行/打包方式未包含依赖。

具体解决步骤

1. 修正pom.xml依赖的scope

Flink官方默认很多依赖的scope为provided(因为集群环境自带这些包),但本地开发运行时必须将这些依赖加入类路径,需改为compile。以Flink 1.19为例,完整依赖配置如下:

<dependencies>
    <!-- Table API核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-java</artifactId>
        <version>1.19.0</version>
        <scope>compile</scope>
    </dependency>
    <!-- 本地运行必须的规划器加载器 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner-loader</artifactId>
        <version>1.19.0</version>
        <scope>compile</scope>
    </dependency>
    <!-- 本地运行的runtime依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-runtime</artifactId>
        <version>1.19.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

若后续要提交到Flink集群,可将scope改回provided避免依赖冲突。

2. 确认IDE依赖导入

  • 用IDEA的话,右键pom.xml → Maven → Reload Project,确保所有依赖下载并导入。
  • 检查Project Structure → Libraries,确认flink-table-api-java等jar包正常存在,无红叉标记。

3. 调整运行/打包方式

  • IDE直接运行:确保IDE的运行配置已包含所有compile scope的依赖,若之前用了provided,IDE会自动排除这些依赖,必须改回compile才能正常运行。
  • 打包后运行:需用Maven插件将依赖打包成fat jar,推荐用maven-shade-plugin,配置示例:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>nilian.Main</mainClass>
                            </transformer>
                        </transformers>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn clean package后,用java -jar target/你的项目名-1.0-SNAPSHOT.jar运行。

4. 验证JDK版本兼容性

确认项目配置的JDK版本与Flink版本匹配:

  • Flink 1.18支持JDK 8/11/17
  • Flink 1.19支持JDK 8/11/17/21
    检查IDE的Project SDK和Module SDK,以及运行时的JDK版本是否一致。

内容的提问来源于stack exchange,提问作者nilian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:02:32