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


824

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

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


1
わかりません。なぜそれをどこか別の場所でコンパイルして、ターゲット(つまり)1.4環境で実行しないのですか?
TimBüthe、2009年

最終的なターゲット環境はjdk5上のjboss4.2です。
SAL

2
「保護された」ステータスについて:StackOverflowでは、
賛成

6
大きな投票結果をご覧ください...このページの残りの96%は無視してください。検索: "NELSベックマン"、4時09分で2月1日'10
ます

1
私にとってうまくいったことは、JREシステムライブラリを実行環境(またはワークスペースのデフォルト)から代替JRE(同じJavaバージョンを選択した編集/変更することでした。また、(1) [ 注文とエクスポート ]タブで正しい順序、(2)Javaコンパイラ設定で正しい準拠レベル(選択したJavaバージョンと同じ)を確認する必要もあります。
ADTC、2014年

回答:


1884

同様に機能する別のソリューションがあります。

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

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

:私のために私が持っているjavax.xml.soap.SOAPPart三つの異なる瓶に:axis-saaj-1.4.jarsaaj-api-1.3.jarおよびrt.jar


1
それはEclipseのバグですか、それとも誤って制限を回避していますか(そしてライセンス条項に違反していますか)?Eclipseバグの場合、バグは登録されていますか?
docwhat

@Doctor特に重要なコードにはこれを使用したことがないので、これ以上調査しませんでした...何か発見した場合はお知らせください。
Nels Beckman、2011年

3
@ URL87プロジェクトフォルダを右クリックすると、[ビルドパス...]、[ビルドパスの構成]、[ライブラリ](タブ)に移動し、右側のボタンの1つとして[ライブラリの追加]が表示されます。 。これは私にとっても魅力的で、すばらしい答えでした
Alexei Blue

8
最近のバージョンのEclipseでのより良い解決策は、JREシステムライブラリを削除するのではなく、[注文とエクスポート]タブに移動して、JREシステムライブラリを一番下に移動することです(これは、削除と追加の効果ですが、削除して追加する必要はありません)。
user1676075 2013年

1
これは2018年で、Eclipseバージョンは5.0です。このバグ/問題はまだ存在しています。@NelsBeckmanに感謝します。あなたの回答は、投稿されてから10年の3/4後に私を助けました。
アラバムダン

120

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.htmlが私にとって最も効果的でした。

Windowsの場合: Windows-> Preferences-> Java-> Compiler-> Errors / Warnings-> Deprecated and restricted API-> Forbidden reference(access rules):-> change to warning

Mac OS X / Linuxの場合: Eclipse-> Preferences-> Java-> Compiler-> Errors / Warnings-> Deprecated and restricted API-> Forbidden reference(access rules):-> change to warning


62
これはうまくいくかもしれませんが、適切な解決策ではありません。まず、アクセス制限が存在する理由を理解する必要があります。また、今後重要になる可能性があるすべてのケースが非表示になります。
エイドリアンMouat

1
@AdrianMouatはほとんど関係ありません。私がそれを去りたいなら、私はそれを去りたいです。しかし、確かに-非公開のAPIに対してはコーディングしないでください。
stolsvik 2011

3
@stolsvik-あなたは私を失いました。問題が存在する理由は無関係であると言っていますか?
エイドリアンMouat

1
私は1つの方法でこの問題を抱えています。私は代替のJDKの使用を想像しています(OpenJDKがより良いオプションのように)。とはいえ、一度は「クールかもしれない」と言ったことがあります。量産コードではありません。進行中の設計作業のためではありません。この種のcr-hackでどれだけの工数が失われたかはわかりません。
ます

5
@AdrianMouat-理にかなっています。原子炉でこのようなことをするのは嫌いだ-制御室の熱が多すぎる?したがって、すべての警告を無効にします。翌日は大きな見出しになります。:P
デビッドブレイン2013年

67

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

理由はわかりませんが、問題が解決しましたが、お役に立てば幸いです。


10
ええと、どうやらあなたは私と同じように、この質問に数ヶ月前に答えました。なぜ私はあなたの答えを当時見なかったのかわからない...
ネルスベックマン

34

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

これはライセンス契約の条件では許可されていませんが、Java 5までは施行されていませんでした。

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

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

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

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

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


2
それでおしまい。パス内のjarの1つにQNameクラスが含まれていました。見つける -name "* .jar" -print -exec unzip -t {} \; | grep "QName"がそれを見つけました。
SAL

1
Javaに同梱されているクラスを置き換えることが許可されていないことに関するリファレンスを提供していただけませんか?ライセンス契約で私が見つけたのは、Javaプログラムではなく、Java自体の配布に関連する制限でしたが、あまり長くは探していませんでした。
エイドリアンMouat

25

私もこのエラーを受け取っていますが、私のプロジェクトはコマンドラインで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を参照してください。これは私をうまく働かせるために私を連れて行ったので、私はこの答えを投稿することによってコマンドラインからこれらのアクセス制限エラーを修正しようとしている他の誰かを助けると思った。


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

13

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


1
ここで同じ問題。私の場合、指定されていない場合はデフォルトで1.5になるMavenを使用します。
Greg Haskins 2013

これをPOMに入れて、更新しても元に戻らないようにしてください。<properties> <maven.compiler.source> 1.8 </maven.compiler.source> <maven.compiler.target> 1.8 </maven.compiler.target> </ properties>
フィリップレゴ

8

ネルスベックマンのソリューションに加えて、次のヒントがあります。

[ビルドパスの構成]で、[順序とエクスポート]の下のエントリの順序を並べ替える必要がありました

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

これらのダイアルをいじって、その間にProject> Cleanを実行すると、これらの警告を解決できました。


8

私にとってこれをどのように解決するか:

  • 行くビルド・パス現在のプロジェクトの

ライブラリの下

  • JREシステムライブラリ [jdk1.8xxx]」を選択します
  • 編集をクリックします
  • 「Workspace default JRE(jdk1.8xx)」または代替JRE を選択します
  • 終了をクリック
  • OKをクリックします

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください


鉱山はすでに1.7 ... 79に設定されていたので、慌てていました。しかし、それをもう一度選択し、[適用]をクリックするだけで、エラーはなくなりました。ふew。
Marvo、

ワオ。これはここでも役立ちました。「実行環境」から「代替JRE」への変更。誰かがこれについて論理的な説明を持っている場合(ここでは、project-faucet Javaを1.5(.settings構成ファイルの5.0)から1.8に変更した後に発生しました。グローバル設定のエラーから警告に変更(他の回答を参照)していない)ヘルプ:まだエラー
。com.sun.image.codec

6

古いPOSTを更新して申し訳ありません。報告された問題を受け取り、以下のように解決しました。

Eclipse + m2e mavenプラグインを使用していると仮定して、このアクセス制限エラーが発生した場合は、エラーが発生しているプロジェクト/モジュールを右クリックします->プロパティ->ビルドパス->ライブラリ-> JDKを置き換えます/ JREからEclipseワークスペースで使用されるものに。

上記の手順を実行し、問題は解決しました。


十分に公平ですが、基本的にはネルスベックマンが受け入れた回答の文言を複製しました。
Steven Wolfe 2013年

5

特定のクラスにアクセスできるはずであると確信している場合、これは、同じ名前(またはパス)でコンテンツが異なるクラスを含む複数のjarをプロジェクトに追加し、それらが互いに影を落としていることを意味します(通常、古いカスタムビルドjarには、サードパーティライブラリの組み込みの古いバージョンが含まれています。

たとえば、jar実装を追加する場合:

a.b.c.d1
a.b.c.d2

しかし、古いバージョンだけが実装されています:

a.b.c.d1
(d2 is missing altogether or has restricted access)

すべてがコードエディターで正常に動作しますが、「古い」ライブラリーが新しいライブラリーを覆い隠してしまうと、コンパイル中に失敗します。d2が存在する場合でも、d2が突然「見つからないかアクセスできない」と判明します。

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


4

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


3

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


3

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

「Installed JRE」、「Execution Environment」、「Java build path」のリンクをクリックして、JDKのバージョンを1.7に変更すると、警告が消えました。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.