Gerekli kitaplıktaki kısıtlama nedeniyle sınıfta erişim kısıtlaması rt.jar?


824

Ben derlemek çalışılıyor Java 1.4 tarafından yaratıldı kodu IBM'in WSDL2Java üzerinde java5 koçanları yeniden olmadan ve bu hatayı gördüm Eclipse .
Ben oluşturulan saplamalar çalışma süresi jars(sürece) kullanılabilir olduğu sürece derlenmesi gerektiği varsayım altındayım .

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

Tam sınıf adı javax.xml.namespace.QName

Burada tam olarak ne oluyor? Bu bir domuzu sosisten uzaklaştırmaya çalıştığım bir durum mu? Saplamaları yeniden oluşturmaktan daha iyi miyim?


1
Anlamıyorum, neden sadece başka bir yerde derlemiyorsunuz ve 1.4 ortamında hedefli (yani sanırım) çalıştırmıyorsunuz?
Tim Büthe

Nihai hedef ortam jdk5 üzerinde jboss4.2'dir.
sal

2
"Korunmuş" durumu hakkında: StackOverflow'da Hiçbir şey "Teşekkürler" veya "Ben de" diyor.)
OscarRyz

6
En Çok Oylanan Cevap bölümüne bakın ... Bu sayfanın geri kalanının% 96'sını yok sayın. Arama: "Nels Beckman", Şub 1 '10 at 4:09
olacak

1
Ne benim için çalıştı oldu düzenle / değişim gelen JRE Sistemi Kütüphane Yürütme ortamında (veya Çalışma Alanı öntanımlı) için Alternatif JRE (Aynı Java sürümünü seçilir). Ayrıca (1) Sipariş ve Dışa Aktar sekmesinde doğru sırayı , (2) Java Derleyici ayarlarında (seçilen Java sürümüyle aynı ) doğru uyum düzeyini de sağlamalısınız .
ADTC

Yanıtlar:


1884

İşe yarayan başka bir çözüm daha var.

  1. Proje özelliklerinde Yol Oluştur ayarlarına gidin .
  2. JRE Sistem Kütüphanesini Kaldırma
  3. Geri ekleyin; Seç "Kitaplığı Ekle" seçeneğini JRE Sistemi Kütüphanesi . Varsayılan benim için çalıştı.

Bu, farklı jar dosyalarında birden çok sınıfınız olduğu için çalışır. JRE lib'in kaldırılması ve yeniden eklenmesi, doğru sınıfların ilk olmasını sağlayacaktır. Temel bir çözüm istiyorsanız jar dosyalarını aynı sınıflarla hariç tuttuğunuzdan emin olun.

: Benim için var javax.xml.soap.SOAPPartüç farklı kavanozlarda: axis-saaj-1.4.jar, saaj-api-1.3.jarvert.jar


1
Bir Eclipse hatası mı yoksa yanlışlıkla kısıtlama üzerinde çalışıyor muyuz (ve lisans koşullarını ihlal ediyoruz)? Bir Eclipse hatasıysa, dosyalanmış bir hata var mı?
docwhat

@Doctor Bunu özellikle önemli olan herhangi bir kod için hiç kullanmadım, bu yüzden daha fazla araştırma yapmadım ... Bir şey bulursanız lütfen bize bildirin.
Nels Beckman

3
@ URL87 Proje klasörünü sağ tıklarsanız, "Oluşturma Yolu ...", "Oluşturma Yolunu Yapılandır", "Kitaplıklar" (sekme) bölümüne gidin, sağdaki düğmelerden biri olarak "Kitaplık Ekle" yi görmelisiniz. Bu benim için de bir cazibe verdi, mükemmel cevap
Alexei Blue

8
Eclipse'in son sürümleri altında daha iyi bir çözüm, JRE Sistem Kütüphanesini silmek değil, "Sipariş ve Dışa Aktar" sekmesine gitmek ve sadece JRE Sistem Kütüphanesini aşağıya taşımaktır (bu, silme ve ekleme işleminin etkili bir şekilde yapılmasıdır, ancak silmek ve eklemek için gerekmez).
user1676075

