Не удалось отсканировать файл jar: неверное магическое число

#java #gradle #swagger

#java #gradle #развязность

Вопрос:

Я пытаюсь сгенерировать swagger из интерфейса в моем проекте. Я пишу новую задачу в gradle, которая собирает спецификации. При попытке прочитать jar или отсканировать файл jar выдается ошибка типа

 DEBUG org.reflections.Reflections - could not scan file META-INF/MANIFEST.MF in url jar<JAR URL>

org.reflections.ReflectionsException: could not create class object from file META-INF/MANIFEST.MF

Caused by: org.reflections.ReflectionsException: could not create class file from MANIFEST.MF
    at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:102)
    at org.reflections.adapters.JavassistAdapter.getOfCreateClassObject(JavassistAdapter.java:24)
    at org.reflections.scanners.AbstractScanner.scan(AbstractScanner.java:30)
    ... 62 common frames omitted
  

Кто-нибудь, пожалуйста, может помочь мне в этом? Это основной блокиратор для моего проекта.

Комментарии:

1. во вставленной трассировке стека нет ничего о неверном магическом числе (что-то было усечено?) но магическое число всегда означает, что скомпилированные классы имеют более высокую версию, чем java, с которой вы пытаетесь его запустить. Пожалуйста, укажите точное имя и версию jar и версию java, с которой вы пытаетесь запустить. Также, если вы посмотрите на упомянутый манифест, он иногда содержит информацию о java, используемой для компиляции

2. Я использую версию Java, совместимую с исходным кодом, как 8 в моем файле gradle. Но я не знаю, как найти java-версию скомпилированных файлов классов, а также у меня есть около 40 зависимых библиотек.

3. Что ж, в сообщении говорится об этом: «не удалось создать объект класса из файла META-INF / MANIFEST.MF» — почему он пытается создать класс из текстового файла, было бы проблемой для решения.

4. @Thomas, если записи манифеста не содержат сведений о загружаемом классе, таком как java agent. Вот почему OP следует просмотреть содержимое манифеста, используя какое-либо стандартное программное обеспечение для разархивирования, или для Windows, изменив расширение на .zip и открыв

5. @maslan да, это может быть так. Однако это означало бы, что манифест будет использоваться для создания / анализа других файлов, а не для попытки создать класс из самого манифеста.

Ответ №1:

Обнаружена проблема: я использовал плагин swagger core 2.5.0 с совместимостью исходного кода Java как 8.1. Затем я изменил версию плагина 2.7.0, после чего он работал нормально, без ошибок. Похоже, в 2.5.0 есть какая-то проблема. Спасибо, ребята, за ответ.

Комментарии:

1. Реализации swagger 1.x имеют ту же проблему

Ответ №2:

Спасибо за ваши советы. У меня возникла та же проблема при использовании cxf-rt-rs-service-description-swagger 3.2.0. (зависимость reflections-0.9.11.jar ) Наконец, требуется понижение версии до 3.1.13 (зависимость reflections-0.9.10.jar ).