我已经在JavaFX中创建了与智能卡交互的应用程序(通过位于jre/lib/ext/sunpkcs11.jar
的类sun.security.pkcs11.SunPKCS11
)。当maven jfx:run
目标(的javafx-maven-plugin
插件)执行时,该程序运行并运行良好。从类路径中找不到jre lib ext的库
不幸的是创建jar文件(使用jfx:jar
目标)并运行结果jar。应用程序将引发异常启动:
Caused by: java.lang.ClassNotFoundException: sun.security.pkcs11.SunPKCS11
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
我已通过安装sunpkcs11.jar
到本地Maven和添加项目POM文件的依赖中发现的简单的办法解决这个问题。正如我所提到的那样,解决方案是“解决方法”,看起来很丑。
为什么应用程序无法找到作为“标准”之一的库? JavaFX jar是否使用自定义类加载器,它看不到此库?
即使当我用自己的JRE
创建本地捆绑包(在我的情况下是.exe)它不能看到该类。
更新
的不是评论链接的问题的重复,我有32位JDK和JRE。 JAVA_HOME
也指向32位JRE。
我排队你已经阅读第1段http://zenjava.com/javafx/maven/jar-bundle.html – AntJavaDev 2014-09-24 07:47:53
@AntJavaDev感谢您的回答,我已阅读本段,我使用'jfx:jar'目标(由于项目结构复杂,没有“清洁”)。我也运行正确的jar(来自'target/jfx/app'目录)。 – 2014-09-24 07:55:03
是的,我的意思是你可以看到,如果在请求的/ lib文件夹存在你的jar?因为如果它不存在意味着maven不会导出它 – AntJavaDev 2014-09-24 07:56:28