次を使用して、このエラーを取り除くことができます。
javac -XDignore.symbol.file=true
これは、ct.sym の代わりに rt.jar を使用するために javac に渡す引数です ( ct.symはデフォルトで使用され、ターゲットの古いバージョンにコンパイルするために必要です)。
ct.sym
rt.jar のすべてのクラスが含まれているわけではありません。クラスの使用sun.*
は使用されるべきではないため、それらのクラス スタブが存在しない可能性がありct.sym
、コンパイルが失敗します。
への呼び出しをsun.*
削除すると、この問題が解決するはずです。(sun パッケージを使用するのは悪い習慣です)
参考文献:
https://blogs.oracle.com/geertjan/ctsym-steals-the-asm-class
実は、JDK には「ct.sym」というものがあります。javac がコードをコンパイルしているとき、rt.jar に対してリンクしません。代わりに、クラス スタブを含む特別なシンボル ファイル lib/ct.sym を使用します。内部 JDK クラスは内部クラスであるため、そのシンボル ファイルには入れられません。それらを使用したくないはずです。
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6778491
これはコンパイラの問題ではありません。ct.sym で提供される情報によると、javac は正しく動作しています。この問題は、ct.sym で何を使用できるようにするか (および何を非表示にするか) を決定する担当者に属します。このバグの正しいカテゴリをまだ特定できません。これは意図的なものです。おそらく、パッケージ名「com.sun.xml.internal....」がヒントに見えるかもしれません。ユーザーは、内部 JDK 実装クラスに依存するコードを記述しないでください。このようなクラスは、JDK の内部実装の詳細であり、予告なく変更される場合があります。
http://openjdk.java.net/jeps/247
JDK N および --release M、M < N の場合、プラットフォームのリリース M の文書化された API の署名データが必要です。このデータは、$JDK_ROOT/lib/ct.sym ファイルに保存されます。これは、JDK 8 の同じ名前のファイルと似ていますが、同じではありません。ct.sym ファイルは、削除されたクラスを含む ZIP ファイルです。ターゲット プラットフォーム バージョンのクラス ファイルに対応するファイル。JDK N および --release N の場合、コンパイル対象のクラス ファイルのソースとして JDK 独自のイメージが使用されます。ただし、観察可能なモジュールのリストは、文書化されたモジュールと jdk.unsupported モジュールに制限されています。
ノート
この場合、artbristolが示唆するように、ClientTransportException
クラスを使用せずに に置き換えた方がよいでしょう。javax.xml.ws.WebServiceException