Eclipse IDE 能够生成 javacard cap 文件,但在命令行中我遇到了这个错误
The Eclipse IDE is able to generate the javacard cap file but in command line I am encountering this error
下面的错误迫使我在不使用 IDE 的情况下在命令行中深入研究 cap 文件的构建过程。所以现在,我可以使用 java/javac 系列命令从命令行构建一个 cap 文件。但是我有一个小程序,如果通过 eclipse IDE 构建,它成功创建了一个 cap 文件,但是当我尝试在命令行中构建时遇到错误。当我尝试正确设置 gradle 构建 settings/environment 时,我也遇到了同样的错误。这是错误:
[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
文件。问题出在将 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
classes 因为正如我所说,我可以创建 classes 并提供给 java
转换命令来构建其他上限,而且我还使用TestApplet.exp
即 IDE 生成的。
更新:2019/11/17
Here 是能够从 .class
构建到 .cap
的实际 java
命令选项。我完全从 Eclipse IDE 转换日志中得到了这个。
如果答案可以确认这是当前的 gradle 限制,那么我会接受这个答案。如果答案可以显示正确的 gradle 设置是什么,那么我会接受这个答案。谢谢。
这很可能是因为 link 在构建过程中针对不同的 Java 卡版本时,正在使用更新或旧版本的库。请注意,转换器会创建预先 link 编辑的代码,因此它期望 link 针对正确的版本。
这与 Java SE 不同,其中 类 可以在运行时 linked 和方法和字段的 location没关系,因为它们是在运行时创建的。
我通过删除 build.gradle
中的 applet {}
块解决了这个问题。由于正在构建的特定上限是抽象的 class,因此它没有小程序帮助。
下面的错误迫使我在不使用 IDE 的情况下在命令行中深入研究 cap 文件的构建过程。所以现在,我可以使用 java/javac 系列命令从命令行构建一个 cap 文件。但是我有一个小程序,如果通过 eclipse IDE 构建,它成功创建了一个 cap 文件,但是当我尝试在命令行中构建时遇到错误。当我尝试正确设置 gradle 构建 settings/environment 时,我也遇到了同样的错误。这是错误:
[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
文件。问题出在将 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
classes 因为正如我所说,我可以创建 classes 并提供给 java
转换命令来构建其他上限,而且我还使用TestApplet.exp
即 IDE 生成的。
更新:2019/11/17
Here 是能够从 .class
构建到 .cap
的实际 java
命令选项。我完全从 Eclipse IDE 转换日志中得到了这个。
如果答案可以确认这是当前的 gradle 限制,那么我会接受这个答案。如果答案可以显示正确的 gradle 设置是什么,那么我会接受这个答案。谢谢。
这很可能是因为 link 在构建过程中针对不同的 Java 卡版本时,正在使用更新或旧版本的库。请注意,转换器会创建预先 link 编辑的代码,因此它期望 link 针对正确的版本。
这与 Java SE 不同,其中 类 可以在运行时 linked 和方法和字段的 location没关系,因为它们是在运行时创建的。
我通过删除 build.gradle
中的 applet {}
块解决了这个问题。由于正在构建的特定上限是抽象的 class,因此它没有小程序帮助。