Saya mencoba untuk mengkompilasi kode Java 1.4 yang dibuat oleh IBM WSDL2Java di Java5 tanpa membuat ulang bertopik dan melihat kesalahan ini di Eclipse .
Saya di bawah asumsi bahwa bertopik yang dihasilkan harus mengkompilasi selama runtime jars
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 lengkapnya adalah javax.xml.namespace.QName
Apa sebenarnya yang terjadi di sini? Apakah ini kasus di mana saya mencoba refactor babi dari sosis? Apakah saya lebih baik menciptakan kembali bertopik?
Jawaban:
Ada solusi lain yang juga berfungsi.
Ini berfungsi karena Anda memiliki beberapa 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.
Bagi saya saya:
javax.xml.soap.SOAPPart
dalam tiga toples yang berbeda:axis-saaj-1.4.jar
,saaj-api-1.3.jar
danrt.jar
sumber
http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html bekerja paling baik untuk saya.
Pada Windows: Windows -> Preferensi -> Java -> Kompiler -> Kesalahan / Peringatan -> API yang sudah usang dan dibatasi -> Referensi terlarang (aturan akses): -> ubah ke peringatan
Pada Mac OS X / Linux: Eclipse -> Preferences -> Java -> Compiler -> Kesalahan / Peringatan -> API usang dan dibatasi -> Referensi terlarang (aturan akses): -> ubah ke peringatan
sumber
Saya menemui masalah yang sama. Saya menemukan jawabannya di situs web: http://www.17ext.com .
Pertama, hapus JRE System Libraries. Kemudian, impor Pustaka Sistem JRE lagi.
Saya tidak tahu mengapa. Namun, itu bisa menyelesaikan masalah saya, semoga bisa membantu Anda.
sumber
Dugaan saya adalah bahwa Anda mencoba untuk mengganti kelas standar yang dikirimkan dengan Java 5 dengan satu di perpustakaan yang Anda miliki.
Ini tidak diizinkan berdasarkan ketentuan perjanjian lisensi, namun AFAIK tidak diberlakukan sampai Java 5.
Saya telah melihat ini dengan QName sebelumnya dan saya "memperbaikinya" dengan menghapus 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 mengganti kelas di rt.jar tidak boleh digunakan karena hal itu akan melanggar lisensi kode biner Java 2 Runtime Environment."
The http://www.idt.mdh.se/rc/sumo/aJile/Uppackat/jre/LICENSE
"Pembatasan Teknologi Java. Anda tidak boleh memodifikasi Java Platform Interface (" JPI ", diidentifikasi sebagai kelas yang terkandung dalam paket" java "atau subpackages dari paket" java "), dengan membuat kelas tambahan di dalam JPI atau menyebabkan penambahan atau modifikasi kelas di JPI. Jika Anda membuat kelas tambahan dan API terkait yang (i) memperluas fungsi platform Java, dan (ii) dihadapkan pada pengembang perangkat lunak pihak ketiga untuk tujuan mengembangkan perangkat lunak tambahan yang memanggil API tambahan seperti itu, Anda harus segera menerbitkan secara luas spesifikasi yang akurat untuk API tersebut untuk digunakan secara gratis oleh semua pengembang. Anda tidak boleh membuat, atau mengotorisasi pemegang lisensi untuk membuat, kelas tambahan, antarmuka,atau subpackages yang dengan cara apa pun diidentifikasi sebagai "java", "javax", "sun" atau konvensi serupa seperti yang ditentukan oleh Sun dalam setiap penamaan konvensi penamaan. "
sumber
Saya telah mendapatkan kesalahan ini juga, tetapi proyek saya dibangun pada baris perintah menggunakan Maven dan tycho compiler (ini adalah satu set plugin OSGi). Setelah massa menyaring orang-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
pom.xml
untuk mengabaikan peringatan kompiler tentang pembatasan akses:Informasi lebih lanjut dapat ditemukan di Tycho FAQ . Ini membuat saya AGES untuk bekerja, jadi saya pikir saya akan membantu orang lain yang mencoba untuk memperbaiki kesalahan pembatasan akses ini dari baris perintah dengan memposting jawaban ini.
sumber
Windows -> Preferences -> Java Compiler
sumber
Saya hanya punya masalah ini juga. Rupanya saya telah menetapkan JRE ke 1,5 bukannya 1,6 di jalur build saya.
sumber
Selain solusi Nels Beckman , saya punya tips berikut:
Di bawah Configure Build Path , saya harus mengatur ulang urutan entri saya di bawah Order dan Ekspor .
Selain itu, sebagai pengembang Eclipse PDE, saya perlu mengatur ulang urutan dependensi saya di saya
MANIFEST.MF
, menambahkan paket yang bermasalah sebagai yang pertama dalam daftar.Bermain dengan tombol-tombol ini, bersama dengan menjalankan Project> Clean di antaranya, saya dapat menyelesaikan peringatan ini.
sumber
bagi saya ini bagaimana saya menyelesaikannya:
di bawah Perpustakaan
Catatan: pastikan bahwa di Eclipse / Preferences (BUKAN proyek) / Java / Install JRE, bahwa jdk menunjuk ke folder JDK bukan JRE C: \ Program Files \ Java \ jdk1.8.0_74
sumber
Maaf karena memperbarui POST lama. Saya mendapat masalah yang dilaporkan dan saya menyelesaikannya seperti yang dikatakan di bawah ini.
Dengan asumsi Anda menggunakan plugin Eclipse + m2e maven, 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 gerhana.
Saya mengikuti langkah-langkah di atas dan masalah teratasi.
sumber
Dalam hal ini Anda yakin bahwa Anda harus dapat mengakses kelas yang diberikan, daripada ini berarti Anda menambahkan beberapa botol ke proyek Anda yang berisi kelas dengan nama yang identik (atau jalur) tetapi konten yang berbeda dan mereka saling menaungi satu sama lain (biasanya sebuah kebiasaan lama build jar berisi perpustakaan perpustakaan pihak ke-3 versi lama).
Misalnya saat Anda menambahkan stoples yang menerapkan:
tetapi juga versi yang lebih lama hanya menerapkan:
Semuanya berfungsi dengan baik di editor kode tetapi gagal selama kompilasi jika pustaka "lama" menaungi yang baru - d2 tiba-tiba berubah "hilang atau tidak dapat diakses" bahkan ketika ada.
Solusinya adalah dengan memeriksa urutan pustaka waktu kompilasi dan memastikan bahwa pustaka dengan implementasi yang benar berjalan lebih dulu.
sumber
Pergi ke Java Build Path di properti proyek. Hapus JRE System Library yang ada Kemudian Tambah lagi yaitu Tambah Library -> JRE Lib - pilih jre ---> Finish. Terakhir pilih pesanan dan ekspor tab pilih JRE Lib dan pindah ke atas. Itu dia.
sumber
Cukup ubah urutan pustaka jalur bangun proyek Anda. Klik kanan pada proyek> Build Path> Configure Build Path> Pilih Order and Export (Tab)> Ubah urutan entri. Saya harap memindahkan "pustaka Sistem JRE" ke bawah akan berfungsi. Itu berhasil bagi saya. Mudah dan sederhana .... !!!
sumber
Dalam kasus saya ada ketidakcocokan antara JRE jalur pembangunan dan JRE diinstal pada lingkungan eksekusi. Saya pindah ke Project> Properties> Java compiler. Ada pesan peringatan di bagian bawah.
Saya mengklik tautan 'Installed JRE', 'Execution environment', 'Java build path' dan mengubah versi JDK menjadi 1.7 dan peringatan itu hilang.
sumber
Menambahkan Sistem JRE yang tepat melalui build path adalah solusinya tetapi gerhana Anda mungkin masih memiliki kesalahan. Untuk mengatasinya, buka Java Build path -> Order and Export dan pindahkan perpustakaan sistem JRE Anda di atas. Ini telah memecahkan masalah saya.
sumber