コンパイルエラー「\65279は不正な文字です。」
Eclipse上で問題なく動いていたJavaコードに対して、コマンドラインからビルドをかけたところ表題のエラーが発生した。
\65279 = UTF-8のBOM(Byte Order Mark)
どうやらソースファイルの中に、エンコードUTF-8でBOMありのものが紛れ込んでいるらしい。
Windows機を使用していたので、手っ取り早い対処法にて対応した。
【対処方法】
1. サクラエディタで対象ファイルを開く
2. 名前をつけて保存を選択
3. 文字コードセット、改行コードの右側のBOMチェックをOFFにする
4. 保存する(上書き)
【Eclipseでエラーにならなかったのに、なんでjavacだとエラーになるの?】
EclipseではJDTコンパイラを使用していて、コマンドラインではOracle純正コンパイラを使用していることが原因。
マシンの環境パスで指定するjava.exeは、普通はOracle公式サイトから落とした純正のものを利用する。コマンドラインでコンパイルする時はこれが使われる。
一方で、Eclipseでコンパイルする時には、Eclipseの中のjava.exeが使われる。このjava.exeはEclipse独自のもの。
そして重要な事は、
eclipseコンパイラは純正コンパイラよりもコンパイルエラーとする条件が緩い。
ということ。
調べてみるとこんなのがあった。
JDTコンパイラならOKだけど、純正コンパイラじゃ通らない記述
http://d.hatena.ne.jp/eyamane/20061212/1165892799
ECJ (Eclipse Compiler for Java) は面倒見が良すぎ…
http://d.hatena.ne.jp/imatake/20100702/1278038592
知っていればたいしたことないけど、知らないとハマる罠。
オマケ
JDT(Java Development Tools)の概要
なぜ Eclipse は JRE を使っているのにコンパイルできるの?
http://www.hitachi.co.jp/Prod/comp/soft1/cosminexus/useful/tips/090606_eclipse-jre-compile.html