Java: JVMCFRE003 плохая основная версия; class=org/apache/commons/io/FilenameUtils, offset=6

Вот полная ошибка:

Exception in thread "main" java.lang.UnsupportedClassVersionError: JVMCFRE003 bad major version; class=org/apache/commons/io/FilenameUtils, offset=6
    at java.lang.ClassLoader.defineClass(ClassLoader.java:275)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:69)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:540)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:451)
    at java.net.URLClassLoader.access$300(URLClassLoader.java:79)
    at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1038)
    at java.security.AccessController.doPrivileged(AccessController.java:284)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:429)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:660)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:626)
......

Я знаю, что это очень распространенная ошибка, но я бы не стал публиковать здесь вопрос, не потратив хотя бы 72 часа, пытаясь решить мою проблему:). Я знаю, почему появляется эта ошибка (я только исправил кучу из них, скомпилировав с правильной версией байт-кода), но это последний из ошибок, от которого я не могу избавиться. Так что моя версия Java такая, как показано ниже (да, я знаю, старые, но организационные ограничения...:p).

java version "1.6.0"
Java(TM) SE Runtime Environment (build pap6460sr9fp2-20110627_03(SR9 FP2))
IBM J9 VM (build 2.4, JRE 1.6.0 IBM J9 2.4 AIX ppc64-64 jvmap6460sr9-
20110624_85526 (JIT enabled, AOT enabled)
J9VM - 20110624_085526
JIT  - r9_20101028_17488ifx17
GC   - 20101027_AA)
JCL  - 20110530_01

Удивительным моментом является то, что я получаю эту ошибку даже с FileNameUtils 2.2, который совместим с JDK 1.5!

Я использую IntelliJ для компиляции. Это места, где я установил свою целевую версию байт-кода на 1.5:

  1. Файл -> Структура проекта -> Модули:: Источники (рядом с путями и зависимостями)-> Уровень языка 5
  2. Файл -> Настройки -> Сборка, выполнение, развертывание -> Компилятор -> Компилятор Java -> Версия байт-кода проекта: 1.5
  3. Файл проекта IML - JDK 1_5
  4. Версия компилятора Maven - 1.5

Я в полном недоумении, понимая, почему FileNameUtils 2.2 (и даже 1.6) выдает ошибку неверной основной версии, когда моя версия байт-кода на один уровень ниже, чем 1.6, в которой выполняется код.

Я также пробовал создавать, перестраивать и повторно импортировать зависимости Maven! Я надеюсь, что кто-то может помочь мне решить проблему.

1 ответ

Решение

Вот что сработало для меня. Моя конфигурация артефакта в IntelliJ все еще использовала новые версии зависимостей, которые я использовал ранее. Я понял, что мне нужно понизить версии некоторых зависимостей, поэтому я обновил свой pom.xml. Каким-то образом у артефакта не было обновленных версий зависимостей при компиляции.

Я удалил существующий артефакт из моей конфигурации IntelliJ и на этот раз выполнил цель maven. Это помогло получить правильные версии всех зависимостей.

Другие вопросы по тегам