Задание второстепенной версии в eclipse соответствия JDK

Моя версия JDK jdk1.8.0_45, и я создал приложение, использующее стандартную настройку JDK Compliance в eclipse.

Но у моего коллеги есть JRE с версией jre1.8.0_20. Поэтому, когда мое приложение запускается в его системе, оно бросает

java.lang.UnsupportedClassVersionError Unsupported major.minor version 52.0

Если я создаю приложение с соблюдением JDK, равным 1.7, он отлично работает. Но я не хочу потерять все функции JDK 8 только для несоответствия малой версии.

И в eclipse я не могу установить уровень соответствия второстепенной версии. Можно ли установить его?

Или Java переадресован с небольшими версиями версий? Если это так, очевидно, эта ошибка не должна произойти, я верю.

Ответ 1

Согласно this, версия 52.0 - JDK-8. Кажется, что его число скомпилировано в файлы .class в зависимости от JDK. JDK-7 имеет 51, JDK-6 имеет 50 и т.д.

Я бы сказал, что выполнение на вашей машине колледжа не использовало JDK/JRE 8.

Попробуйте запустить java -XshowSettings на компьютере collegues и проверьте вывод строки java.class.version - если в JDK 7 будет отображаться java.class.version = 51.0.

Ответ 2

Вы должны указывать зависимость от версии среды исполнения "Исполнение-среда", а не конкретную версию Java.

Для плагина в манифесте .mf укажите среду выполнения: JavaSE-1.8

Для простого проекта java в "Build Path...- > Configure BuildPath" перейдите в "Библиотеки", затем "Добавить библиотеку", "JRE System Library", "Execution Environment" и выберите JavaSE-1.8. Удалите любую другую JRE по пути.

Это говорит о затмении, найдите JRE, совместимый с Java >= 1.8.

Ответ 3

  • Загрузить JRE 1.8.0_20

  • Затем укажите JRE 1.8.0_20 Eclipse IDE, что-то вроде этого:

    enter image description here

  • Затем заново создайте приложение.

(Ваша проблема не является ошибкой: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8124517)

Ответ 4

Java известна как обратная совместимость, означающая, что любое приложение, которое вы создаете в старше jdk , будет запущено в новом jdk:

Построение приложения в jdk1.6 или jdk1.7 будет работать при работе с jdk1.8; к сожалению, это не работает наоборот...

Малые релизы рассматриваются как новые версии jdk, и проблемы совместимости действительно применяются.

Ответ 5

Ни в коем случае.

Просто установите jdk1.8.0_20 и выберите его в Установленный JRE.

Ответ 6

Ошибка возникает только при изменении основных версий, например, от 6 до 7 или от 7 до 8. Это не происходит для незначительного изменения версии, как у вас. И ошибка 52 предназначена для запуска кода JDK8 в JRE7. Поэтому дважды проверьте настройки и установите JRE8 в качестве среды выполнения.

Ответ 7

Я и мой коллега столкнулись с этим при использовании версий J32 и x32 и x64. Он использует Mac, поэтому доступен только x64 (для Java 8), я использую M $и имею обе версии. Мы должны разработать на 64-битных версиях, иначе мы увидим ту же ошибку, что и вы...

Ответ 8

Вы можете

(a) установите 1.8.0_20 в вашу систему и проверьте версию класса полученных файлов классов с приведенным ниже кодом или

(b) создайте приложение в своей системе коллег и проверьте полученную версию класса с помощью кода ниже.

public void checkClassVersion(File classFile) throws IOException{

    DataInputStream in = new DataInputStream(new FileInputStream(file));

    int magic = in.readInt();
    if(magic != 0xcafebabe) {
        System.err.println(file.getName() + " is not a valid class!");;
    }
    int minor = in.readUnsignedShort();
    int major = in.readUnsignedShort();
    in.close();

    System.out.println(classFile.getName()+" = "+major+"."+minor);
}