1
Bu 2018 ve tutulma sürümü 5.0. Bu hata / sorun hala var. Çok teşekkürler @NelsBeckman. Cevabınız gönderildiği tarihten bu yana geçen 3 / 4'ünden sonra bana yardımcı oldu.
Aravamudhan

120

http://www.digizol.com/2008/09/eclipse-access-restriction-on-library.html benim için en iyi sonucu verdi.

Windows'ta: Windows -> Tercihler -> Java -> Derleyici -> Hatalar / Uyarılar -> Kullanımdan kaldırılmış ve kısıtlanmış API -> Yasak referans (erişim kuralları): -> uyarıda değişiklik

Mac OS X / Linux'ta: Eclipse -> Tercihler -> Java -> Derleyici -> Hatalar / Uyarılar -> Kullanımdan kaldırılmış ve kısıtlanmış API -> Yasak referans (erişim kuralları): -> uyarıyı değiştir


62
Bu işe yarayabilir, ancak uygun bir çözüm değildir. Erişim kısıtlamasının neden ilk başta var olduğunu anlamanız gerekir. Ayrıca, bunun daha önemli olabilecek gelecekteki tüm vakalarını da gizleyecektir!
Adrian Mouat

1
@AdrianMouat oldukça alakasız. Eğer gitmesini istersem, gitmesini istiyorum. Ama elbette - kamuya açık olmayan API'lara karşı kodlama yapılmayacaktır, hayır.
stolsvik

3
@stolsvik - beni kaybettin; sorunun var olmasının nedeninin alakasız olduğunu mu söylüyorsunuz?
Adrian Mouat

1
Ben bir yöntemde bu sorun var. Alternatif bir JDK kullanımını hayal ediyorum (OpenJDK daha iyi bir seçenek gibi). Bir kere bunun bir kez 'havalı olabileceğini' söyledi. Üretim kodunda DEĞİLDİR. Devam eden bir tasarım çabası için değil. Bu tür bir hack saldırısında kaç gün kaybolduğunu söyleyemem.
olacaktır

5
@AdrianMouat - mantıklı. Nükleer reaktörde böyle bir şey yapmaktan nefret ederim - Kontrol odasında çok fazla ısı var mı? Bu nedenle, tüm uyarıları devre dışı bırakın. Ertesi gün büyük manşetler yapın. : P
david blaine

67

Ben de aynı problemle karşılaştım. Cevabı web sitesinde buldum: http://www.17ext.com .
İlk olarak, JRE Sistem Kütüphanelerini silin. Ardından, JRE Sistem Kütüphanelerini tekrar içe aktarın.

Neden bilmiyorum, ama sorunumu düzeltse de, umarım sana yardımcı olabilir.


10
Görünüşe göre bu soruyu birkaç ay önce yaptığım gibi cevapladın. O zaman cevabını neden görmedim emin değilim ...
Nels Beckman

34

Benim tahminim, Java 5 ile gelen standart bir sınıfı, sahip olduğunuz bir kütüphanedeki bir sınıfla değiştirmeye çalıştığınızdır.

Lisans sözleşmesinin koşulları altında buna izin verilmez, ancak AFAIK, Java 5'e kadar zorunlu kılınmamıştır.

Bunu daha önce QName ile gördüm ve sınıfı sahip olduğum kavanozdan çıkararak "düzelttim".

"-Xbootclasspath:" seçeneği için http://www.manpagez.com/man/1/java/ notlarını DÜZENLE

"Rt.jar içindeki bir sınıfı geçersiz kılmak amacıyla bu seçeneği kullanan uygulamalar, Java 2 Runtime Environment ikili kod lisansına aykırı olacağı için konuşlandırılmamalıdır."

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

