Utilización de clases de sol internas con javac
Pregunta
¿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.*
?
Me no en busca de:
- una explicación de por qué está prohibido.
- sugerencia de utilizar diferentes clases
- sugerencia de utilizar la reflexión
- sugerencia para el uso ecj / eclipse
Sólo quiero saber si es posible o no, y si es entonces cómo.
Solución
he encontrado la respuesta a mí mismo.
Cuando javac está compilando código no enlaza contra rt.jar
por defecto.
En su lugar utiliza lib/ct.sym
especial archivo de símbolos con talones de clase.
Sorprendentemente, este archivo contiene muchos, pero no todos las clases de sol internos.
En mi caso una de esas clases más-internas que lo habitual era sun.awt.event.IgnorePaintEvent
.
Y la respuesta a mi pregunta es: javac -XDignore.symbol.file
Eso es lo que javac para compilar usos rt.jar
.
Otros consejos
Además de la respuesta por @ Marcin-wisnicki si está utilizando Maven, nota de 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>
...
Normalmente, esto sólo produce un mensaje de advertencia; por ejemplo.
[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;
Tal vez usted ha dicho que el compilador de Java a las advertencias tratan como errores.
Hay una solución mejor. Primero se debe agregar la opción de -XDenableSunApiLintControl
javac y luego usar @SupressWarnings("sunapi")
en el código.