2017-09-14 2 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に対して実行することができますか?起動スクリプトに--add-modulesオプションを付けることはできません。これは、1.8 JREに対して実行しようとするとエラーが発生するためです。ユーザーが実行しているJREのバージョンを確認し、オプションで新しい--add-modulesオプションを追加することを試してみるために、起動スクリプトにロジックを置く必要はありません。

提案がありますか?前もって感謝します!

+0

[standaloneバージョンの 'java.xml。*' API](https://stackoverflow.com/a/46221811/1746118)を使用するのが理想的です。 – nullpointer

答えて

0

この記事を見てください。これは、あなたが提起した互換性の問題を解決する方法を提供します。

https://dzone.com/articles/the-legacy-developers-guide-to-java-9

アプリケーションでmodule-info.javaファイルをインクルードしてください。 Java 9はこれを考慮し、Java 8では無視されます。

0

Webサービスモジュール(SAAJを含むjava.xml.ws)は、Java SE 9で非推奨になりました。将来のJDK。削除の道のりの最初のステップは、デフォルトで解決しないことです。モジュールが存在しないため、JDK 9でCNFEを実行するとCNFEが得られるのです。--add-modules=java.xml.ws(より正確には--add-modules=java.se.ee)で一時的に回避することができます。 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)があります。標準バージョンはクラスパスに、将来はモジュールとしてアプリケーションをモジュールに移行する際に、モジュールとして展開することができます。

関連する問題