2012-03-08 12 views
10

llamo javac de mi script Ant así:No se puede dejar de hormigas desde la generación de compilador de Sun advertencias API propietario

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

Pero todavía arroja advertencias del compilador en la salida:

[javac] Compiling 73 source files to C:\IKOfficeRoot\Java\ERP\Framework\build\classes 

[javac] C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\util\LoggerFactory.java:49: warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release 
[javac]   return Logger.getLogger(Reflection.getCallerClass(2)); 
[javac]        ^
[javac] Note: C:\IKOfficeRoot\Java\ERP\Framework\src\de\ikoffice\db\SingleShotResultSet.java uses or overrides a deprecated API. 
[javac] Note: Recompile with -Xlint:deprecation for details. 
[javac] Note: Some input files use unchecked or unsafe operations. 
[javac] Note: Recompile with -Xlint:unchecked for details. 
[javac] 1 warning 

También probé

<compilerarg line="-Xlint:-unchecked -Xlint:-deprecation"/> 

y

<compilerarg value="-Xlint:none"/> 

pero esto no tiene ningún efecto tampoco. ¿Cómo elimino las advertencias?

+1

posible duplicado de [¿Cómo puedo suprimir advertencias javac sobre el API en desuso?] (Http : //stackoverflow.com/questions/1554538/how-can-i-suppress-javac-warnings-about-deprecated-api) – stacker

+2

¡NO ES DUPLICADO! Ya sé cómo deshacerse de las advertencias de desaprobación. ¡Necesito deshacerme de las inseguras api-advertencias ahora! – Daniel

+0

posible duplicado de [Suprimir advertencia de javac "... es una API interna patentada y puede ser eliminada en una versión futura"] (http://stackoverflow.com/questions/13855700/suppress-javac-warning-is-privatary -api-and-may-be-removed-in-af). Este es más temprano, pero preferiría mantener el que no menciona a Ant: lo que importa es javac –

Respuesta

13

agregando la opción -XDignore.symbol.file a la línea de comando javac trabajado para mí.

1

No puede hacer eso: Ni desde la línea de comandos, por lo que tampoco puede hacerlo desde Ant.

La documentación javac dice:

-Xlint: ninguno

deshabilitar todas las advertencias no obligados por la especificación del lenguaje Java.

Parece que este tipo de advertencia no se puede suprimir, ya que se generan directamente por el JLS.

Lo que puede hacer es:

  1. uso @SuppressWarnings({"deprecation"}, {"unchecked"}) en las posiciones requeridas
  2. utilizan alguna solución para redirigir los mensajes de advertencia a /dev/null
  3. tratar de compilar desde la línea de comandos con los -Xlint:-unchecked -Xlint:-deprecation argumentos, tal vez solo sea un problema relacionado con Ant.
+1

-Xlint: -unchecked no tiene ningún efecto para mí. Parece que simplemente no hay forma de evitar advertencias desde la línea de comandos, a pesar de lo que dice la documentación. (-Xmaxwarns 0 tampoco tiene efecto) – Antimony

2

Recomendación: No ignore las advertencias de su compilador. Las advertencias están ahí por una razón. La base de código heredada de mi empresa se está moviendo hacia un modelo de "tratar las advertencias como errores y fallar la compilación", ya que podemos dedicar el esfuerzo a corregir las advertencias producidas durante nuestro ciclo de compilación.

En su caso, la advertencia es:

warning: sun.reflect.Reflection is Sun proprietary API and may be removed in a future release 

Siempre ha sido una advertencia para no importar de paquetes sun el tiempo que puedo recordar, porque son una API no pública. Incluso hay un FAQ al respecto en el sitio oficial de Oracle Java.

No ha publicado su código real, por lo que es difícil proporcionar más recomendaciones ... ¿Qué está utilizando en sun.reflect.Reflection que no podría hacer también a través de algo en java.lang.reflect?

+0

Porque tenemos un botón llamado "Bloquear el servidor". Éste usa la clase Inseguro para modificar la memoria en la ubicación 0 que conduce a un bloqueo de JVM. Esta buena utilidad nos ayuda a probar el código de recuperación de fallas de JVM. Además, es más rápido examinar stacktraces de esta manera. – Daniel

0

Para evitar advertencias de desaprobación, traté de hacerlo utilizando JDK 6 y JDK 7.

con JDK 7, @Deprecated anotación hace el trabajo

con JDK 6, no funciona, sin añadir -Xlint:-deprecation parámetro funciona para mí. La única manera me las arreglé para quitar la advertencia estaba usando el @deprecatedJavadoc Tag:

/** 
    * @deprecated 
    */ 
    @Override 
    public void removeValue(String arg0) { 
    // TODO Auto-generated method stub 
    } 
1

uso nowarn atributo véase más adelante

por ejemplo,

<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

3

La mejor manera de hacer esto es utilizar la supresión sunapi, es decir, ya sea -Xlint:-sunapi para toda la compilación, o @SuppressWarnings("sunapi") a su alcance requerido.

Nota, la única manera de utilizar esta supresión, sin embargo, es a primera activarlo con la opción de compilador -XDenableSunApiLintControl

enableSunApiLintControl

+0

¡Trabajó para mí, gracias! En comparación con otras soluciones que encontré, esta no requiere copiar el compilador de Gradle. – botismarius

+0

leyendo el código fuente ftw ... – Alun

+0

Lamentablemente esto ha dejado de funcionar con Java 9 –

Cuestiones relacionadas