2009-07-16 21 views
14

Używam metody encode() z pakietu sun.misc.BASE64Encoder. Jak tłumić ostrzeżenia kompilatora, które generuje?Jak mogę stłumić ostrzeżenia kompilatora java o zastrzeżonym przez firmę Sun API

sun.misc.BASE64Encoder jest Sun zastrzeżonych API i może być usunięta w

I jako obserwacji, dlaczego nie widzę to ostrzeżenie w Eclipse?

+1

można zastąpić go innym wdrożenia, np http://iharder.sourceforge.net/current/java/base64/ – JeeBee

+5

lub http: // świetlicy. apache.org/codec/apidocs/org/apache/commons/codec/binary/Base6 4.html – JeeBee

+1

możliwy duplikat [Suppress javac warning "... jest wewnętrznym zastrzeżonym API i może zostać usunięty w przyszłym wydaniu"] (http://stackoverflow.com/questions/13855700/suppress-javac-warning-is- wewnętrzne zastrzeżenie-api-and-may-be-removed-in-af) – Flow

Odpowiedz

16

Można przełączyć się na inny realizacji Base64, np http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html który jest częścią Apache Commons pakietów, które można już zawarte w ścieżce klas lub http://iharder.sourceforge.net/current/java/base64/ które można po prostu wziąć wdrażania i trzymaj się swojego drzewa źródłowego, jeśli nie chcesz kolejnego Słoika na ścieżce.

+0

Czy mogę po prostu zmienić import do wersji Apache Commons i evertyhing będzie działać tak samo? –

0

Kapsuł wywołanie klasy, którą umieszczasz w słoiku biblioteki w ścieżce klas. Następnie ostrzeżenie pokazuje tylko, kiedy biblioteka jest rekompilowana.

2

Nie można ich wyłączyć, Eclipse po prostu je odfiltrowuje (jeśli tak się stanie).

Szybka poprawka tymczasowa w systemie Linux:

javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^" 

2> & 1 ... stawia STDERR do STDOUT, więc rurociąg "|" zadziała

pcregrep może lub nie może być obecny w systemie - jeśli nie, użyj narzędzia do opakowania (np Debian, Ubuntu itp: „sudo apt-get install pcregrep”)

wyszukuje wyrażenie na Ostrzeżenie "Sun zastrzeżonych API" i następujące dwie linie (zawierające linię i "^" wskazujące pozycję błędu w linii).

Zostawiam "Ostrzeżenia XY". wiersz na końcu, bo ja nie zapomnę były ostrzeżenia; o) pamiętać, że jeśli masz inne ostrzeżenia, a także liczba zgłoszonych tam oczywiście nie będą poprawne: o)

Zauważ też, że standard " grep "nie działa tak dobrze, ponieważ nie może rozciągać się na wiele linii.

+0

ah, ale możesz je wyłączyć! zobacz odpowiedź Michaela Chavesa! –

3

Eclipse ma ustawienie, które (należy) wybrać, patrz np. desciption w the Eclipse 3.1 release notes:

Preferencje → Java → Compiler → Błędy/ostrzeżenia → przestarzała i ograniczony API → Zakazane/zniechęcony referencyjny

(a strona właściwości projektu, aby umożliwić przesłonięcia konkretnych projektów tego ustawienia)

-3

javac opcja -Xlint:unchecked robi rade: to wyłącza ostrzeżenia, patrz the javac manual szczegóły

+2

Nie, ta flaga nie wyłącza tego konkretnego ostrzeżenia. –

24

jest całkowicie nieudokumentowane sposób stłumić ostrzeżenia słońce zastrzeżonych API! Dodaj -XDignore.symbol.file do linii poleceń javac.

Znalazłem to pod http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630 (przewiń do ostatniego komentarza).Wszyscy musimy pomyśleć o "xfournet", którzy dodali ostatni komentarz!

+0

Dziękujemy! Dokładnie tego potrzebuję! –

+4

Warto pamiętać, dlaczego ostrzeżenie istnieje i dlaczego nie można go zamknąć, a nie przy użyciu funkcji @SuppressWarnings ("all") "lub" -nowarn' lub "-Xlint: none" lub "-Xmaxwarns" 0'. Jeśli jesteś zależny od klas wewnętrznych, Twój program zostanie przerwany prędzej czy później. Ale jest to zgrabny hack, kiedy wiesz, co robisz, a zastrzeżonym ostrzeżeniem API jest po prostu zatykanie konsoli. Dzięki! – Boann

2

Jeśli rozumiesz nieodłącznych problemów z wykorzystaniem opatentowanej API i zdecydujesz się zrobić to tak, a jeśli używasz Maven, może być zainteresowany dodanie następujących do pliku pom.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.3.2</version> 
    <configuration> 
     <compilerArgument>-XDignore.symbol.file</compilerArgument> 
    </configuration> 
</plugin> 
0

If używasz JDK 1.8, można korzystać z niżej

java.util.Base64