javax.smartcardio.* 在 Open JDK 11(Redhat) 上找不到

javax.smartcardio.* is not found on Open JDK 11(Redhat)

我正在使用 Redhat 的 OpenJDK 11 与 Windows 上的智能卡通信。但是我在编译时遇到了问题。它说找不到 javax.smartcardio 库。

Enviornment : Redhat OpenJDK 11, Intellij, Kotlin, Gradle

> Task :compileKotlin
e: ~\util\SmartCard.kt: (7, 14): Unresolved reference: smartcardio
e: ~\util\SmartCard.kt: (13, 25): Unresolved reference: CardTerminal
e: ~\util\SmartCard.kt: (13, 41): Unresolved reference: TerminalFactory
e: ~\util\SmartCard.kt: (19, 51): Unresolved reference: CardTerminal
e: ~\util\SmartCard.kt: (25, 43): Unresolved reference: CardTerminal
e: ~\util\SmartCard.kt: (35, 23): Unresolved reference: Card
e: ~\util\SmartCard.kt: (36, 30): Unresolved reference: CardChannel
e: ~\util\SmartCard.kt: (44, 52): Unresolved reference: CardException
e: ~\util\SmartCard.kt: (51, 19): Unresolved reference: CardException
e: ~\util\SmartCard.kt: (54, 27): Unresolved reference: CommandAPDU

此外,我已经查看了类路径,并且有 'java.smartcardio' 我在下面附上了屏幕截图。

我该怎么办?

添加----------------

有线的东西在 Java 代码中,它在同一个项目上工作。我认为Kotllin环境设置有问题

我认为您需要将 java.smartcard 模块包含到使用您列出的未解析 类 的代码所在的模块中。 我在 se.ivankrizsan 包中使用以下代码创建了一个名为 kotlinsmartcard 的小型 Kotlin 项目:

fun main() {
    val theCardTerminal: CardTerminal;
    println("Hello World!")
}

在不在任何包中的源根目录中,我有一个名为 module-info.java 的文件,其内容如下:

module kotlinsmartcard {
    requires kotlin.stdlib;
    requires java.smartcardio;
}

我可以使用 JDK 11.0.3-zulu 运行 上面的程序(使用它是因为我手头没有 RedHat JDK)。 这样我的整个 kotlinsmartcard 项目就是一个模块,以尽量减少对 Java 模块系统的暴露,但我仍然需要 "requires java.smartcardio" 以免在变量声明时出错在代码中。

这是另一种方法。我只是放弃使用 JDK 的智能卡 类,因为 JDK 很难在 JDK 11 版本上使用。取而代之的是,我使用了 Github.

中的一个库

在这里。

https://github.com/intarsys/smartcard-io