2017-09-14 4 views
2

Java 1.8을 사용하여 독립 실행 형 응용 프로그램을 작성했습니다. Java 9를 사용하여 해당 응용 프로그램을 테스트 할 때 javax.xml.soap.SoapException 클래스에서 NoClassDefError 예외가 발생합니다. 필자는 Java 9에 모듈 개념이 있다는 것을 충분히 알았습니다 ... 그리고 응용 프로그램의 시작 스크립트에서 'java'호출에 "--add-modules java.se.ee"옵션을 추가하면, 그런 다음 올바르게 실행됩니다.Java 9에서 Java 1.8을 사용하여 작성된 응용 프로그램은 어떻게 지원합니까?

내 질문은 ... 어떻게이 응용 프로그램을 1.8 JRE에 대해 계속 지원합니까? 1.8 JRE에 대해 실행하려고 할 때 오류가 발생하기 때문에 시작 스크립트에 --add-modules 옵션을 넣을 수 없습니다. 실제로 사용자가 실행중인 JRE의 버전을 확인하고 선택적으로 거기에 새로운 --add-modules 옵션을 넣으려고 시작 스크립트에 논리를 넣고 싶지 않습니다.

제안 사항? 미리 감사드립니다!

+0

[standalone 버전의 java.xml. *] API (https://stackoverflow.com/a/46221811/1746118)를 사용하는 것이 이상적입니다. – nullpointer

답변

0

웹 서비스 모듈 (SAAJ가 포함 된 java.xml.ws)은 Java SE 9에서 제거되고 Java SE에서 제거되지 않습니다. 향후 JDK. 제거하는 첫 번째 단계는 기본적으로 해결하지 않는 것입니다. 그것은 "처럼"모듈이 존재하지 않는 당신은 예, 일시적으로 (--add-modules=java.se.ee보다 더 정확한) --add-modules=java.xml.ws으로 주위에 해결할 수 있습니다 JDK 9

에 그것을 실행할 때 당신이 CNFE을받을 이유는 당신이해야이다 JDK 9의 새로운 인 (http://jdk.java.net/9/release-notes#JDK-8170832 참조) JDK_JAVA_OPTIONS ENV 변수를 사용하여이를 데리러 스크립트를 얻을 수있을 그래서 JDK에서 무시됩니다 8. ​​

대안 (그리고 JDK 9 마이그레이션 안내 JAX-WS와 SAAJ의 독립형 버전으로 이동하는 것입니다. 이러한 API에는 Java SE 및 JDK와는 다른 속도로 업데이트되는 독립 실행 형 버전이 있습니다. 예를 들어 Maven에서 최신 (2.3.0)을 찾아야합니다. 표준 버전은 클래스 경로에 배포 할 수 있으며 앞으로 응용 프로그램을 모듈로 마이그레이션 할 경우 나중에 모듈로 배포 할 수 있습니다.