tl;dr
要使用 Java 10,请切换到 Jersey 2.27(这是截至该日期 (10/5/18) 的最新版本)。
java.lang.IllegalArgumentException
at jersey.repackaged.org.objectweb.asm.ClassReader.<init>
Jersey重新打包asm并将这些类文件放入jersey-server
罐。只是在我的 IDE 中挖掘 jar,我查看了ClassReader
构造函数(这就是<init>
意味着)查看抛出 IllegalArgumentException 的位置。请注意,我目前正在查看 Jersey 版本 2.25.1
public ClassReader(byte[] b, int off, int len) {
this.b = b;
if (this.readShort(off + 6) > 53) {
throw new IllegalArgumentException();
}
53 是类文件版本。根据该链接,53 适用于 Java 9。因此看来 Jersey 2.25.1 仅支持 Java 9。因此,我将 Jersey 依赖项版本更改为 2.26,并查看了ClassReader
构造函数和它完全一样。所以我换成 Jersey 2.27,这就是我看到的
public ClassReader(final byte[] b, final int off, final int len) {
this.b = b;
// checks the class version
// added "support" for java 11 compiled classes
if (readShort(off + 6) > Opcodes.V11) {
throw new IllegalArgumentException();
}
注意Opcodes.V11
(我假设是 Java 11)。因此,对于 Java 10+ 支持,您必须切换到 Jersey 2.27,正如中也提到的这个相关问题
Update
查看 pom 后,您需要确保更改所有 Jersey 依赖项上的 Jersey 版本。而且你还有很多不必要的依赖。以下是您所需要的一切。删除名称中含有 Jersey 的任何其他内容。
保留这些
改为2.27
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.27</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.27</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.27</version>
</dependency>
删除这些
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.25</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.25</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json</artifactId>
<version>2.0-m05</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
添加排除
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.13</version>
<exclusions>
<exclusion>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Asides
-
查看球衣迁移指南对于迁移到版本 2.27 时您可能会遇到的一些其他问题
如果您要从 2.26 之前的版本迁移,那么您肯定需要的是jersey-hk2
依赖性。看这个帖子为什么。
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.27</version>
</dependency>