2014-09-24 1 views
1

스마트 카드와 상호 작용하는 JavaFX의 응용 프로그램을 작성했습니다 (sun.security.pkcs11.SunPKCS11jre/lib/ext/sunpkcs11.jar에 위치). 프로그램이 실행되고, 플러그인의 목표 jfx:run이 실행되면 잘 작동합니다.jre lib ext의 라이브러리가 클래스 경로에 없습니다.

불행하게도 jar 아카이브 (목표 jfx:jar 사용)를 만들고 결과 jar을 실행 한 후. 응용 프로그램 시작시 예외가 발생합니다 : 나는 sunpkcs11.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 

. 그런 해결책은 내가 언급했듯이 "workaround"이며보기 흉한 것처럼 보입니다.

왜 응용 프로그램은 "표준"라이브러리 중 하나 인 라이브러리를 찾을 수 없습니까? 이 라이브러리를 볼 수없는 사용자 정의 클래스 로더를 사용하는 JavaFX jar 파일입니까?

고유 번들 (내 경우에는 .exe)을 자체 JRE과 함께 만들었더라도 해당 클래스를 볼 수 없습니다. (가) 코멘트에 링크 된 질문의 중복되지

갱신

, 나는 32 비트 JDK와 JRE 있습니다. JAVA_HOME도 32 비트 JRE를 가리 킵니다.

+0

i 첫 번째 단락을 읽었을까요? http://zenjava.com/javafx/maven/jar-bundle.html – AntJavaDev

+0

@AntJavaDev 답변을 주셔서 감사합니다.이 단락을 읽었으며'jfx : jar' 목표를 사용합니다 프로젝트의 복잡한 구조로 인해 '깨끗한'상태가 아님). 올바른 jar ('target/jfx/app' 디렉토리에서)도 실행 중입니다. –

+0

예 요청한/lib 폴더에 항아리가 있는지 확인할 수 있습니까? 만약 그것이 존재하지 않는다면 maven이 그것을 export하지 않는다는 것을 의미한다. – AntJavaDev

답변

0

나는 똑같은 문제도 가지고 있었다. 보안 라이브러리를 lib 디렉토리에 복사하여 해결했습니다 (maven-antrun-plugin 사용). 그러나이를 수행하는 방법은 알아낼 수 있습니다.

jre 설치에서 sunpkcs11.jar 파일을 복사해야 할 수 있습니다.

+0

그게 내가 한거야. 내가 문제의 해결 방법으로 설명 : –

+0

@MaciejDobrowolski이 문제를 해결하는 다음 단계 - 나는'javafx-maven-plugin'을 사용 중지하고 표준'maven-jar-plugin'을 구성하여 종속성을 가진 실행 가능한 jar를 작성했습니다 . – SimY4

+0

그래도 문제가 해결되지 않습니다. 이 JAR은 표준 JAR 중 하나입니다.'lib \'디렉토리 JAR 파일에'jfxrt.jar','rt.jar'를 넣을 필요는 없습니다. JRE'ext' 디렉토리에서 libs 파일을 가져 오지 않는 이유는 무엇입니까? 이것이 내가 JavaFX 클래스 로더 문제라고 생각하는 이유입니다. –