831

IBM のWSDL2Javaで作成されたJava 1.4コードを、スタブを再作成せずにJava5でコンパイルしようとしましたが、 Eclipseでこのエラーが発生しました。 私は、生成されたスタブは、ランタイムが利用可能である限りコンパイルする必要があると想定しています (利用可能です)。
jars

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

ここで何が起こっているのですか?これは、ソーセージから豚をリファクタリングしようとしているケースですか? スタブを再作成した方がよいでしょうか?

4

15 に答える 15

1901

また、機能する別のソリューションがあります。

  1. プロジェクト プロパティの [ビルド パス] 設定に移動します。
  2. JRE システム ライブラリを削除する
  3. それを元に戻します。[ Add Library]を選択し、JRE System Libraryを選択します。デフォルトでうまくいきました。

異なるjarファイルに複数のクラスがあるため、これは機能します。JRE ライブラリを削除して再度追加すると、正しいクラスが最初になります。根本的な解決策が必要な場合は、同じクラスの jar ファイルを除外してください。

私にとっては、次javax.xml.soap.SOAPPartの3つの異なるjarファイルがあります:axis-saaj-1.4.jarsaaj-api-1.3.jarおよびrt.jar

于 2010-02-01T04:09:13.440 に答える
127

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.htmlが私にとって最もうまくいきました。

Windows: Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and limited API -> Forbidden reference (access rules): -> warning に変更

Mac OS X/Linux の場合: Eclipse -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and limited API -> Forbidden reference (access rules): -> warning に変更

于 2010-01-16T03:21:17.613 に答える
69

私は同じ問題に遭遇しました。Web サイトで答えを見つけました: http://www.17ext.com
まず、JRE システム ライブラリを削除します。次に、JRE システム ライブラリを再度インポートします。

于 2009-11-23T05:55:30.410 に答える
35

私の推測では、Java 5 に同梱されている標準クラスを、ライブラリ内のクラスに置き換えようとしているのでしょう。

これは使用許諾契約の条件の下では許可されていませんが、私の知る限り、Java 5 まで強制されませんでした。

以前にQNameでこれを見たことがあり、持っていたjarからクラスを削除して「修正」しました。

オプション「-Xbootclasspath:」のhttp://www.manpagez.com/man/1/java/のメモを編集 します。

「rt.jar のクラスをオーバーライドする目的でこのオプションを使用するアプリケーションは、Java 2 ランタイム環境のバイナリ コード ライセンスに違反するため、デプロイしないでください。」

http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE _

「Java テクノロジーの制限。Java Platform Interface (「JPI」、「java」パッケージまたは「java」パッケージのサブパッケージに含まれるクラスとして識別) を、JPI 内に追加のクラスを作成することによって、またはその他の方法で変更することによって変更することはできません。 JPI のクラスへの追加または変更. (i) Java プラットフォームの機能を拡張し、(ii) 第三者のソフトウェア開発者に公開される追加のクラスおよび関連する API を作成する場合そのような追加の API を呼び出す追加のソフトウェアを開発する目的で、すべての開発者が自由に使用できるように、そのような API の正確な仕様を広く公開する必要があります。または、「java」、「javax」、「sun」、または任意の命名規則指定で Sun が指定する同様の規則として何らかの方法で識別されるサブパッケージ。

于 2009-05-13T20:30:04.443 に答える
27

私もこのエラーを受け取りましたが、私のプロジェクトは 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が必要だったので、この回答を投稿することで、コマンドラインからこれらのアクセス制限エラーを修正しようとしている他の人を支援できると考えました.

于 2013-09-06T12:31:50.403 に答える
14
  • プロジェクト プロパティの [ビルド パス] 設定に移動します。 Windows -> Preferences -> Java Compiler
  • JRE システム ライブラリを削除する
  • 「完全に一致」する別の JRE を追加します
  • プロジェクトをクリーンアップして再度ビルドします。それは私のために働いた。
于 2010-03-31T19:09:48.893 に答える
13

私もこの問題を抱えていました。どうやらビルド パスで JRE を 1.6 ではなく 1.5 に設定していたようです。

于 2011-07-01T09:46:10.380 に答える
5

プロジェクト プロパティの Java ビルド パスに移動します。既存の JRE システム ライブラリを削除し、再度追加します。つまり、[ライブラリの追加] -> [JRE Lib] - [jre を選択] -> [完了] の順に選択します。最後に注文を選択し、エクスポートタブで JRE Lib を選択して上に移動します。それでおしまい。

于 2015-02-16T11:51:56.407 に答える
5

特定のクラスにアクセスできるはずであると確信している場合、これはプロジェクトに複数の 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 が存在する場合でも、突然「見つからないかアクセスできない」ことが判明します。

解決策は、コンパイル時のライブラリの順序を確認し、正しい実装を持つライブラリが最初になるようにすることです。

于 2013-04-01T15:18:17.337 に答える
3

プロジェクトのビルド パス ライブラリの順序を変更するだけです。プロジェクトを右クリック > ビルド パス > ビルド パスの構成 > 順序とエクスポートの選択 (タブ) > エントリの順序を変更します。「JRE System library」を一番下に移動するとうまくいくと思います。それは私にとってはうまくいきました。簡単でシンプル....!!!

于 2014-07-28T16:57:05.313 に答える
3

私の場合、ビルド パス JRE と実行環境にインストールされている JRE の間に不一致がありました。[プロジェクト] > [プロパティ] > [Java コンパイラ] に移動しました。一番下に警告メッセージがありました。

リンク「インストールされたJRE」、「実行環境」、「Javaビルドパス」をクリックし、JDKバージョンを1.7に変更すると、警告が消えました。

于 2014-03-19T05:59:30.340 に答える