2009-10-04 20 views
6

Ten błąd jest dziwny i nie mogę mieć z tego wiele sensu. Zainstalowałem aktualizację EclipseRCP 3.5.1, Java SE 1.6 16 i przełączono na SWT 3.5. Stworzyłem nowy projekt, skonfigurowałem zależności i próbowałem skompilować. Podczas próby importowania, użyj następujących:Eclipse 3.5.1 Błąd kompilatora: Typ OutputFormat jest niedostępny z powodu ograniczenia wymaganej biblioteki ../rt.jar

import com.sun.org.apache.xml.internal.serialize.OutputFormat; 
import com.sun.org.apache.xml.internal.serialize.XMLSerializer; 

pojawia się błąd:

Access restriction: The type XMLSerializer is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar. 

Już google, czytać niektóre reakcje here..and problem jest nadal. Zabawne jest to, że jeśli korzystam z poprzedniego EclipseRCP (wersja: 3.4.2), ten problem nigdy nie występuje. Wersja 3.4.2 używa tej samej wersji JRE, a ja właśnie przetestowałem wersję SWT. Działa w porządku. Domyślam się, że problem polega na jakiejś wtyczce nowego IDE. Jakieś pomysły?

P.S. Znalazłem to article. Ale nie lubię lub chcę zmienić kod, jeśli nie muszę. Co jest źródłem problemu w pierwszej kolejności, a rozwiązanie zostanie zastosowane ..

Odpowiedz

10

Domyślna konfiguracja kompilatora Eclipse jest zbyt restrykcyjna. Możesz go rozluźnić, otwierając preferencje dla Javy -> Kompilator -> Błędy/ostrzeżenia i "Przestarzały i ograniczony interfejs API" zmień ustawienie "Niedozwolone odniesienie (reguły dostępu)" z błędu na ostrzeżenie lub zignoruj.

Pytanie jednak brzmi, czy naprawdę chcesz używać klas w pakiecie com.sun., ponieważ nie masz gwarancji, że będą one dostępne w VM od innego dostawcy lub od nowszej maszyny VM od firmy Sun.

+0

Tak, jestem świadomy ustawienia zaćmienia, aby obejść problem, ale to samo ustawienie było w starszej wersji RCP, a ja nie miałem problemu. Nigdy wcześniej o tym nie słyszałem ... więc dlaczego ten pakiet com.sun. istnieje nawet, jeśli jego użycie nie jest zalecane? – hypercube

+0

Celem importu było odczytywanie/zapisywanie plików XML, ponieważ rozumiem, że JDK1.6 ma wbudowane parsery XML. Sugerujesz, że nie można tego zrobić, ponieważ nie powinno się używać com.sun. *? – hypercube

+0

Jest używany wewnętrznie przez publiczne API, prawdopodobnie JAXB lub coś podobnego. Jeśli potrzebujesz klas bezpośrednio, powinieneś zamiast tego dodać Apache Xerces-J jako bibliotekę i użyć zamiast tego klas org.apache.xml.serialize.OutputFormat i org.apache.xml.serialize.XMLSerializer. – jarnbjo

1

Uwaga dla każdego, kto ma podobny problem i wydaje się, że nie działa ustawienie Eclipse (np. Ja właśnie teraz): sprawdź, czy "Niedozwolony odnośnik" nie jest ustawiony na "Błąd" w ustawienia specyficzne dla projektu.

1

Piszę do tego starego wątku tylko dla odniesienia dla każdego, kto natknie się na to w przyszłości.

Miałem ten sam problem, ale został spowodowany, ponieważ miałem poziom zgodności kompilatora ustawiony na 1,5 podczas korzystania z kompilatora 1.6. Wszystkie dodatki zawarte w 1.6 (takie jak javax.activation i niektóre z powyższych możliwości xml) zostaną "ograniczone" przez kompilator 1.6, jeśli poziom zgodności zostanie ustawiony na niższy niż 1.6. Właśnie musiałem dodać odpowiednie biblioteki (na przykład activation.jar), aby pozbyć się problemu w moim przypadku.

Powiązane problemy