运行 在 Karaf (OSGi) 中,JJWT 版本 0.11.1 无法加载 class io.jasonwebtoken.impl.crypto.MacProvider
Running in Karaf (OSGi) with JJWT version 0.11.1 getting Unable to load class io.jasonwebtoken.impl.crypto.MacProvider
运行 在 Karaf (OSGi) 中无法加载 class io.jasonwebtoken.impl.crypto.MacProvider
jjwt的版本是0.11.1
我的包包括 jjwt-api(提供)和 jjwt-jackson(编译),我有 jjwt-impl 运行 作为一个包。
我是否需要创建一个 "mega-bundle" 才能完成这项工作?
所以,我成功了,但并不理想。
首先,jjwt-impl,虽然有所有普通的 OSGi 标签,但不导出任何东西。
所以,我不得不做两件事 - 非常糟糕,但我想不出还有什么办法:
1) 将围绕签名方法调用的线程-class-加载程序替换为当前包 class-加载程序。
2) 在调用 osgi 包中嵌入 jjwt-impl 并导出:
<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>
这已在 JJWT 0.11.2 中修复。请升级。 :)
我使用了 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>
运行 在 Karaf (OSGi) 中无法加载 class io.jasonwebtoken.impl.crypto.MacProvider
jjwt的版本是0.11.1
我的包包括 jjwt-api(提供)和 jjwt-jackson(编译),我有 jjwt-impl 运行 作为一个包。
我是否需要创建一个 "mega-bundle" 才能完成这项工作?
所以,我成功了,但并不理想。
首先,jjwt-impl,虽然有所有普通的 OSGi 标签,但不导出任何东西。
所以,我不得不做两件事 - 非常糟糕,但我想不出还有什么办法:
1) 将围绕签名方法调用的线程-class-加载程序替换为当前包 class-加载程序。
2) 在调用 osgi 包中嵌入 jjwt-impl 并导出:
<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>
这已在 JJWT 0.11.2 中修复。请升级。 :)
我使用了 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>