2014-09-24 58 views
1

我已经在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。

+0

我排队你已经阅读第1段http://zenjava.com/javafx/maven/jar-bundle.html – AntJavaDev 2014-09-24 07:47:53

+0

@AntJavaDev感谢您的回答,我已阅读本段,我使用'jfx:jar'目标(由于项目结构复杂,没有“清洁”)。我也运行正确的jar(来自'target/jfx/app'目录)。 – 2014-09-24 07:55:03

+0

是的,我的意思是你可以看到,如果在请求的/ lib文件夹存在你的jar?因为如果它不存在意味着maven不会导出它 – AntJavaDev 2014-09-24 07:56:28

回答

0

我也有同样的问题。我已经通过将安全库复制到lib目录(使用maven-antrun-plugin来解决此问题,但您可以找出自己的方法来解决此问题)来解决此问题。

您可能需要从jre安装中复制sunpkcs11.jar文件。

+0

这就是我所做的。我把它描述为问题中的解决方法:) – 2014-09-24 10:09:06

+0

@MaciejDobrowolski解决此问题的下一步 - 我已经停止使用'javafx-maven-plugin'并配置标准的'maven-jar-plugin'来创建一个可执行的jar包。 – SimY4 2014-09-24 10:12:44

+0

它仍然不能解决问题。这个JAR是标准的之一。我不需要将'lib \'目录的JAR文件放在'jfxrt.jar','rt.jar'中。为什么不从JRE'ext'目录中获取库?这就是为什么我认为它是某种JavaFX类加载器问题。 – 2014-09-24 10:18:31

相关问题