JJWT 依赖混淆

7

我继承了一个Java项目,它在POM.xml中有这个内容:

<properties>
    <jjwt.version>0.11.1</jjwt.version>
</properties>

// from https://github.com/jwtk/jjwt#maven
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>${jjwt.version}</version>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>${jjwt.version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
    <version>${jjwt.version}</version>
    <scope>runtime</scope>
</dependency>

// what is this "jjwt" dep, and why might it be using a different version?
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version> 
</dependency>

这个"jjwt"依赖是什么,为什么会使用不同的版本?
我在https://github.com/jwtk/jjwt上没有看到任何提及。
但它在这里:https://mvnrepository.com/artifact/io.jsonwebtoken
1个回答

9
在JJWT版本0.10.0之前,API和实现都打包在单个构件中,名称为io.jsonwebtoken:jjwt
从版本0.10.0开始,API和实现被分成两个不同的构件。
来自JJWT版本0.10.0的发布说明摘录
JJWT的新模块化设计利用编译依赖和运行时依赖之间的区别,以确保您仅依赖于安全用于应用程序的公共API。所有内部/私有实现类都已移动到新的jjwt-impl运行时依赖项中。
如果过去依赖于任何内部实现类,则有两个选择:
1. 重构代码以使用jjwt-api .jar中的仅公共API类和接口。您可能已在该.jar中使用了内部实现的任何功能,可以通过那里的更新更清晰的接口和辅助类获得。
2. 将新的jjwt-impl .jar指定为编译依赖项而非运行时依赖项。这将使您升级到JJWT 0.10.0完全向后兼容,但风险由您承担。 JJWT将不对jjwt-impl .jar的语义版本兼容性提供任何保证。但是,在所有其他JJWT依赖关系中,将非常仔细地遵守语义版本控制。
我猜测您的项目团队只是没有完成从JJWT <= 0.9到JJWT >= 0.10的升级。

我在发布说明中错过了这个。这正是我想到的情况,但我想确认一下。谢谢提供链接。 - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接