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

OSGi环境下Maven包装Bundle访问另一包装Bundle时抛出类未找到异常

问题分析与解决方案

核心问题

你遇到的ClassNotFoundException: okhttp3.Authenticator本质原因是:wrap生成的google-maps-services bundle将okhttp3标记为可选依赖,从它的Manifest可以明确看到:

Import-Package = ..., okhttp3;resolution:=optional, ...

而google-maps-services运行时完全依赖okhttp3,OSGi容器不会自动解析可选依赖,直接导致类加载失败。

解决方案步骤

1. 重新wrap google-maps-services,强制okhttp3为必须依赖

修改你的wrap命令,通过Pax Wrap的指令覆盖默认的Import-Package配置,把okhttp3设为强制导入:

<bundle>wrap:mvn:com.google.maps/google-maps-services/0.9.2$Import-Package=okhttp3;resolution:=mandatory,*</bundle>

这里的$是Pax Wrap的参数分隔符,后面的Import-Package指令会替换wrap工具自动生成的导入配置,确保okhttp3被标记为必须依赖,其他包保持自动生成逻辑。

2. 清理业务bundle的冗余配置

看你的address-parser bundle的Manifest,它导出了okhttp3和com.squareup.okhttp3包,但这些已经由wrap后的okhttp bundle导出了,业务bundle不需要重复导出,建议删除Export-package里的这两个条目,避免类加载冲突:

- Export-package: com.squareup.okhttp3,okhttp3, ...
+ Export-package: ...  # 仅保留你自己的业务相关包即可

3. 验证配置生效

重新部署后,检查wrap_mvn_com.google.maps_google-maps-services_0.9.2的Manifest,确保Import-Package里的okhttp3不再带有resolution:=optional:

Import-Package = ..., okhttp3, ...

补充说明

Wrap工具默认会将一些依赖标记为可选,这是为了兼容某些库的可选依赖场景,但对于google-maps-services这种硬依赖okhttp3的库,必须手动强制依赖解析,否则OSGi容器不会主动绑定对应的bundle。


附:你提供的异常堆栈

Caused by: java.lang.NoClassDefFoundError: okhttp3/Authenticator at com.google.maps.GeoApiContext$Builder.&lt;init&gt;(GeoApiContext.java:318)
at com.elavon.nabsd.creditsafe.beans.GooglePlacesAPIContext.&lt;clinit&gt;(GooglePlacesAPIContext.java:11)
at com.elavon.nabsd.creditsafe.beans.AddressParser.getAddress(AddressParser.java:35)
at com.elavon.nabsd.creditsafe.beans.AddressParser.dummyResponse(AddressParser.java:76)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:408)
at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:279)
at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:252)
... 13 more
Caused by: java.lang.ClassNotFoundException: okhttp3.Authenticator not found by wrap_mvn_com.google.maps_google-maps-services_0.9.2 [1180]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 24 more

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:30:34