Pertanyaan Pembatasan akses di kelas karena pembatasan pada rt.jar perpustakaan yang dibutuhkan?


Saya mencoba mengkompilasi kode Java 1.4 yang dibuat oleh IBM WSDL2Java di Java5 tanpa membuat ulang stub dan melihat kesalahan ini di Eclipse. Saya berada di bawah asumsi bahwa stub dibuat hanya perlu dikompilasi selama stoples tersedia (mereka).

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

Nama kelas penuh adalah javax.xml.namespace.QName

Apa sebenarnya yang terjadi di sini?

Apakah ini kasus di mana saya mencoba untuk membiakkan babi dari sosis? Apakah saya lebih baik membuat stub?


783
2018-05-13 20:16


asal


Jawaban:


Ada solusi lain yang juga berhasil.

  1. Pergi ke Bangun Path pengaturan dalam properti proyek.
  2. Hapus Perpustakaan Sistem JRE
  3. Tambahkan kembali; Memilih "Tambahkan Perpustakaan" dan pilih Perpustakaan Sistem JRE. Default berfungsi untuk saya.

Ini berfungsi karena Anda memiliki banyak kelas dalam file jar yang berbeda. Menghapus dan menambahkan kembali lib JRE akan membuat kelas yang tepat menjadi yang pertama. Jika Anda menginginkan solusi mendasar, pastikan Anda mengecualikan file jar dengan kelas yang sama.

Untuk saya, saya punya: javax.xml.soap.SOAPPart dalam tiga guci berbeda: axis-saaj-1.4.jar, saaj-api-1.3.jar dan rt.jar


1804
2018-02-01 04:09



http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html bekerja paling baik untukku.

Di Windows: Windows -> Preferences -> Java -> Compiler -> Kesalahan / Peringatan -> API tidak berlaku dan terbatas -> Referensi terlarang (aturan akses): -> ubah menjadi peringatan

Di Mac OS X / Linux: Eclipse -> Preferences -> Java -> Compiler -> Kesalahan / Peringatan -> API tidak berlaku dan terbatas -> Referensi terlarang (aturan akses): -> ubah menjadi peringatan


113
2018-01-16 03:21



Saya bertemu masalah yang sama. Saya menemukan jawabannya di situs web:http://www.17ext.com.
Pertama, hapus Librari Sistem JRE. Kemudian, impor JRE System Libraries lagi.

Saya tidak tahu mengapa. Namun hal itu memperbaiki masalah saya, semoga itu dapat membantu Anda.


66
2017-11-23 05:55



Dugaan saya adalah Anda mencoba mengganti kelas standar yang dikirimkan dengan Java 5 dengan satu di perpustakaan yang Anda miliki.

Ini tidak diizinkan menurut ketentuan perjanjian lisensi, namun AFAIK tidak diberlakukan sampai Java 5.

Saya telah melihat ini dengan QName sebelumnya dan saya "memperbaikinya" dengan mengeluarkan kelas dari toples yang saya miliki.

EDIT http://www.manpagez.com/man/1/java/ catatan untuk opsi "-Xbootclasspath:"

"Aplikasi yang menggunakan opsi ini untuk tujuan mengesampingkan kelas di rt.jar tidak boleh digunakan karena melakukan hal itu akan melanggar lisensi kode biner Java 2 Runtime Environment."

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

"Java Technology Restrictions. Anda tidak dapat memodifikasi Java Antarmuka Platform ("JPI", diidentifikasi sebagai kelas yang terkandung dalam paket "java" atau sub-paket dari "java" paket), dengan membuat kelas tambahan dalam JPI atau jika tidak menyebabkan penambahan atau modifikasi dari kelas dalam JPI. Jika Anda membuat kelas tambahan dan API terkait yang (i) meluas fungsionalitas platform Java, dan (ii) terpapar kepada pengembang perangkat lunak pihak ketiga untuk tujuan mengembangkan perangkat lunak tambahan yang memanggil seperti itu API tambahan, Anda harus segera mempublikasikan secara luas suatu spesifikasi akurat untuk API tersebut untuk digunakan gratis oleh semua pengembang. Anda tidak dapat membuat, atau mengotorisasi lisensi untuk membuat, kelas tambahan, antarmuka, atau sub-paket yang dengan cara apa pun diidentifikasi sebagai "java", "javax", "sun" atau konvensi serupa seperti yang ditentukan oleh Sun in sebutan konvensi penamaan. "


34
2018-05-13 20:30



