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

嵌入非OSGi依赖nimbus-jose-jwt时JAR无法加入OSGi bundle的问题

解决嵌入nimbus-jose-jwt到OSGi Bundle的问题

我之前也碰到过类似的非OSGi依赖嵌入问题,nimbus-jose-jwt确实因为依赖链和OSGi类加载的特性容易出问题,咱们一步步来排查解决:

1. 检查maven-bundle-plugin的完整配置

很多时候问题出在插件配置不完整,你只加了依赖但没正确配置Embed规则。试试下面的完整插件配置,重点关注Embed-Dependency和Embed-Transitive的设置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>5.1.9</version> <!-- 推荐用稳定的最新版本 -->
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>
                    <!-- 明确嵌入nimbus-jose-jwt,指定依赖范围 -->
                    <Embed-Dependency>nimbus-jose-jwt;scope=compile|runtime</Embed-Dependency>
                    <!-- 嵌入它的传递依赖(比如json-smart等,这些是nimbus运行必需的) -->
                    <Embed-Transitive>true</Embed-Transitive>
                    <!-- 导入所有需要的包,排除不必要的系统私有包 -->
                    <Import-Package>
                        *,
                        !sun.misc,
                        !com.sun.*
                    </Import-Package>
                    <!-- 如果你的bundle需要对外暴露nimbus的API,就添加这个导出配置 -->
                    <Export-Package>
                        com.nimbusds.jose.*,
                        com.nimbusds.jwt.*
                    </Export-Package>
                </instructions>
            </configuration>
        </plugin>
    </plugins>
</build>

2. 处理传递依赖的排除(可选)

如果你的OSGi容器里已经存在某些nimbus的依赖(比如json-smart),不想重复嵌入,可以用Embed-Exclude来过滤:

<Embed-Exclude>net.minidev:json-smart</Embed-Exclude>

3. 升级nimbus-jose-jwt版本

你用的5.8版本是比较旧的(目前稳定版已经到9.x),旧版本可能没有考虑OSGi环境的兼容性,存在类加载或者依赖缺失的问题。建议升级到8.x或9.x的稳定版本,比如:

<dependency>
    <groupId>com.nimbusds</groupId>
    <artifactId>nimbus-jose-jwt</artifactId>
    <version>9.37.3</version> <!-- 最新稳定版,对OSGi适配更好 -->
</dependency>

4. 验证嵌入结果

构建后,用jar tf your-bundle.jar命令查看bundle内部,确认BOOT-INF/lib目录下是否包含nimbus-jose-jwt及其依赖的JAR包。如果没有,检查maven的依赖树,确认依赖是否被正确引入:

mvn dependency:tree -Dincludes=com.nimbusds:nimbus-jose-jwt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:18:31