"Java Teknolojisi Kısıtlamaları. JPI içinde ek sınıflar oluşturarak veya başka bir şekilde (i) Java platformunun işlevselliğini genişleten ve (ii) üçüncü taraf yazılım geliştiricilerine maruz kalan ek bir sınıf ve ilişkili API (ler) oluşturmanız durumunda, JPI'daki sınıflara ekleme veya değişiklik yapma bu tür ek API'leri çağıran ek yazılımlar geliştirmek amacıyla, tüm geliştiriciler tarafından ücretsiz olarak kullanılmak üzere bu tür API'ler için derhal doğru bir spesifikasyon yayınlamalısınız Ek lisanslar, arayüzler oluşturmak,veya herhangi bir şekilde herhangi bir adlandırma kuralı atamasında "java", "javax", "sun" veya benzer bir sözleşme olarak tanımlanan alt paketler. "


2
bu kadar. yoldaki kavanozlardan birinde QName sınıfı vardı. bulmak. -name "* .jar" -print -exec unzip -t {} \; | grep "QName" buldu.
sal

1
Java ile birlikte gelen sınıfların değiştirilmesine izin verilmemesine ilişkin bir referans verebilir misiniz? Lisans sözleşmesinde bulduğum tek şey, Java programlarını değil, Java'nın kendisinin dağıtımıyla ilgili kısıtlamalardı, ama çok uzun süre aramadım.
Adrian Mouat

25

Ben de bu hatayı alıyorum, ama benim proje Maven ve tycho derleyici (OSGi eklentileri kümesidir) kullanarak komut satırı üzerine inşa edilmiştir . Aynı sorunu yaşayan ancak komut satırından ziyade Eclipse'de sabitleyen insanlar arasında eleme kitlelerinden sonra , Tycho geliştirici forumundapom.xml , erişim kısıtlaması hakkında derleyici uyarısını yoksaymak için yapılandırmayı kullanarak sorumu yanıtlayan bir mesaj buldum :

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

Daha fazla bilgi Tycho SSS bölümünde bulunabilir . Bu beni ÇALIŞMAYA götürdü, bu yüzden bu yanıtı göndererek bu erişim kısıtlama hatalarını komut satırından düzeltmeye çalışan herkese yardımcı olacağımı düşündüm.


13
  • Proje özelliklerinde Yol Oluştur ayarlarına gidin. Windows -> Preferences -> Java Compiler
  • JRE Sistem Kütüphanesini Kaldırma
  • "Mükemmel eşleşme" ile başka bir JRE ekleyin
  • temizleyip projenizi tekrar oluşturun. Benim için çalıştı.

13

Ben de bu sorunu yaşadım. Görünüşe göre JRE'yi oluşturma yolumda 1,6 yerine 1,5 olarak ayarlamıştım.


1
Burada da aynı sorun var. Benim durumumda, belirtilmemişse varsayılan 1.5 olan Maven kullanmak.
Greg Haskins

Güncellendiğinde değişmemesi için bunu POM'nize koymayı unutmayın. <properties> <maven.compiler.source> 1.8 </maven.compiler.source> <maven.compiler.target> 1.8 </maven.compiler.target> </properties>
Philip Rego

8

Nels Beckman'ın çözümüne ek olarak , aşağıdaki ipuçlarına sahibim:

Altında Yapılandırma Yapı Yolu , ben altında benim girişlerinin sırasını yeniden düzenlemek zorunda kaldı Sipariş ve İhracat .

Ek olarak, bir Eclipse PDE geliştiricisi olarak, MANIFEST.MFsorunlu paketi listede ilk olarak ekleyerek, benim bağımlılıkların sırasını yeniden düzenlemem gerekiyordu .

Bu kadranlarla oynarken, Project> aralarında temizle çalıştırarak bu uyarıları çözebildim.


8

benim için bunu nasıl çözerim:

  • mevcut projenin yapım yoluna git

Kütüphaneler altında

  • " JRE Sistem Kütüphanesi [jdk1.8xxx]" seçin
  • tıklayın düzenleme
  • ve "Çalışma alanı varsayılan JRE (jdk1.8xx)" VEYA Alternatif JRE'yi seçin
  • Tıkla bitir
  • Tamam'ı tıklayın

resim açıklamasını buraya girin

Not: Eclipse / Preferences (proje değil) / Java / Installed JRE'de, jdk'nin JDK klasörünü JRE değil JK C klasörüne gösterdiğinden emin olun : C Program \ Java \ jdk1.8.0_74

