java.lang.NoClassDefFoundError: io/jsonwebtoken/Jwts - maven spring-boot

java.lang.NoClassDefFoundError: io/jsonwebtoken/Jwts - maven spring-boot

java.lang.NoClassDefFoundError: io/jsonwebtoken/Jwts

当我 运行 在本地使用 mvn spring-boot:运行 时,没有问题。

但是当我使用 mvn clean install 将我的应用程序打包到一个完全可执行的 jar 中,然后 运行 将 jar 作为 systemd 服务时,我得到了上面看到的这个错误。

来自这一行:

String user = Jwts.parser()...

一些信息: 出现问题的包版本:0.11.1 平台:Ubuntu 18.04 maven中的相关依赖pom.xml:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.1</version>
</dependency>

我也检查了生成的jar文件,依赖jjwt-impl.0.11.1是存在的:

BOOT-INF.lib.jjwt-impl-0.11.1.jar
BOOT-INF.lib.jjwt-api-0.11.1.jar
BOOT-INF.lib.jjwt-jackson-0.11.1.jar

不知道如何解决这个问题。我认为只需将 io.jsonwebtoken 添加到 Maven 依赖项就可以解决与类路径等相关的所有问题。

我正在应用 spring-boot-maven-plugin 包来创建 jar 并命令 mvn clean install 来创建完全可执行的 jar 文件。

当我从 jar 应用程序中打印出类路径时,它只指向该 jar 文件本身,没有其他地方。我不确定这是否应该如此。我认为所有的依赖项都应该编译到同一个 jar 中,所以在这个意义上它是有意义的。

也在这里向官方 jjwt 库发出了一个问题:https://github.com/jwtk/jjwt/issues/599 但这可能是与 spring-boot?

更多相关的问题

通过更新 maven 包 spring-boot-starter-parent 从 1.5.2.RELEASE 到 2.3.0.RELEASE 版本

解决了这个问题

下面在 java V18 中为我工作,引用自 Link

<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-gson</artifactId>
            <version>0.11.2</version>
            <scope>provided</scope>
        </dependency>