Использование внутренних классов солнца с Javac - PullRequest
48 голосов
/ 01 ноября 2010

Есть ли способ отключить ограничения javac 1.6.0_22, которые мешают мне использовать внутренние классы JRE, такие как sun.awt.event.*?

Я не ищу:

  1. объяснение, почему это запрещено.
  2. предложение использовать разные классы
  3. предложение использовать отражение
  4. предложение использовать ecj / eclipse

Я просто хочу знать, возможно ли это или нет, и если да, то как.

Ответы [ 4 ]

87 голосов
/ 01 ноября 2010

Я нашел ответ сам.

Когда javac компилирует код, он не связывается с rt.jar по умолчанию.Вместо этого он использует специальный символьный файл lib/ct.sym с заглушками классов.

Удивительно, но этот файл содержит много, но не все внутренние классы солнца.В моем случае один из тех классов, которые были более внутренними, чем обычно, был sun.awt.event.IgnorePaintEvent.

. И ответ на мой вопрос: javac -XDignore.symbol.file

Вот что javac использует для компиляции rt.jar.

30 голосов
/ 27 мая 2015

В дополнение к ответу @ marcin-wisnicki, если вы используете Maven, обратите внимание, что плагин компилятора молча отбрасывает все флаги -XD , если вы не укажете также <fork>true</fork>: например,

<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 голосов
/ 18 января 2017

Есть лучшее решение.Сначала добавьте параметр в javac -XDenableSunApiLintControl, а затем используйте @SupressWarnings("sunapi") в своем коде.

0 голосов
/ 01 ноября 2010

Обычно, это только выдает предупреждающее сообщение;например,

[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;

Возможно, вы указали компилятору Java обрабатывать предупреждения как ошибки.

...