ワーパパエンジニアの学び手帳

ワーパパエンジニアの業務外での学びとかガジェットネタとか

【Java】Eclipseで動いてたJavaのコードをJDKでコンパイルかけたらエラーとなったときの話

元ブログからの移行記事です。

いきなりJavaの話。

先日、とある理由からこれまでEclipseコンパイルしていたJavaのコードをJDKコンパイルしないといけないことになり、とりあえずantのbuild.xml等用意してコンパイルしてみた。

で、こんなエラーが発生。

『XXXXXX.java:1: エラー: \65279は不正な文字です』

・・・????

Eclipseコンパイルをかけても上記エラーは発生せず、何だこれは、と頭の中に『?』がぞろぞろと。

なぜEclipseだとエラーが出ないのか、という点については、Eclipseコンパイルする際にはEclipse独自のコンパイラを使用していることが要因。 www.hitachi.co.jp

どうもEclipse独自のコンパイラJDKよりもコンパイルエラーとする条件が緩い、らしい。。そのためにエラーが出ていたみたい。

Eclipseコンパイルしたコードの挙動で問題になったことは自分の経験ではないのですが、気持ち悪いですね。。

で、結局のところどうしたらJDKでのコンパイルエラーが解消できるのか、何故エラーになるのかが分からずしばし途方に暮れていたのですが。

こういう場合はエラーメッセージでググるっていう鉄則?を忘れておりました。ああ恥ずかしい。

ググってみたらまんま同じ事象が出てきましたよ。 monokurotamago.hatenablog.com

どうやら、

\65279 = UTF-8のBOM(Byte Order Mark)

であり、コンパイルエラーとなっていたソースコードにBOMが含まれていたことが原因のようです。

BOMを外すには、サクラエディタで対象のコードを開いて、「名前をつけて保存」でBOMのチェックを外して保存でOK(詳細は上記リンク参照)。

そもそもBOMってなんやねん。ということでさらに調べると、 dorafop.my.coocan.jp

詳細は上記リンクを見て頂くとして、『Javaソースをメモ帳で編集してUTF-8で保存すると、選択の余地なく勝手にBOMが付いてしま』うということらしい。

コンパイルエラーになってたコードが1本だけなので、ナゼこの1本だけメモ帳で編集したのよ…?というギモンはあるのですが、とりあえず原因は判明してよかった。