【问题标题】:Eclipse fails to build Java Card sample projectsEclipse 无法构建 Java Card 示例项目
【发布时间】:2018-06-02 18:29:04
【问题描述】:

根据following guide,我已经安装了新版本的Java Card Platform Development Kit。这包括所有先决条件,以及 JCDK 的 3.0.5u2 版本。作为提醒,我尝试在两台不同的计算机上安装它(一台装有 Win7,另一台装有 Win10)并在两台计算机上都重新安装了所有内容。

我遇到的问题是没有一个示例项目可以正确构建。例如,当我尝试构建 HelloWorld 示例时,我会在构建控制台中打印以下文本:

[ INFO: ] Converter [v3.0.5]
[ INFO: ]     Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.

[ INFO: ] conversion completed with 0 errors and 0 warnings.
[ INFO: ] Converter [v3.0.5]
[ INFO: ]     Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.

[ INFO: ] conversion completed with 0 errors and 0 warnings.
Missing file containing component hashes.
usage: scriptgen [-options] -hashfile <hash file path> <cap File Path>
where options include:
-help           Print this message and exit.
-o <filename>   Output filename. default: stdout
-version        Print version number and exit.
-nobanner       Do not print banner.
-nobeginend     Suppress "CAP_BEGIN", "CAP_END" APDU commands.
-package <pkgname>   Package name.

虽然常规控制台有这样的说法:

