0

这是完整的错误:

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

令人惊讶的是,即使使用与 JDK 1.5 兼容的 FileNameUtils 2.2,我也会收到此错误!

我正在使用 IntelliJ 进行编译。这些是我将目标字节码版本设置为 1.5 的地方:

  1. 文件 -> 项目结构 -> 模块 :: 源(在路径和依赖项旁边)--> 语言级别 5
  2. 文件 -> 设置 -> 构建、执行、部署 -> 编译器 -> Java 编译器 -> 项目字节码版本:1.5
  3. 项目 iml 文件 - JDK 1_5
  4. Maven 编译器版本 - 1.5

当我的字节码版本比运行代码的 1.6 低一个完整级别时,我完全无法理解为什么 FileNameUtils 2.2(甚至 1.6)会引发错误的主要版本错误。

我也尝试过构建、重建和重新导入 Maven 依赖项!我希望有人能帮我解决这个问题。

4

1 回答 1

0

这对我有用。我在 IntelliJ 中的工件配置仍在提取我之前使用的更新的依赖版本。我意识到我需要降级一些依赖项的版本,所以我更新了我的 pom.xml。不知何故,该工件在编译时没有刷新的依赖版本。

我从我的 IntelliJ 配置中删除了现有的工件,这次执行了一个 maven 目标。这有助于提取所有依赖项的正确版本。

于 2018-03-27T21:27:55.403 回答