2009-10-12 9 views
46

Cuando compilo, salidas javac:¿Cómo puedo suprimir las advertencias de javac sobre la API obsoleta?

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

deseo de suprimir esta advertencia. Probando -Xlint: ninguno parece ayudar.

+4

¿Por qué evitarlo? Debe reemplazar las llamadas a API obsoletas con soluciones que no usan una API obsoleta. –

+19

porque estoy compilando módulos de otros desarrolladores con muchas líneas de código. Tratar de convencerlos a todos de revisar el código y arreglarlo es inútil. – IttayD

+1

Este es exactamente mi problema también. Hasta que tenga tiempo para arreglar las advertencias, estoy haciendo un javac ... 2> & 1 | grep -v "Nota:" –

Respuesta

30

Por lo que puedo decir en los documentos, no puede hacerlo en la línea de comandos.

De acuerdo con javac documentation, -Xlint: none solo deshabilita las advertencias "no exigidas por la especificación de lenguaje Java". Parece que advertirle sobre el uso de API en desuso está gestionado por la especificación del idioma.

Su mejor opción sería corregir el uso de las API en desuso. Sin embargo, una opción sería agregar la anotación @SuppressWarnings("deprecation") a las clases o métodos que usan las API obsoletas.

+1

Para Jdk 5, uso -Xlint: all. Esto parece suprimir todas las advertencias de deprecation, desmarcado, etc. – Abi

+5

¿Qué pasa si hay importaciones para las clases en desuso? ¿Alguna opción para ocultar tales advertencias? – Abhilash

+2

Hay al menos una razón legítima para suprimir las advertencias de desaprobación, y es entonces cuando su marco de trabajo proporciona un método que ha sido desaprobado pero que el propio marco invoca en algún momento porque el método desaprobado debe continuar. ser compatible hasta que se elimine. –

28

dos maneras posibles:

  1. no utilizan la API en desuso
  2. Uso @SuppressWarnings("deprecation")
+11

1. No use la API en desuso, 2. pensar dos veces antes de usar una API obsoleta; 3. Utilizar @SuppressWarnings ("deprecation"). :) +1 –

+22

Pregunté cómo desactivar la advertencia. Obviamente puedo evitar el uso de API obsoleta, pero como la base de código involucra a dos equipos, no puedo persuadirlos. todo para hacer eso. – IttayD

1

Si se trata de un núcleo de la API de Java, es casi seguro que un reemplazo que va a hacer lo que quiere . Ejecute javac con ese parámetro adicional, y luego mire la API para el método obsoleto y reemplácelo según corresponda.

20

Para otros que estaban buscando Google este problema y te topas con este hilo como lo hice ...

Probar: -Xlint: -deprecation

Parece que funciona en JDK 6 no ... seguro sobre otros.

+1

Teniendo en cuenta que esto desactiva todas las advertencias de desactivación no solo en los métodos seleccionados. –

+0

Al menos el javac de icedtea8 acepta -Xlint: -deprecación solo para ignorarlo. (es decir, las advertencias de desaprobación siguen produciéndose). –

+0

Y puede usar varias configuraciones de pelusa juntas. Mi configuración tiene '-Xlint: all -Xlint: -deprecation' para que todo excepto la obsolescencia genere una advertencia. –

10

Con Java 6, ni la anotación @Depreated, ni la bandera de un comiler lo ayudarán aquí. La única solución que funcionó para mí fue poner un comentario javadoc con los @deprecated (versales) etiqueta en el método en desuso:

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

(el ejemplo es de una clase que deriva de JAXBContext.)

(I no importaron la clase Validador en desuso para evitar una advertencia en la declaración de importación.)

+1

Gracias Wolfgang. La anotación @SuppressWarnings ("deprecation") no funcionaba por completo, algunas de las advertencias seguían saliendo. Agregar el @deprecated comentario los suprimió a todos. –

0

uso nowarn atributo véase más adelante

p. Ej.

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

por atributos nowarn por defecto está desactivada

5

Al utilizar Gradle se puede configurar fácilmente:

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

(probado con Gradle 2 y Java 8)

1

@SuppressWarnings("deprecation") es no funciona para mí, en su lugar he usado

@SuppressWarnings("unchecked") 
Cuestiones relacionadas