【问题标题】:Running in Karaf (OSGi) with JJWT version 0.11.1 getting Unable to load class io.jasonwebtoken.impl.crypto.MacProvider使用 JJWT 版本 0.11.1 在 Karaf (OSGi) 中运行无法加载类 io.jasonwebtoken.impl.crypto.MacProvider
【发布时间】:2020-09-24 23:55:27
【问题描述】:

在 Karaf (OSGi) 中运行时无法加载类 io.jasonwebtoken.impl.crypto.MacProvider

jjwt的版本是0.11.1

我的包包括 jjwt-api(提供)和 jjwt-jackson(编译),我有 jjwt-impl 作为包运行。

我需要创建一个“大型捆绑包”来完成这项工作吗?

【问题讨论】:

  • 抱歉,0.11.1 版本与 JJWT 相关,而不是 Karaf :(

标签: osgi classloader jjwt


【解决方案1】:

这已在 JJWT 0.11.2 中修复。请升级。 :)

【讨论】:

  • 谢谢你。我看看能不能进入这个循环!
【解决方案2】:

所以,我得到了这个工作,但并不理想。

首先,jjwt-impl 虽然拥有所有正常的 OSGi 标签,但不会导出任何内容。

所以,我必须做两件事 - 非常糟糕,但我不知道还有什么办法:

1) 将围绕签名方法调用的线程类加载器替换为当前包类加载器。

2) 将 jjwt-impl 嵌入到调用的 osgi 包中并导​​出:

<Embed-Dependency>*;scope=runtime;inline=true</Embed-Dependency>
<Embed-Transitive>false</Embed-Transitive>

 <Export-Package>
     {local-packages},
     io.jsonwebtoken,
     io.jsonwebtoken.lang,
     io.jsonwebtoken.impl.crypto
 </Export-Package>

【讨论】:

【解决方案3】:

我使用了 Peter Berkman 方法并进行了一些修改。

在 pom.xml 中

        <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-api</artifactId>
        <version>0.11.2</version>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-impl</artifactId>
        <version>0.11.2</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt-jackson</artifactId>
        <version>0.11.2</version>
        <scope>runtime</scope>
    </dependency>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                <Karaf-Commands>org.foo.app</Karaf-Commands>
                            <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                <Karaf-Commands>org.foo.app</Karaf-Commands>
                <!-- dependencies inside the bundle -->
                <Embed-Dependency>*;scope=runtime;inline=true</Embed-Dependency>
                <Export-Package>
                    {local-packages},
                    io.jsonwebtoken,
                    io.jsonwebtoken.lang,
                    io.jsonwebtoken.impl.crypto
                </Export-Package> -->
                </instructions>
            </configuration>
        </plugin>
                <Embed-Dependency>*;scope=runtime;inline=true</Embed-Dependency>
                </instructions>
            </configuration>
        </plugin>

在 features.xml 中

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"name="${project.artifactId}-${project.version}">
    <feature name="${project.artifactId}" version="${project.version}"
             description="${project.description}">
    <feature>onos-api</feature>
    <bundle>mvn:io.jsonwebtoken/jjwt-api/0.11.2</bundle>
    <bundle>mvn:io.jsonwebtoken/jjwt-impl/0.11.2</bundle>
    <bundle>mvn:io.jsonwebtoken/jjwt-jackson/0.11.2</bundle>
    <bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>

</feature>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 2016-09-30
    • 2016-07-13
    • 1970-01-01
    • 2014-03-11
    • 2015-07-08
    • 2011-08-08
    • 2022-10-08
    相关资源
    最近更新 更多