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

Flink程序本地正常服务器运行失败:org.netlib.blas.Dgemm类缺失

解决Flink程序服务器运行报错java.lang.NoClassDefFoundError: org/netlib/blas/Dgemm

我之前在基于Breeze做Flink机器学习任务时也碰到过一模一样的问题!本地IDE跑完全正常,一上传到服务器就炸,核心原因就是打包时没有把Breeze依赖的netlib相关类包含到最终的Jar包里——本地IDE会自动加载所有依赖,但服务器上运行的是你打包后的独立Jar,缺失了这些关键类。

先看你贴的报错核心:

java.lang.NoClassDefFoundError: org/netlib/blas/Dgemm
Caused by: java.lang.ClassNotFoundException: org.netlib.blas.Dgemm

这个类属于netlib-java库,是Breeze线性代数计算的底层依赖。下面是具体的解决步骤:

1. 调整Maven/Gradle依赖配置

确保你的构建工具把netlib相关依赖标记为compile(而非provided),这样打包时会把它们包含进去。以Maven为例,在pom.xml里添加或确认以下依赖:

<!-- Breeze核心依赖 -->
<dependency>
    <groupId>org.scalanlp</groupId>
    <artifactId>breeze_2.11</artifactId> <!-- 注意对应你的Scala版本 -->
    <version>1.0</version>
</dependency>
<!-- netlib-java核心包 -->
<dependency>
    <groupId>com.github.fommil.netlib</groupId>
    <artifactId>core</artifactId>
    <version>1.1.2</version>
</dependency>
<!-- 如果服务器环境没有native库,可以用纯Java实现替代 -->
<dependency>
    <groupId>com.github.fommil.netlib</groupId>
    <artifactId>all</artifactId>
    <version>1.1.2</version>
    <type>pom</type>
</dependency>

如果用Gradle,对应配置类似,确保这些依赖的scope是implementation。

2. 正确配置打包插件

如果你用Maven的maven-shade-plugin打包,要确保它把所有第三方依赖(包括netlib)都合并到Jar里。关键配置如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.zte.flink.test</mainClass> <!-- 你的主类 -->
                            </transformer>
                            <!-- 处理ServiceLoader文件,避免netlib的实现类丢失 -->
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                        </transformers>
                        <!-- 排除Flink的provided依赖,避免冲突 -->
                        <excludeGroupIds>org.apache.flink</excludeGroupIds>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

这里要注意:Flink自身的依赖(比如flink-java、flink-streaming-scala)要设为provided,因为服务器上的Flink集群已经包含这些库,避免重复打包导致冲突。

3. 验证打包结果

打包完成后,解压生成的Jar包,检查org/netlib/blas路径下是否存在Dgemm.class。如果有,说明依赖已经正确包含;如果没有,回头检查依赖配置和打包插件的设置。

额外提示

如果服务器环境支持native库,netlib会自动用性能更好的native实现;如果不支持,添加的all依赖会提供纯Java的 fallback 实现,确保程序能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:49