Java Card

时间:2015-08-14 12:38:10

标签: java compilation applet dependencies javacard

我在一个包Applet1中编写了两个不同的项目Java Card 2.2.2 applet firstApplet,在包Applet2中编写了另一个applet secondApplet

我想在第二个applet中使用第一个applet的一些功能。

所以在Applet2中,在将第一个项目添加到第二个项目的Java Build Path之后,它看起来像:

package secondApplet;

import javacard.framework.APDU;
...

import firstApplet.Applet1;

public class Applet2 extends Applet {
 ...
}

首先,使用Java Card工具converter我使用此命令获得.exp文件:

converter -out EXP -exportpath ..\api_export_files -applet AID Applet1 -classdir ..\..\ ... \Applet1\bin firstApplet PID 1.1

其中AID是小程序ID,PID是包ID。它给了我firstApplet.exp没有错误。

此命令的输出为:

parsing C:\ ... \bin\firstApplet\Applet1.class
converting firstApplet.Applet1
writing C:\ ... \bin\firstApplet\javacard\firstApplet.exp

但是,当我尝试获取Applet2的CAP文件时,它会返回错误:

error : secondApplet.Applet2: class firstApplet.Applet1 not found in export file firstApplet.exp.

我真的不知道出了什么问题,我认为.exp生成得很好,我错过了什么?

1 个答案:

答案 0 :(得分:1)

晚了1.5年但仍然有趣的问题。这是我的答案:这是设计的。 如果您的CAP文件中有applet,则导出将不包含公共类(Javacard虚拟机规范,版本3.0.1,第6.12节“导出组件” - 最后一段。)因此,为了做您想做的事情,您需要从Applet1创建一个库包。理论上,您可以在为Applet1创建CAP文件时通过 not 指定applet来实现。这将有两个问题:首先转换器不会让你创建这样“格式错误”的文件,其次你将无法实例化Applet1。

如果你只是想让Applet2像Applet1一样拥有樱桃,最好的方法是将Applet1的机制放到一个抽象类中 - 在另一个包中 - 让Applet1和Applet2都扩展这个抽象类。