2010-10-31 5 views
39

¿Hay una manera de desactivar las restricciones de javac 1.6.0_22 que me impiden el uso de clases internas JRE como sun.awt.event.*?Utilización de clases de sol internos con javac

estoy no buscando:

  1. una explicación de por qué está prohibido.
  2. sugerencia de utilizar diferentes clases
  3. sugerencia de utilizar la reflexión
  4. sugerencia de utilizar ecj/eclipse

sólo quiero saber si es posible o no, y si es entonces cómo.

+0

¿Puedo hacer una pregunta? ¿Por qué? – JeremyP

+0

¿Qué errores está obteniendo exactamente? Puedo compilar contra 'sun.awt. *' Bien con javac 1.6.0_22 (en la Mac, sin embargo). – Thilo

+0

Estoy haciendo algunos experimentos con Swing/AWT y tengo que acceder a sus partes internas. –

Respuesta

74

he encontrado la respuesta a mí mismo.

Cuando javac está compilando código no enlaza contra rt.jar por defecto. En su lugar, utiliza el archivo de símbolo especial lib/ct.sym con apéndices de clase.

Sorprendentemente Este archivo contiene muchas, pero no todas las clases de sol internos. En mi caso, una de esas clases más internas que el habitual fue sun.awt.event.IgnorePaintEvent.

Y la respuesta a mi pregunta es: javac -XDignore.symbol.file

Eso es lo que usa javac para compilar rt.jar.

+0

Tenía exactamente el mismo problema, estaba tratando de compilar pero recibía este error 'paquete sun.nio.fs no existe' para' sun.nio.fs .BasicFileAttributesHolder' –

+0

También vea la respuesta de @karmakaze para una solución adicional para el complemento del compilador Maven. – karmakaze

+0

¿Cómo agregar esto a través del símbolo del sistema?Necesito aplicarlo para mi aplicación web desplegada en tomcat bajo linux –

0

Normalmente, esto sólo produce un mensaje de advertencia; p.ej.

[javac] /media/disk/opensso2/opensso/products/federation/openfm/source/com/sun/identity/wss/xmlsig/WSSSignatureProvider.java:46: warning: com.sun.org.apache.xpath.internal.XPathAPI is Sun proprietary API and may be removed in a future release 
[javac] import com.sun.org.apache.xpath.internal.XPathAPI; 

Quizás le haya dicho al compilador de Java que trate las advertencias como errores.

+2

O tal vez está confundiendo las advertencias por errores usted mismo. – EJP

+0

@EJP - buen punto. –

+0

¿Cómo agregar esto a través del símbolo del sistema? Necesito aplicarlo para mi aplicación web desplegada en tomcat bajo linux –

20

Además de la respuesta por @ Marcin-wisnicki si está utilizando Maven, tenga en cuenta que el plugin compilador silenciosamente dejar caer las banderas -xd, a menos que se especifique también <fork>true</fork>: por ejemplo,

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.3</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <compilerArgs> 
        <arg>-XDignore.symbol.file</arg> 
       </compilerArgs> 
       <fork>true</fork> 
      </configuration> 
      ... 
+0

¿Cómo agregar esto a través del símbolo del sistema? Necesito aplicarlo para mi aplicación web desplegada en tomcat bajo linux –

+0

¡Hombre, salvó mi día con esto! Gracias :) – Anakin001

+0

@ Anakin001 me alegro de escucharlo. Estos éxitos oscuros son los que realmente me gusta acostumbrarme. – karmakaze

0

Hay una solución mejor. Primero agregue la opción a javac -XDenableSunApiLintControl y luego use @SupressWarnings("sunapi") en su código.

Cuestiones relacionadas