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:

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

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top