Eclipse IDE 能够生成 javacard cap 文件,但在命令行中我遇到了此错误



下面的错误迫使我在不使用 IDE 的情况下在命令行中深入研究 cap 文件的构建过程。所以现在,我可以使用java/javac系列命令从命令行构建一个cap文件。但是我有一个小程序,如果通过 eclipse IDE 构建,它成功地创建了一个 cap 文件,但是当我尝试在命令行中构建时遇到错误。当我尝试正确设置gradle构建设置/环境时,我也遇到了同样的错误。这是错误:

[ant:convert] [ INFO: ]     Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
[ant:convert]
[ant:convert]
[ant:convert] warning: You did not supply export file for the previous minor version of the package
[ant:convert] [ INFO: ] conversion completed with 1 errors and 1 warnings.
[ant:convert] error: Class org/dx/tools/TestApplet, specified in -applet option, is abstract.

请注意,这是一个工作和测试的小程序,与其他使用此小程序的小程序结合使用。这在 eclipse IDE 中构建。

我也能够生成.class文件。问题出在将类文件转换为cap文件的过程中。

下面是它的外观:

package org.dx.tools;
import org.globalplatform.GPSystem;
import org.globalplatform.SecureChannel;
import javacardx.apdu.ExtendedLength;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.Util;
import javacard.framework.APDU;
import javacard.framework.APDUException;
import javacard.framework.Applet;
import javacard.framework.AppletEvent;    
public abstract class TestApplet extends Applet implements AppletEvent, 
ExtendedLength {
...
}

这个.cap是其他五个中的一个。其他的不是抽象的,而是继承自这个。由于它是在 eclipse IDE 中构建的,因此我实际上可以通过获取 IDE 产生的输出来构建其他 cap 文件。首先,我jar类,因为正如我所说,我可以创建类并馈送到转换命令java以构建其他上限,并且我还使用 IDE 生成的TestApplet.exp

更新: 2019/11/17这是能够从.class构建到.cap的实际java命令选项。我完全是从Eclipse IDE转换日志中获取的。

如果答案可以确认这是当前的 gradle 限制,那么我将接受这个答案。如果答案可以显示正确的 gradle 设置是什么以使其工作,那么我将接受这个答案。谢谢。

这很可能是由于链接到库的较新或较旧版本,同时在构建过程中针对不同的 Java Card 版本。请注意,转换器会创建预链接的代码,因此它希望链接到正确的版本。

这与 Java SE 不同,Java SE 中的类可以在运行时链接,方法和字段的位置无关紧要,因为它们是在运行时创建的。

我已经通过删除build.gradle中的applet {}块解决了这个问题。由于正在构建的特定帽是一个抽象类,因此它没有小程序辅助。

相关内容

最新更新