Java Card Converter: неподдерживаемый формат файла класса версии 50.0
Я пытаюсь сгенерировать файл CAP и файл экспорта из Wallet.java, который входит в стандартную комплектацию Java Card SDK в каталоге примеров. Я компилирую класс, использую конвертер и сталкиваюсь со следующим:
$ javac -g -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java
$ converter -debug -verbose -classdir "$JC_HOME/samples/src" com.sun.javacard.samples.wallet 0xa0:0x0:0x0:0x0:0x62:0x3:0x1:0xc:0x6:0x1 1.0
Java Card 2.2.2 Class File Converter, Version 1.3
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
parsing /home/user/javacard/java_card_kit-2_2_2/samples/src/com/sun/javacard/samples/wallet/Wallet.class
error: com.sun.javacard.samples.wallet.Wallet: unsupported class file format of version 50.0.
conversion completed with 1 errors and 0 warnings.
Моя версия Java и версии Java одинаковы, Java 1.6:
$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
$ javac -version
javac 1.6.0_45
Я использую JC SDK 2.2.2 в Ubuntu 14.04. Версия конвертера 1.3:
$ converter -version
Java Card 2.2.2 Class File Converter, Version 1.3
Copyright 2005 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.
Я не могу решить эту ошибку "неподдерживаемый формат файла класса версии 50.0". Я немного озадачен тем, почему я сталкиваюсь с этой ошибкой, учитывая, что Java 1.6 является версией 50.0.
Кто-нибудь еще сталкивался с такой же проблемой?
2 ответа
Конвертер Java Card 2.2.2 поддерживает максимум формат файла класса Java 5 (следовательно, он говорит вам, что Java 6/ версия 50.0 не поддерживается). Таким образом, вам нужно указать исходную версию файла совместимости / класса при компиляции исходного кода с использованием более новых версий JDK:
javac -g -source 1.5 -target 1.5 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java
Аналогично, для Java Card 2.2.1 вы должны использовать версию 1.2:
javac -g -source 1.2 -target 1.2 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java
А для Java Card 2.1.1 (JC SDK 2.1.2) вы должны использовать версию 1.1:
javac -g -source 1.1 -target 1.1 -d classes/ src/com/sun/javacard/samples/wallet/Wallet.java
Вы можете проверить версию файла класса с помощью дизассемблера файлов классов Java (спасибо cmanning за упоминание этого):
javap -v -cp classes/ com.sun.javacard.samples.wallet.Wallet |grep 'version'
Возможно, вы захотите взглянуть на ant-javacard, который делает такие вещи (например, флаги компилятора в зависимости от версии JC SDK) автоматически. (отказ от ответственности: я сделал это)