tl; dr
Чтобы использовать Java 10, переключитесь на Джерси 2.27 (последний на эту дату (10/5/18)).
java.lang.IllegalArgumentException
at jersey.repackaged.org.objectweb.asm.ClassReader.<init>
Джерси перепаковывает asm и помещает эти файлы классов в jersey-server
банку.Просто копаясь в банке в моей IDE, я посмотрел на конструктор ClassReader
(это то, что означает <init>
), чтобы увидеть, где выбрасывается IllegalArgumentException.Обратите внимание, я в настоящее время смотрю на Джерси версии 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
, и он был точно таким же.Поэтому я переключился на Джерси 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+ вы должны переключиться на Джерси 2.27, как также упоминалось в этой связанной проблеме
Обновление
После просмотра вашего pom, вам нужно убедиться, что вы меняете версию Джерси на всех ваших зависимостях Джерси.А также у вас есть так много ненужных зависимостей.Следующее все, что вам нужно.Удалите все, что имеет имя Джерси.
СОХРАНИТЕ ЭТИ
Измените на 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>
В сторону
См. Руководство по миграции на Джерси для некоторых других проблем, с которыми вы можете столкнуться при переходе на версию 2.27
Если вы переходите с версии до 2.26, вам наверняка понадобится зависимость jersey-hk2
.См. этот пост почему.
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.27</version>
</dependency>