我有一个依赖于 Netflix Feign 和 Glassfish Jersey 实现的项目。
Feign 使用 JAX-RS (JSR 311) 的 1.1 规范,glassfish jersey 实现使用 2.0 规范。2.0 是向后兼容的,但Gradle 依赖名称已更改。
因此,我的项目中有两个依赖项:
- javax.ws.rs:jsr311-api:1.1.1
- javax.ws.rs:javax-ws-rs-api:2.0.1
两者都在相同的包中实现相同的类,但一个根据 1.x,一个根据 2.x
在我的 Java 代码中,我只能指出类名和包。
我可以告诉 Gradle 这实际上是同一个包,尽管名称不同,并且只能在类路径中获得一组实现类吗?
现在,JVM 和编译器选择哪个版本的类是随机的。有时它不编译,有时它编译但不运行(MethodNotFoundException)。