Executing "$JC_CLASSIC_HOME\bin/converter.bat" -debug -nobanner -out CAP JCA -classdir "$JC_CLASSIC_HOME\samples\classic_applets\HelloWorld\applet\bin" -d "$JC_CLASSIC_HOME\samples\classic_applets\HelloWorld\applet\deliverables" -exportpath "$JC_CLASSIC_HOME\api_export_files" -applet 0xA0:0x00:0x00:0x00:0x62:0x03:0x01:0x0C:0x01:0x01 com.sun.jcclassic.samples.helloworld.HelloWorld com.sun.jcclassic.samples.helloworld 0xA0:0x00:0x00:0x00:0x62:0x03:0x01:0x0C:0x01 1.0
Executing "$JC_CLASSIC_HOME\bin/scriptgen.bat" -package com.sun.jcclassic.samples.helloworld -o "$JC_CLASSIC_HOME\samples\classic_applets\HelloWorld\applet\apdu_scripts/cap-com.sun.jcclassic.samples.helloworld.script" "$JC_CLASSIC_HOME\samples\classic_applets\HelloWorld\applet\deliverables/com/sun/jcclassic/samples/helloworld/javacard/helloworld.cap"
java.io.FileNotFoundException: $JC_CLASSIC_HOME\samples\classic_applets\HelloWorld\applet\apdu_scripts\cap-com.sun.jcclassic.samples.helloworld.script (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    ... (stack trace)

现在,我不能 100% 确定,但我认为当我安装了 3.0.5u1 版本时,我能够构建示例项目。

【问题讨论】:

  • 您确定 $JC_CLASSIC_HOME 扩展良好吗?我不希望它在异常中按名称出现...检查您的环境变量,并设置变量!
  • 不完全确定您所说的扩展是什么意思,但我在上面的帖子中使用 $JC_CLASSIC_HOME 作为我实际路径的占位符。 JC_CLASSIC_HOME确实是一个环境变量,指向C:\Program Files (x86)\Oracle\Java Card Development Kit 3.0.5u2\。
  • DOS/Windows 使用%JC_CLASSIC_HOME%。我仍然认为这只是环境。变量。

标签: eclipse build javacard


【解决方案1】:

Java Card Classic Development Kit 3.0.5u2 (jcdk) Eclipse Plugin 的构建过程似乎被破坏了。在构建 java 卡小程序期间,将执行位于 jcdk 安装目录的 bin 子目录中的三个脚本(如果使用 eclipse 中的默认小程序设置):

  1. converter.bat 生成导出文件 *.exp
  2. converter.bat 生成 cap(和 jca)文件
  3. scriptgen.bat 生成用于将小程序安装到 java 卡的脚本文件。

问题是,scriptgen 需要一个包含小程序组件哈希的哈希文件。反编译 jcdk lib 文件夹下 tools.jar 的类 com.sun.javacard.scriptgen.Main 可以看到。

在 Eclipse 构建过程中不会生成此哈希文件,也不会使用相应的程序选项“-hashfile ”调用 scriptgen 脚本。目前唯一的解决方法是手动使用控制台上的 jcdk 工具。因此,您可以在 Eclipse 中使用控制台的输出并根据您的需要采用它。

简单测试小程序的示例输出:

Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/converter.bat -i -debug -out EXP -classdir G:\eclipse_javacard\workspace\TestJCDKApplet\bin -d G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables -exportpath E:\eclipse-oxygen-64bit\JCDKit_305u2\\api_export_files -applet 0xD0:0x00:0x00:0x00:0x01:0x01:0x01 test.jcdk.applet.TestApplet test.jcdk.applet 0xD0:0x00:0x00:0x00:0x01:0x01 1.0
Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/converter.bat -i -debug -out CAP JCA -classdir G:\eclipse_javacard\workspace\TestJCDKApplet\bin -d G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables -exportpath E:\eclipse-oxygen-64bit\JCDKit_305u2\\api_export_files -applet 0xD0:0x00:0x00:0x00:0x01:0x01:0x01 test.jcdk.applet.TestApplet test.jcdk.applet 0xD0:0x00:0x00:0x00:0x01:0x01 1.0
Executing E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/scriptgen.bat -package test.jcdk.applet -o G:\eclipse_javacard\workspace\TestJCDKApplet\apdu_scripts/cap-test.jcdk.applet.script G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables/test/jcdk/applet/javacard/applet.cap

修改生成需要的脚本文件(只列出最后两个,前两个脚本不改):

    G:\eclipse_javacard\workspace\TestJCDKApplet>E:\eclipse-oxygen-64bit\JCDKit_305u2\bin\verifycap.bat -outfile applet.hash E:\eclipse-oxygen-64bit\JCDKit_305u2\api_export_files\java\lang\javacard\lang.exp E:\eclipse-oxygen-64bit\JCDKit_305u2\api_export_files\javacard\framework\javacard\framework.exp .\deliverables\test\jcdk\applet\javacard\applet.exp .\deliverables\test\jcdk\applet\javacard\applet.cap
[ INFO: ] Verifier [v3.0.5]
[ INFO: ]     Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.


[ INFO: ] Verifying CAP file .\deliverables\test\jcdk\applet\javacard\applet.cap
[ INFO: ] Digest for test/jcdk/applet/javacard/Header.cap               [SHA-256: 22e589e7bbb45e420c2a17d5b8abcc437c52f00ecfb15b48ed3257f87eff62f9]
[ INFO: ] Digest for test/jcdk/applet/javacard/Directory.cap            [SHA-256: bc72a8594664c9720c38afab7c87b7dda894088f53faefcac548463a4186fbe9]
[ INFO: ] Digest for test/jcdk/applet/javacard/Import.cap               [SHA-256: e58492b256b4af8d7f1860f18e57c5336e254a618c2518c987dcefb33db0a8d0]
[ INFO: ] Digest for test/jcdk/applet/javacard/ConstantPool.cap         [SHA-256: 6c5bf615cd3746d52c815e8264b910a41a94217161862a7520087799fd03098b]
[ INFO: ] Digest for test/jcdk/applet/javacard/StaticField.cap          [SHA-256: 1ec76ec50280f5d8822179bb1b268ae7c2383d9fbe4d6c2beb427090dbf53dfd]
[ INFO: ] Digest for test/jcdk/applet/javacard/RefLocation.cap          [SHA-256: b2b3f5e23eee662b8c406212d5cb291959a8eeddb92e58b9a45941c0b91388be]
[ INFO: ] Digest for test/jcdk/applet/javacard/Descriptor.cap           [SHA-256: 292e4bd46d836b8501a19a9ea92b1ec976eca1b4920bb03499236284d17be2d7]
[ INFO: ] Digest for test/jcdk/applet/javacard/Class.cap                [SHA-256: 6c68abd77e3481a00ae2462cfc8f416ae38d4d0e4b02c685145c39d30d132526]
[ INFO: ] Digest for test/jcdk/applet/javacard/Debug.cap                [SHA-256: 7341f35fee494363bb8b84e8c132399a33a0bb4d39fd9192e92be680c08019d3]
[ INFO: ] Digest for test/jcdk/applet/javacard/Method.cap               [SHA-256: 651231359c6bb65fbcb0e3a49f52cee1a682ed7e97610365b374583638757365]
[ INFO: ] Digest for test/jcdk/applet/javacard/Applet.cap               [SHA-256: e1de8850f009796b9b991757dd378353128e10d4bc6400e5bbd970516bf187f1]
[ INFO: ] Verification completed with 0 warnings and 0 errors.

(注意:你必须添加小程序使用的jcdk导出文件的路径,这些你可以通过在java卡包设置中激活详细输出并在控制台输出中搜索引用的exp文件来找到。)

然后您至少可以使用以下命令生成安装脚本:

G:\eclipse_javacard\workspace\TestJCDKApplet>E:\eclipse-oxygen-64bit\JCDKit_305u2\bin/scriptgen.bat -package test.jcdk.applet -o 

G:\eclipse_javacard\workspace\TestJCDKApplet\apdu_scripts/cap-test.jcdk.applet.script G:\eclipse_javacard\workspace\TestJCDKApplet\deliverables/test/jcdk/applet/javacard/applet.cap -hashfile applet.hash
ScriptGen [v3.0.5]
    Copyright (c) 1998, 2017, Oracle and/or its affiliates. All rights reserved.


APDU script file for CAP file download generated.

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 2017-11-16
    • 2016-05-25
    • 1970-01-01
    相关资源
    最近更新 更多