私は、スタブを再作成せずにIBMのWSDL2Javaによって作成されたJava 1.4コードをJava 5上でコンパイルしようとしていますが、Eclipseでこのエラーが発生しました。私は、作成されたスタブはランタイムjarファイルが利用可能である限り(それらが利用可能である限り)コンパイルされるべきであるという仮定の下にあります。
Access restriction: The type QName is not accessible due to restriction on required library C:\Program Files\Java\jdk1.5.0_16\jre\lib\rt.jar
完全なクラス名はjavax.xml.namespace.QName
です
ここで何が起きているのでしょうか。
これは私がソーセージから豚をリファクタリングしようとしているケースですか?スタブを作り直すほうがいいですか。
また動作する別の解決策があります。
これは、異なるjarファイルに複数のクラスがあるために機能します。 JREライブラリを削除して再追加すると、正しいクラスが最初になります。根本的な解決策が必要な場合は、必ず同じクラスのjarファイルを除外してください。
私のために私は持っています:3つの異なるjarファイルのjavax.xml.soap.SOAPPart
:axis-saaj-1.4.jar
、saaj-api-1.3.jar
そしてrt.jar
http://www.digizol.com/2008/09/Eclipse-access-restriction-on-library.html 私には最適でした。
Windowsの場合: Windows - >設定 - > Java - >コンパイラ - >エラー/警告 - >廃止予定および制限されているAPI - >禁止された参照(アクセス規則): - > warningへの変更
Mac OS X/Linuxの場合: Eclipse - >設定 - > Java - >コンパイラ - >エラー/警告 - >廃止予定および制限されているAPI - >禁止された参照(アクセスルール): - > warningへの変更
私は同じ問題に出会った。私はウェブサイトで答えを見つけました: http://www.17ext.com 。
まず、JREシステムライブラリを削除します。その後、JREシステムライブラリをもう一度インポートします。
私はその理由を知りません。それでも私の問題は解決しました。
私が思うに、あなたはJava 5に同梱されている標準クラスをあなたが持っているライブラリの中のものに置き換えようとしています。
これは、使用許諾契約の条項の下では許可されていませんが、Java 5まで実施されていませんでした。
私は以前QNameでこれを見たことがあり、私は持っていたjarファイルからクラスを削除することでそれを "修正"しました。
編集 http://www.manpagez.com/man/1/Java/ オプション "-Xbootclasspath:"についてのメモ
「rt.jarのクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、Java 2 Runtime Environmentのバイナリコードライセンスに違反するため、デプロイしないでください。」
http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE
「Javaテクノロジの制限事項」JPI内に追加のクラスを作成するなどしてJavaプラットフォームインタフェース(「Java」パッケージまたは「Java」パッケージのサブパッケージに含まれるクラスとして識別される「JPI」)を変更することはできません。追加のクラスおよび関連するAPIを作成して、(i)Javaプラットフォームの機能を拡張し、(ii)第三者のソフトウェア開発者に公開される場合そのような追加のAPIを呼び出す追加のソフトウェアを開発する目的で、すべての開発者が自由に使用できるように、そのようなAPIの正確な仕様を迅速に広く公開する必要があります。 「Java」、「javax」、「Sun」、または命名規則の指定においてSunによって指定されている同様の規則として識別されます。
私もこのエラーを受け取っていますが、私のプロジェクトはMavenと tycho コンパイラ(OSGiプラグインのセットです)を使用してコマンドラインでビルドされています。同じ問題を抱えているがコマンドラインではなくEclipseでそれを修正する人々をふるいにかけた後、私は Tycho開発者フォーラムのメッセージ を見つけ、私の質問に答え、pom.xml
の設定を使用してアクセス制限に関するコンパイラ警告:
<plugin>
<groupId>org.Eclipse.tycho</groupId>
<artifactId>tycho-compiler-plugin</artifactId>
<version>${tycho.version}</version>
<configuration>
<compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
</configuration>
</plugin>
詳細は Tycho FAQ にあります。これにより、AGESを解決することができたので、この回答を投稿することにより、コマンドラインからこれらのアクセス制限エラーを修正しようとする他の誰かを支援すると思いました。
Windows -> Preferences -> Java Compiler
私もこの問題を抱えていました。どうやら私は自分のビルドパスでJREを1.6ではなく1.5に設定しました。
Nels Beckmanの解決策 に加えて、以下のヒントがあります。
Configure Build Path の下で、 Order and Export の下にあるエントリの順序を並べ替える必要がありました。
さらに、Eclipse PDE開発者として、私は私のMANIFEST.MF
で私の依存関係の順序を並べ替える必要がありました。リストの最初に問題のあるパッケージを追加しました。
その間に Project> Clean を実行しながら、これらのダイヤルで遊んで、私はこれらの警告を解決することができました。
古いPOSTを更新して申し訳ありません。私は報告された問題を得ました、そして私はそれを下記のように解決しました。
Eclipse + m2e Mavenプラグインを使用していると仮定した場合、このアクセス制限エラーが発生した場合は、エラーが発生しているプロジェクト/モジュールを右クリックし、 - > Properties - > Build Path - > Library - > Replace JDK /の順にクリックします。 Eclipseワークスペースで使用されているものへのJRE。
上記の手順を実行したところ、問題は解決しました。
特定のクラスにアクセスできることが確実な場合は、同じ名前(またはパス)を持つが内容が異なるクラスを含む複数のjarをプロジェクトに追加し、それらが互いを覆い隠している(通常は古いカスタム)ことを意味します。 build jarには、組み込みの古いバージョンのサードパーティライブラリが含まれています。
たとえば、実装したjarを追加すると、次のようになります。
a.b.c.d1
a.b.c.d2
だけでなく、古いバージョンも実装しています:
a.b.c.d1
(d2 is missing altogether or has restricted access)
コードエディタではすべてうまくいきますが、「古い」ライブラリが新しいライブラリを覆い隠している場合、コンパイル中に失敗します。d2があっても突然「欠落しているかアクセスできない」ことが判明します。
解決策は、コンパイル時のライブラリの順序を確認し、正しい実装のものが最初になるようにすることです。
プロジェクトのプロパティでJavaビルドパスに移動します。既存のJREシステムライブラリを削除してから再度追加します。すなわち、Add Library - > JRE Lib - jre ---> Finishの順に選択します。最後に[ 注文してエクスポート ]タブを選択し、[JRE Lib]を選択して上に移動します。それでおしまい。
プロジェクトのビルドパスライブラリの順番を変更するだけです。プロジェクトを右クリックし、[ビルドパス]> [ビルドパスの構成]> [順序とエクスポートの選択](タブ)>エントリの順序を変更します。 「JREシステムライブラリ」を一番下に移動するとうまくいくことを願っています。それは私にとってとてもうまくいった。簡単でシンプルな……!
私の場合は、ビルドパスJREと実行環境にインストールされたJREの間に不一致がありました。私はProject> Properties> Java compilerに移動しました。下部に警告メッセージがありました。
「インストールされたJRE」、「実行環境」、「Javaビルドパス」のリンクをクリックし、JDKのバージョンを1.7に変更すると警告が消えました。
ビルドパスで正しいJREシステムを追加することが解決策ですが、Eclipseにはまだエラーがある可能性があります。それを解決するには、Javaビルドパス - >注文とエクスポートに行き、あなたのJREシステムライブラリを一番上に移動します。これで私の問題は解決しました。