2009-10-12 10 views
46

Kiedy skompilować, wyjścia javac:Jak mogę ukryć ostrzeżenia javac o przestarzałych api?

Note: Some input files use or override a deprecated API. 
Note: Recompile with -Xlint:deprecation for details.` 

chcę tłumić to ostrzeżenie. Trying -Xlint: żaden nie wydaje się pomóc.

+4

Dlaczego go unikać? Połączenia należy zastąpić przestarzałymi interfejsami API z rozwiązaniami, które nie korzystają z nieaktualnego interfejsu API. –

+19

ponieważ kompiluję moduły innych programistów z wieloma liniami kodu. próbując przekonać ich, aby przeszli przez kod i naprawili go, jest to daremne. – IttayD

+1

To jest dokładnie mój problem. Dopóki nie mam czasu, aby naprawić ostrzeżenia, robię javac ... 2> & 1 | grep -v "Uwaga:" –

Odpowiedz

30

Z tego, co mogę powiedzieć w dokumentach, nie można tego zrobić w wierszu polecenia.

Zgodnie z javac documentation, -Xlint: none wyłącza tylko ostrzeżenia "nie wymagane przez specyfikację języka Java". Wygląda na to, że ostrzeżenie o użyciu przestarzałych interfejsów API jest zarządzane przez specyfikację językową.

Najlepszą opcją byłoby naprawienie użycia wycofanych interfejsów API. Jednak można dodać adnotację @SuppressWarnings("deprecation") do klas lub metod, które używają wycofanych interfejsów API.

+1

Dla Jdk 5, używam -Xlint: all.To wydaje się tłumić wszystkie ostrzeżenia o wycofaniu, odznaczone, itp. – Abi

+5

Co zrobić, jeśli nie ma importu dla nieaktualnych klas ?. Wszelkie opcje, aby ukryć takie ostrzeżenia? – Abhilash

+2

Istnieje co najmniej jeden uzasadniony powód do zignorowania ostrzeżeń o przestarzałości, i to jest, gdy twoja struktura udostępnia metodę, która została uznana za przestarzałą, ale która w pewnym momencie wywołuje samą strukturę, ponieważ ta przestarzała metoda musi być kontynuowana. być wspierane, dopóki nie zostanie usunięte. –

28

dwa sposoby:

  1. nie używać przestarzała API
  2. Korzystając @SuppressWarnings("deprecation")
+11

1. nie używaj przestarzałego API, 2. zastanów się dwa razy przed użyciem przestarzały API; 3. Użyj @SuppressWarnings ("wycofanie"). :) +1 –

+22

Poprosiłem o wyłączenie ostrzeżenia. Oczywiście mogę uniknąć używania przestarzałego API, ale ponieważ baza kodu zawiera dwa zespoły, nie mogę ich przekonać wszystko to zrobić: – IttayD

1

Jeśli jest to rdzeń Java API, jest prawie na pewno wymiana które będą robić to, co chcesz . Uruchom javac z tym dodatkowym parametrem, a następnie spójrz na API dla nieaktualnej metody i zastąp ją stosownie.

20

Dla innych, które były Google szukając tego problemu i natknąć się na tego wątku jak ja ...

Spróbuj: -Xlint: -deprecation

wydaje się działać na JDK 6 ... nie pewnie o innych.

+1

Pamiętaj, że to wyłącza wszystkie ostrzeżenia o przestarzałości, nie tylko na wybranych metodach. –

+0

Przynajmniej javac Icedtea8 akceptuje -Xlint: -deprecation tylko, aby go zignorować. (to jest nadal generowane ostrzeżenia o przestojach). –

+0

Możesz także użyć kilku ustawień lint razem. Moja konfiguracja ma '-Xlint: all -Xlint: -deprecation', więc wszystko oprócz wycofania generuje ostrzeżenie. –

10

W przypadku języka Java 6 nie pomoże tutaj adnotacja @Depreated ani flaga comlera. Jedynym rozwiązaniem, który pracował dla mnie było umieścić komentarz javadoc z @deprecated (small caps) tag na przestarzałe metody:

/** 
    * @deprecated overriding deprecated method 
    */ 
@Override 
public javax.xml.bind.Validator createValidator() throws JAXBException {...} 

(Przykładem jest z klasy, który wynika z JAXBContext.)

(nie importować przestarzałej klasy Validator uniknąć ostrzeżenie na rachunku importu.)

+1

Dzięki Wolfgang. Adnotacja @SuppressWarnings ("deprecation") nie działała całkowicie, niektóre ostrzeżenia były nadal wyświetlane. Dodanie komentarza @deprecated usunęło je wszystkie. –

0

użytkowania nowarn atrybut patrz niżej

np.

<javac srcdir="src" 
    destdir="build/classes" source="1.6" 
    target="1.6" debug="true" encoding="Cp1252" 
    nowarn="on"> 

domyślnie atrybut nowarn jest wyłączony

5

Podczas korzystania Gradle można skonfigurować go łatwo:

tasks.withType(JavaCompile) { 
    options.deprecation = false 
} 

(testowane z Gradle 2 i Java 8)

1

@SuppressWarnings("deprecation") jest nie działa dla mnie, zamiast tego użyłem

@SuppressWarnings("unchecked") 
Powiązane problemy