web-dev-qa-db-ja.com

必要なライブラリrt.jarの制限によるクラスのアクセス制限

私は、スタブを再作成せずに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です

ここで何が起きているのでしょうか。

これは私がソーセージから豚をリファクタリングしようとしているケースですか?スタブを作り直すほうがいいですか。

802
sal

また動作する別の解決策があります。

  1. プロジェクトプロパティの Build Path 設定に移動します。
  2. JREシステムライブラリを削除します
  3. 追加してください。 "ライブラリの追加" を選択し、 JREシステムライブラリ を選択します。デフォルトは私のために働いた。

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

私のために私は持っています:3つの異なるjarファイルのjavax.xml.soap.SOAPPartaxis-saaj-1.4.jarsaaj-api-1.3.jarそしてrt.jar

1848
Nels Beckman

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への変更

118
scommab

私は同じ問題に出会った。私はウェブサイトで答えを見つけました: http://www.17ext.com
まず、JREシステムライブラリを削除します。その後、JREシステムライブラリをもう一度インポートします。

私はその理由を知りません。それでも私の問題は解決しました。

67
sanwanxian

私が思うに、あなたは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によって指定されている同様の規則として識別されます。

34
Peter Lawrey

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

24
DuffJ
  • プロジェクトプロパティの[ビルドパス]設定に移動します。 Windows -> Preferences -> Java Compiler
  • JREシステムライブラリを削除する
  • 「完全一致」のJREをもう1つ追加する
  • プロジェクトをクリーンにしてもう一度ビルドします。それは私のために働きました。
13
Mayur

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

13
Dorus

Nels Beckmanの解決策 に加えて、以下のヒントがあります。

Configure Build Path の下で、 Order and Export の下にあるエントリの順序を並べ替える必要がありました。

さらに、Eclipse PDE開発者として、私は私のMANIFEST.MFで私の依存関係の順序を並べ替える必要がありました。リストの最初に問題のあるパッケージを追加しました。

その間に Project> Clean を実行しながら、これらのダイヤルで遊んで、私はこれらの警告を解決することができました。

8
modulitos

私のためにこれを私はそれを解決する方法:

  • 現在のプロジェクトのビルドパスに移動します。

図書館の下で

  • JREシステムライブラリ [jdk1.8xxx]」を選択します。
  • クリック編集
  • 「Workspace default JRE(jdk1.8xx)」または代替JREのいずれかを選択します。
  • クリック仕上げ
  • OKをクリック

enter image description here

注:Eclipse/Preferences(プロジェクトではない)/ Java/Installed JREで、jdkがJREではなくJDKフォルダーを指していることを確認してくださいC:\ Program Files\Java\jdk1.8.0_74

enter image description here

7
usertest

古い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があっても突然「欠落しているかアクセスできない」ことが判明します。

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

5
Mr. Napik

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

4
Vijay Bhatt

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

3

私の場合は、ビルドパスJREと実行環境にインストールされたJREの間に不一致がありました。私はProject> Properties> Java compilerに移動しました。下部に警告メッセージがありました。

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

3
Soumyajit Swain

ビルドパスで正しいJREシステムを追加することが解決策ですが、Eclipseにはまだエラーがある可能性があります。それを解決するには、Javaビルドパス - >注文とエクスポートに行き、あなたのJREシステムライブラリを一番上に移動します。これで私の問題は解決しました。

0
Abhishek Soni