javac 1.6.0_22の制限を無効にして、次のようなJRE内部クラスを使用できないようにする方法はありsun.awt.event.*
ますか?
私は探していません:
- 禁止されている理由の説明。
- 異なるクラスを使用するための提案
- リフレクションを使用するための提案
- ecj/eclipseを使用するための提案
それが可能かどうか、そしてそれがどのように可能かを知りたいだけです。
私は自分で答えを見つけました。
rt.jar
javac がコードをコンパイルしているとき、デフォルトではリンクしません。lib/ct.sym
代わりに、クラス スタブを含む特別なシンボル ファイルを使用します。
驚くべきことに、このファイルには内部太陽クラスの多くが含まれていますが、すべてではありません。私の場合、通常よりも内部的なクラスの 1 つがsun.awt.event.IgnorePaintEvent
.
そして、私の質問への答えは次のとおりです。javac -XDignore.symbol.file
これは javac がコンパイルに使用するものrt.jar
です。
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>
...
通常、これは警告メッセージのみを生成します。例えば
[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 コンパイラーに指示した可能性があります。