proyecto - Usar clases de sol internas con javac
ejecutar.class java (4)
¿Hay alguna manera de desactivar las restricciones de javac 1.6.0_22 que me impiden usar clases internas de JRE como sun.awt.event.*
?
No estoy buscando:
- una explicación de por qué está prohibido.
- sugerencia de usar diferentes clases
- sugerencia de usar la reflexión
- sugerencia de usar ecj / eclipse
Solo quiero saber si es posible o no, y si es así, cómo.
Además de la respuesta de @ marcin-wisnicki si usa Maven, tenga en cuenta que el complemento del compilador eliminará silenciosamente todos los distintivos -XD , a menos que también especifique <fork>true</fork>
: por ej.
<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>
...
Hay una mejor solución. Primero agregue la opción a javac -XDenableSunApiLintControl
y luego use @SupressWarnings("sunapi")
en su código.
He encontrado la respuesta yo mismo.
Cuando javac está compilando código, no enlaza con rt.jar
de forma predeterminada. En su lugar, utiliza el archivo de símbolos especiales lib/ct.sym
con stubs de clase.
Sorprendentemente, este archivo contiene muchas pero no todas las clases de sol internas. En mi caso, una de esas clases más internas que las habituales fue sun.awt.event.IgnorePaintEvent
.
Y la respuesta a mi pregunta es: javac -XDignore.symbol.file
Eso es lo que javac usa para compilar rt.jar
.
Normalmente, esto solo 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.