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) автоматически. (отказ от ответственности: я сделал это)

Другие вопросы по тегам