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

Maven构建Azure密钥Vault连接Jar报ClientTransport类缺失错误

解决Azure Key Vault连接时reactor/netty/transport/ClientTransport类找不到的问题

问题情况

开发Jar包用于连接Azure Key Vault获取凭证,Maven构建后运行抛出以下错误:

java.lang.NoClassDefFoundError: reactor/netty/transport/ClientTransport

添加Azure BOM后错误仍未消除,堆栈信息显示问题出在Netty HttpClient构建环节。代码使用ClientCertificateCredentialBuilder和SecretClientBuilder实现连接,当前pom依赖包含azure-identity、azure-security-keyvault-secrets、reactor-core、reactor-netty等。

问题根源

ClientTransport是Reactor Netty 1.1.x及以上版本新增的类,而当前使用的reactor-netty:1.0.11属于1.0.x分支,不包含该类。同时Azure SDK版本与Reactor Netty版本不兼容,即便添加了BOM,手动指定的旧版Reactor Netty会覆盖BOM中的依赖版本。

解决步骤

1. 用Azure BOM统一管理Azure SDK依赖

将Azure BOM加入dependencyManagement,让它自动同步所有Azure组件的版本,避免手动指定版本引发冲突:

<dependencyManagement>
    <dependencies>
        <!-- Azure BOM 自动管理所有Azure SDK版本 -->
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>1.2.27</version> <!-- 使用最新稳定兼容版本 -->
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2. 更新Reactor Netty到兼容版本

要么移除手动指定的reactor-netty版本,交由BOM管理;要么直接指定1.1.x以上的兼容版本(如1.1.8),同时保证reactor-core版本与之匹配:

<dependencies>
    <!-- 移除手动版本,由BOM自动管理 -->
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
    </dependency>
    
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-security-keyvault-secrets</artifactId>
    </dependency>
    
    <!-- 使用与Reactor Netty兼容的版本 -->
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
        <version>3.5.9</version> <!-- 适配Reactor Netty 1.1.x -->
    </dependency>
    
    <dependency>
        <groupId>io.projectreactor.netty</groupId>
        <artifactId>reactor-netty</artifactId>
        <version>1.1.8</version>
    </dependency>
</dependencies>

3. 检查并排除依赖冲突

用Maven命令查看依赖树,确认是否有其他依赖引入了旧版Reactor Netty:

mvn dependency:tree | grep reactor-netty

若发现冲突,在对应依赖中排除旧版:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-core-http-netty</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.projectreactor.netty</groupId>
            <artifactId>reactor-netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 确保打包时包含所有依赖

由于是要上传到外部应用的Jar,需保证所有依赖被正确打包。如果是可执行Jar,使用maven-shade-plugin;如果是供其他项目依赖的Jar,避免将依赖设为provided(否则运行时会缺失):

<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>你的主类全路径</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

验证方法

  1. 执行mvn clean install重新构建Jar包
  2. 本地运行测试或上传到应用中验证Azure Key Vault连接
  3. 查看日志确认NoClassDefFoundError是否消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:35:09