sun.misc.BASE64Encoderパッケージのencode()メソッドを使用しています。生成されるコンパイラ警告を抑制するにはどうすればよいですか?
sun.misc.BASE64EncoderはSun独自のAPIであり、で削除される可能性があります
そしてフォローアップとして、Eclipseでこの警告が表示されないのはなぜですか?
Sun独自のAPI警告を抑制するための完全に文書化されていない方法があります!コマンドラインに追加-XDignore.symbol.file
します。javac
これはhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6476630で見つかりました(最後のコメントまでスクロールしてください)。その最後のコメントを追加した「xfournet」について、私たちは皆親切な考えを考える必要があります!
別のBase64実装に切り替えることができます。たとえば、 Apachecommonsパッケージの一部であるhttp://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.htmlです。すでにクラスパス、またはhttp://iharder.sourceforge.net/current/java/base64/に含まれています。これは、パスに別のJarが必要ない場合は、実装を取得してソースツリーに固定することができます。
Eclipseには、これを(すべき)設定があります。たとえば、Eclipse3.1リリースノートの説明を参照してください。
環境設定→Java→コンパイラ→エラー/警告→非推奨および制限されたAPI→禁止/非推奨のリファレンス
(およびこの設定のプロジェクト固有のオーバーライドを許可するプロジェクトプロパティページ)
それらをオフにすることはできません。Eclipseは単にそれらをフィルタリングします(そうするように指示された場合)。
Linuxでのクイック暫定修正:
javac *.java 2>&1 | pcregrep -v -M ".*Sun proprietary API.*\n.*\n.*\^"
2>&1 ... STDERRをSTDOUTに入れるので、パイプライン "|" 動作します
pcregrepがシステムに存在する場合と存在しない場合があります。存在しない場合は、パッケージユーティリティを使用してください(例:Debian、Ubuntuなど: "sudo apt-get install pcregrep")
この式は、「Sun独自のAPI」警告と次の2行(行と、行内のエラーの位置を示す「^」を含む)を検索します。
「XY警告」は残しておきます。警告があったことを忘れないように、最後に入力してください; o)他の警告もある場合は、そこに報告されている数はもちろん正しくないことに注意してください:o)
また、標準の「grep」は複数の行にまたがることができないため、同様に機能しないことにも注意してください。
プロプライエタリAPIを使用する際の固有の問題を理解し、とにかくそれを実行することにした場合、およびmavenを使用している場合は、pom.xml
ファイルに以下を追加することに興味があるかもしれません。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<compilerArgument>-XDignore.symbol.file</compilerArgument>
</configuration>
</plugin>
クラスパスのライブラリjarに配置するクラスに呼び出しをカプセル化します。その場合、警告はそのライブラリが再コンパイルされたときにのみ表示されます。
jdk 1.8を使用している場合は、以下を使用できます
java.util.Base64
このjavac
オプション-Xlint:unchecked
はトリックを実行します。警告を無効にします。詳細については、javacのマニュアルを参照してください。