Java卡中的Exp文件和小程序依赖项

Java卡中的Exp文件和小程序依赖项,java,compilation,applet,dependencies,javacard,Java,Compilation,Applet,Dependencies,Javacard,我在两个不同的项目Java Card 2.2.2中编写了一个appletApplet1包firstApplet,另一个appletApplet2包secondApplet 我想在第二个小程序中使用第一个小程序的一些功能 因此,在Applet2中,将第一个项目添加到第二个项目的Java构建路径后,它看起来像: package secondApplet; import javacard.framework.APDU; ... import firstApplet.Applet1; public

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

我想在第二个小程序中使用第一个小程序的一些功能

因此,在
Applet2
中,将第一个项目添加到第二个项目的Java构建路径后,它看起来像:

package secondApplet;

import javacard.framework.APDU;
...

import firstApplet.Applet1;

public class Applet2 extends Applet {
 ...
}
首先,使用Java卡工具
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.5年,但仍然是一个有趣的问题。我的答案是:这是设计的。 如果CAP文件中有小程序,那么导出将不包含公共类(Javacard虚拟机规范,版本3.0.1,第6.12节“导出组件”-最后一段)。因此,为了完成您想做的事情,您需要从小程序1中创建一个库包。理论上,可以通过在为Applet1创建CAP文件时不指定applet来实现。这将有两个问题:第一,转换器不允许您创建这种“格式错误”的文件,第二,您将无法实例化Applet1


如果您只是想让Applet2像Applet1一样,上面有樱桃,那么最好的方法是将Applet1的机制放在一个抽象类中,并放在另一个包中,让Applet1和Applet2都扩展这个抽象类

在构建Applet2时,您是否将生成的exp文件放在了正确的位置?是的,我认为它位于正确的位置,因为我尝试移动它,然后收到错误消息:
firstApplet.exp未找到
您是否使用了
-exportpath
设置为
C:\…\bin
?你能提供编译Applet2的命令吗?我没有,但是现在我有另一个错误。因此,获取Applet2的CAP文件的命令行是:
converter-out CAP-exportpath..\api\u export\u files C:\..\bin-applet 0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09:0x00:0x00 Applet2-classdir\Applet2\bin secondApplet 0x01:0x02:0x03:0x04:0x05:0x06:0x07:0x08:0x09 1.1
我得到
错误:无效的辅助-applet
,但我选中了,它是正确的辅助(与Applet1不同)。我怀疑这是因为我在
-exportpath
选项中添加了两个参数,但是如果我调用它两次,就会删除以前的调用。。。Ty预先使用分号分隔路径:
-exportpath..\api\u export\u文件;C:\…\bin