UnsupportedClassVersionError при использовании Jmockit в проекте Java 1.5

Я пытаюсь использовать JMockit в тесте JUnit, но получаю UnsupportedClassVersionError при запуске тестов из Eclipse. Это проект Java 1.5, и у меня есть JDK 1.5.0.22 в пути сборки, а версия JUnit в пути к классу — 4.11 (загружено из репозитория maven)

java.lang.UnsupportedClassVersionError: Bad version number in .class file
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
   at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
   at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
   at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:133)

Я просмотрел инструкции по установке JMockit и внес следующие изменения:

  1. Укажите jmockit.jar перед Junit.jar в пути к классам.
  2. Передайте jmockit.jar в качестве параметра инициализации JVM.
  3. В проекте используется JRE из установки JDK вместо «обычной» JRE.

Настройки компилятора Java для проекта Eclipse

Запустить конфигурацию для проекта

Я потратил много часов, пытаясь исправить это :(, но безуспешно. Пожалуйста, дайте мне знать, если у вас есть решение для этого? Что мне здесь не хватает?


person Karthik    schedule 07.01.2015    source источник


Ответы (1)


Вы не указали, какую версию JMockit вы используете; однако мне кажется, что вы сталкиваетесь с этим:

From this version on, JMockit requires Java 6 or newer when running tests;
JRE 1.5 is no longer supported. Note that this only applies to the JRE/JDK
used for test  execution; class files compiled  for older versions of Java
are still supported.

Это JMockit 1.8, выпущенный в апреле прошлого года.

Этого, кстати, следовало ожидать, поскольку Java 1.5 публично не поддерживается уже более пяти лет.

person dcsohl    schedule 07.01.2015
comment
Спасибо @dcsohl. Ваш ответ помог мне решить эту проблему. Я использовал Jmockit 1.14, поэтому просто заменил JDK 5 в пути сборки на JRE 6, и теперь JUnit вместе с JMockit отлично работает. Большое облегчение после дневной борьбы. Похоже, я изначально двигался в неправильном направлении, просматривая все те статьи, в которых указывались обходные пути, позволяющие заставить Jmockit работать с Java 1.5, но этого так и не произошло. Было ли указано где-нибудь на веб-странице JMockit / в файле readme / установочном документе, что он не поддерживается для Java 1.5. Я пропустил это? - person Karthik; 07.01.2015
comment
Это не было выделено; Пришлось копать. Это упоминается только на странице изменений, на которую я ссылался выше (начиная с JMockit 1.8). - person dcsohl; 07.01.2015