52

javac 1.6.0_22の制限を無効にして、次のようなJRE内部クラスを使用できないようにする方法はありsun.awt.event.*ますか?

私は探していません:

  1. 禁止されている理由の説明。
  2. 異なるクラスを使用するための提案
  3. リフレクションを使用するための提案
  4. ecj/eclipseを使用するための提案

それが可能かどうか、そしてそれがどのように可能かを知りたいだけです。

4

6 に答える 6

93

私は自分で答えを見つけました。

rt.jarjavac がコードをコンパイルしているとき、デフォルトではリンクしません。lib/ct.sym代わりに、クラス スタブを含む特別なシンボル ファイルを使用します。

驚くべきことに、このファイルには内部太陽クラスの多くが含まれていますが、すべてではありません。私の場合、通常よりも内部的なクラスの 1 つがsun.awt.event.IgnorePaintEvent.

そして、私の質問への答えは次のとおりです。javac -XDignore.symbol.file

これは javac がコンパイルに使用するものrt.jarです。

于 2010-11-01T16:08:33.210 に答える
40

Maven を使用している場合は @marcin-wisnicki による回答に加えて、指定しない限り 、コンパイラ プラグインは -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>
            ...
于 2015-05-27T03:10:10.530 に答える
0

通常、これは警告メッセージのみを生成します。例えば

[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 コンパイラーに指示した可能性があります。

于 2010-11-01T04:32:52.503 に答える