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:
- Файл -> Структура проекта -> Модули:: Источники (рядом с путями и зависимостями)-> Уровень языка 5
- Файл -> Настройки -> Сборка, выполнение, развертывание -> Компилятор -> Компилятор Java -> Версия байт-кода проекта: 1.5
- Файл проекта IML - JDK 1_5
- Версия компилятора Maven - 1.5
Я в полном недоумении, понимая, почему FileNameUtils 2.2 (и даже 1.6) выдает ошибку неверной основной версии, когда моя версия байт-кода на один уровень ниже, чем 1.6, в которой выполняется код.
Я также пробовал создавать, перестраивать и повторно импортировать зависимости Maven! Я надеюсь, что кто-то может помочь мне решить проблему.
1 ответ
Вот что сработало для меня. Моя конфигурация артефакта в IntelliJ все еще использовала новые версии зависимостей, которые я использовал ранее. Я понял, что мне нужно понизить версии некоторых зависимостей, поэтому я обновил свой pom.xml. Каким-то образом у артефакта не было обновленных версий зависимостей при компиляции.
Я удалил существующий артефакт из моей конфигурации IntelliJ и на этот раз выполнил цель maven. Это помогло получить правильные версии всех зависимостей.