resim açıklamasını buraya girin


Benimki 1.7 ... 79'a ayarlanmıştı, bu yüzden panik yapıyordum. Ancak basitçe tekrar seçtim, Uygula'yı tıkladım ve hata ortadan kalktı. Whew.
Marvo

Vay. Bu da burada yardımcı oldu - "yürütme ortamından" "alternatif JRE" ye geçiş. Herkes bunun için herhangi bir mantıksal açıklaması varsa .. (burada proje musluk Java 1.5 (.settings yapılandırma dosyasında 5.0) 1.8 için değiştirdikten sonra meydana geldi. Global prefs hatadan uyarıya (diğer cevaba bakınız) geçiş yapmadı yardım: hala hatalar. com.sun.image.codec. *)
adresinden

6

Eski bir POST'u güncellediğim için üzgünüm. Bildirilen sorunu aldım ve aşağıda belirtildiği gibi çözdüm.

Eclipse + m2e maven eklentisini kullandığınızı varsayarsak, bu erişim kısıtlaması hatasını alırsanız, hatanın olduğu projeye / modüle sağ tıklayın -> Özellikler -> Yol Oluştur -> Kütüphane -> JDK Değiştir / Eclipse çalışma alanında kullanılan JRE.

Yukarıdaki adımları izledim ve sorun çözüldü.


Yeterince adil, ama temelde Nels Beckman'ın kabul edilen cevabının ifadesini çoğalttınız.
Steven Wolfe

5

Belirli bir sınıfa erişebilmeniz gerektiğinden eminseniz, bu projenize aynı adlara (veya yollara) ancak farklı içeriğe sahip sınıflar içeren birkaç kavanoz eklediğiniz anlamına gelebilir ve bunlar birbirini gölgede bırakıyor (genellikle eski bir özel build jar, 3. taraf kitaplığın yerleşik eski sürümünü içerir).

Örneğin, bir kavanoz uygulaması eklediğinizde:

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

yalnızca eski bir sürümü de uygular:

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

Kod düzenleyicide her şey iyi çalışıyor ancak "eski" kütüphane yeni kütüphaneyi gölgede bırakırsa derleme sırasında başarısız olur - d2 aniden "eksik veya erişilemez" olduğunda bile ortaya çıkar.

Çözüm, derleme zamanı kitaplıklarının sırasını kontrol etmek ve doğru uygulama ile ilk önce olduğundan emin olmaktır.


4

Proje özelliklerinde Java Oluşturma Yolu'na gidin. Varolan JRE Sistem Kütüphanesini kaldırın Sonra tekrar ekleyin, örn. Kütüphane Ekle -> JRE Lib - jre ---> Son'u seçin. Son olarak, sipariş ve dışa aktarma sekmesini seçin ve JRE Lib'i seçin. Bu kadar.


3

Sadece projenizin derleme yolu kitaplıklarının sırasını değiştirin. Proje üzerinde sağ tıklayın> Yol Oluştur> Yol Oluştur'u Yapılandır> Sipariş ve Dışa Aktar (Sekme)> Girişlerin sırasını değiştirin. Umarım "JRE Sistem kütüphanesini" aşağıya taşımak işe yarayacaktır. Benim için işe yaradı. Kolay ve basit .... !!!


3

Benim durumumda, JRE oluşturma yolu ile yürütme ortamında yüklü JRE arasında bir uyumsuzluk vardı. Proje> Özellikler> Java derleyicisine geçtim. Altta bir uyarı mesajı vardı.

'Installed JRE', 'Execution environment', 'Java build path' bağlantılarına tıkladım ve JDK sürümünü 1.7 olarak değiştirdim ve uyarı kayboldu.


0

Oluşturma yolu üzerinden doğru bir JRE Sistemi eklemek çözümdür, ancak tutulma hala hatayla karşılaşabilir. Bunu çözmek için Java Build path -> Order and Export'a gidin ve JRE sistem kütüphanenizi en üste taşıyın. Bu benim sorunumu çözdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.