Saya telah mendapatkan kesalahan ini juga, tetapi proyek saya dibangun di atas baris perintah menggunakan Maven dan tycho compiler (itu satu set plugin OSGi). Setelah massa memilah-milah orang yang memiliki masalah yang sama tetapi memperbaikinya di Eclipse daripada di baris perintah, saya menemukan pesan di forum pengembang Tycho yang menjawab pertanyaan saya, menggunakan konfigurasi di pom.xml untuk mengabaikan peringatan kompiler tentang pembatasan akses:

<plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-compiler-plugin</artifactId>
    <version>${tycho.version}</version>
    <configuration>
        <compilerArgument>-warn:+discouraged,forbidden</compilerArgument>
    </configuration>
</plugin>

Informasi lebih lanjut dapat ditemukan di FAQ Tycho. Ini membawa saya USIA untuk bekerja, jadi saya pikir saya akan membantu orang lain mencoba memperbaiki kesalahan pembatasan akses ini dari baris perintah dengan memposting jawaban ini.


23
2017-09-06 12:31



  • Pergi ke pengaturan Build Path di properti proyek. Windows -> Preferences -> Java Compiler
  • Hapus Perpustakaan Sistem JRE
  • Tambahkan JRE lain dengan "pasangan sempurna"
  • bersihkan dan bangunkan proyek Anda lagi. Itu berhasil bagi saya.

13
2018-03-31 19:09



Saya baru saja mengalami masalah ini juga. Rupanya saya telah mengatur JRE ke 1.5 bukan 1.6 di jalur build saya.


13
2017-07-01 09:46



Sebagai tambahannya Solusi Nels Beckman, Saya memiliki tips berikut:

Dibawah Konfigurasikan Path Build, Saya harus mengatur ulang urutan entri saya di bawah Pesanan dan Ekspor.

Selain itu, sebagai pengembang Eclipse PDE, saya perlu mengatur ulang urutan ketergantungan saya di MANIFEST.MF, menambahkan paket bermasalah sebagai yang pertama dalam daftar.

Bermain dengan tombol-tombol ini, bersama dengan berlari Proyek> Bersih di antaranya, saya bisa menyelesaikan peringatan ini.


8
2018-06-01 03:41



Maaf karena memperbarui POST lama. Saya mendapat masalah yang dilaporkan dan saya memecahkannya seperti yang dikatakan di bawah ini.

Dengan asumsi Anda menggunakan Eclipse + m2e maven plugin, jika Anda mendapatkan kesalahan pembatasan akses ini, klik kanan pada proyek / modul di mana Anda memiliki kesalahan -> Properties -> Build Path -> Library -> Ganti JDK / JRE ke salah satu yang digunakan di ruang kerja eclipse.

Saya mengikuti langkah-langkah di atas dan masalah teratasi.


6
2018-05-24 10:51



Dalam hal ini Anda yakin bahwa Anda harus dapat mengakses kelas yang diberikan, daripada ini dapat berarti Anda menambahkan beberapa guci ke proyek Anda yang berisi kelas dengan nama identik (atau jalur) tetapi konten yang berbeda dan mereka membayangi satu sama lain (biasanya kebiasaan lama build jar berisi versi lama dari pustaka pihak ke-3).

Misalnya saat Anda menambahkan guci yang menerapkan:

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

tetapi juga hanya menerapkan versi yang lebih lama:

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

Semuanya berfungsi dengan baik di editor kode tetapi gagal selama kompilasi jika perpustakaan "lama" melampaui yang baru - d2 tiba-tiba ternyata "hilang atau tidak dapat diakses" bahkan ketika itu ada.

Solusinya adalah untuk memeriksa urutan pustaka waktu-compile dan memastikan bahwa satu dengan implementasi yang benar berjalan lebih dulu.


5
2018-04-01 15:18



bagi saya ini bagaimana saya menyelesaikannya:

  • pergi ke membangun jalur dari proyek saat ini

di bawah Perpustakaan

  • pilih "Perpustakaan Sistem JRE [jdk1.8xxx] "
  • klik sunting
  • dan pilih "Standar ruang kerja JRE (jdk1.8xx)" ATAU Alternate JRE
  • Klik selesai
  • Klik OK

enter image description here

Catatan: pastikan bahwa di Eclipse / Preferences (BUKAN proyek) / Java / Installed JRE, bahwa jdk menunjuk ke folder JDK bukan JRE C: \ Program Files \ Java \ jdk1.8.0_74

enter image description here


5
2018-03-20 18:40