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

OCI Java SDK 3.42与Spring Boot 3.3不兼容?报LinkageError错误

OCI ObjectStorage客户端构建时的LinkageError问题

问题说明

使用Spring Boot 3.3.0搭配OCI Java SDK 3.42.0构建ObjectStorage客户端时,抛出LinkageError类加载冲突错误,希望保留最新版本前提下解决该问题。

gradle.build配置

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.0' // 引发错误的版本
    id 'io.spring.dependency-management' version '1.1.5'
}

group = 'org.example'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}
dependencies {
    implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-addons-resteasy-client-configurator', version: '3.42.0'
    implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-objectstorage', version: '3.42.0'
    implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-common-httpclient-jersey', version: '3.42.0'
}

test {
    useJUnitPlatform()
}

业务代码

package org.example;
import java.io.IOException;

import com.oracle.bmc.ConfigFileReader;
import com.oracle.bmc.auth.ConfigFileAuthenticationDetailsProvider;
import com.oracle.bmc.objectstorage.ObjectStorage;
import com.oracle.bmc.objectstorage.ObjectStorageClient;

public class ObjectStorageConfig {

// OCI配置文件路径
String configurationFilePath = "config";
String profile = "DEFAULT";

public ObjectStorage getObjectStorage() throws IOException {

    // 加载配置文件
    final ConfigFileReader.ConfigFile
            configFile = ConfigFileReader
            .parse(configurationFilePath, profile);

    final ConfigFileAuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);

    // 构建并返回客户端
    return ObjectStorageClient.builder()
            .build(provider);
}
}

运行时错误栈

Exception in thread "main" java.lang.LinkageError: ClassCastException: attempting to castjar:file:/C:/Users/adekc/.gradle/caches/modules-2/files-2.1/org.jboss.spec.javax.ws.rs/jboss-jaxrs-api_2.1_spec/2.0.1.Final/75cdeb26ccf87bc6f9d0f31b5ec4d80aa15b662c/jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar!/javax/ws/rs/client/ClientBuilder.class to jar:file:/C:/Users/adekc/.gradle/caches/modules-2/files-2.1/org.jboss.spec.javax.ws.rs/jboss-jaxrs-api_2.1_spec/2.0.1.Final/75cdeb26ccf87bc6f9d0f31b5ec4d80aa15b662c/jboss-jaxrs-api_2.1_spec-2.0.1.Final.jar!/javax/ws/rs/client/ClientBuilder.class
    at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:97)
    at com.oracle.bmc.http.client.jersey.JerseyHttpClientBuilder.build(JerseyHttpClientBuilder.java:306)
    at com.oracle.bmc.http.internal.BaseClient.setEndpoint(BaseClient.java:422)
    at com.oracle.bmc.http.internal.BaseClient.setRegion(BaseClient.java:457)
    at com.oracle.bmc.objectstorage.ObjectStorageClient.setRegion(ObjectStorageClient.java:152)
    at com.oracle.bmc.http.internal.BaseClient.<init>(BaseClient.java:169)
    at com.oracle.bmc.http.internal.BaseSyncClient.<init>(BaseSyncClient.java:36)
    at com.oracle.bmc.objectstorage.ObjectStorageClient.<init>(ObjectStorageClient.java:49)
    at com.oracle.bmc.objectstorage.ObjectStorageClient$Builder.build(ObjectStorageClient.java:145)
    at org.example.ObjectStorageConfig.getObjectStorage(ObjectStorageConfig.java:31)
    at org.example.FileService.getFileObject(FileService.java:50)
    at org.example.NewMain.main(NewMain.java:9)

解决方案

核心原因

Spring Boot 3.x基于Jakarta EE 9+,使用jakarta.ws.rs命名空间的JAX-RS API;而原OCI SDK依赖的oci-java-sdk-common-httpclient-jersey是基于旧的javax.ws.rs命名空间,导致类加载冲突。

修复步骤

  1. 替换OCI HTTP客户端依赖为Jakarta兼容版本
    将原依赖oci-java-sdk-common-httpclient-jersey替换为Jakarta适配版本:

    implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-common-httpclient-jersey-jakarta', version: '3.42.0'
    
  2. 排除冲突的旧JAX-RS API依赖
    为确保没有残留的javax.ws.rs依赖,可在OCI相关依赖中排除冲突包:

    dependencies {
        implementation('com.oracle.oci.sdk:oci-java-sdk-addons-resteasy-client-configurator:3.42.0') {
            exclude group: 'org.jboss.spec.javax.ws.rs', module: 'jboss-jaxrs-api_2.1_spec'
        }
        implementation('com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.42.0') {
            exclude group: 'org.jboss.spec.javax.ws.rs', module: 'jboss-jaxrs-api_2.1_spec'
        }
        implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-common-httpclient-jersey-jakarta', version: '3.42.0'
    }
    
  3. 验证依赖一致性
    执行gradle dependencies命令,检查是否还有javax.ws.rs相关依赖,确保所有JAX-RS API都为jakarta.ws.rs版本。

调整后的完整gradle.build配置:

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.0'
    id 'io.spring.dependency-management' version '1.1.5'
}

group = 'org.example'
version = '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}
dependencies {
    implementation('com.oracle.oci.sdk:oci-java-sdk-addons-resteasy-client-configurator:3.42.0') {
        exclude group: 'org.jboss.spec.javax.ws.rs', module: 'jboss-jaxrs-api_2.1_spec'
    }
    implementation('com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.42.0') {
        exclude group: 'org.jboss.spec.javax.ws.rs', module: 'jboss-jaxrs-api_2.1_spec'
    }
    implementation group: 'com.oracle.oci.sdk', name: 'oci-java-sdk-common-httpclient-jersey-jakarta', version: '3.42.0'
}

test {
    useJUnitPlatform()
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:20:17