Pem*_*ssi 4 java kotlin smartcardio
我正在使用 Redhat 的 OpenJDK 11 与 Windows 上的智能卡进行通信。但是我在编译时遇到了问题。它说找不到 javax.smartcardio 库。
环境: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
Run Code Online (Sandbox Code Playgroud)
另外,我已经查看了类路径,并且在下面附上了“java.smartcardio”。
我该怎么办?
添加 - - - - - - - -
有线的东西是在 Java 代码中,它在同一个项目上工作。我认为 Kotllin 环境设置有问题。
我认为您需要将 java.smartcard 模块包含到使用您列出的未解析类的代码所在的模块中。我在 se.ivankrizsan 包中使用以下代码创建了一个名为 kotlinsmartcard 的小型 Kotlin 项目:
fun main() {
val theCardTerminal: CardTerminal;
println("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)
在源根目录中,不在任何包中,我有一个名为 module-info.java 的文件,其中包含以下内容:
module kotlinsmartcard {
requires kotlin.stdlib;
requires java.smartcardio;
}
Run Code Online (Sandbox Code Playgroud)
我能够使用 JDK 11.0.3-zulu 运行上述程序(使用它是因为我手头没有 RedHat JDK)。这样我的整个 kotlinsmartcard 项目就是一个单一的模块,以尽量减少对 Java 模块系统的暴露,但我仍然需要“需要 java.smartcardio”,以免代码中的变量声明出错.
这是另一种方法。我只是放弃使用 JDK 的 SmartCard 类,因为在 JDK 11 版本上很难使用 JDK 1。我使用了 Github 上的一个库来代替它。
这里是。
https://github.com/intarsys/smartcard-io
| 归档时间: |
|
| 查看次数: |
3316 次 |
| 最近记录: |