Sun.awt.event.*
のようなJRE内部クラスの使用を妨げるjavac 1.6.0_22の制限を無効にする方法はありますか?
私はnotを探しています:
可能かどうか、それがどのように可能かを知りたいだけです。
自分で答えを見つけました。
Javacがコードをコンパイルしているとき、デフォルトではrt.jar
に対してリンクしません。代わりに、クラススタブで特別なシンボルファイルlib/ct.sym
を使用します。
驚いたことに、このファイルには、すべてではありませんが多くの内部Sunクラスが含まれています。私の場合、これらの通常より内部的なクラスの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コンパイラに警告をエラーとして処理するように指示した可能性があります。
より良い解決策があります。最初にオプションをjavac _-XDenableSunApiLintControl
_に追加してから、コードで@SupressWarnings("sunapi")
を使用します。