2014-09-24 57 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

相關問題