JavaでPlay frameworkを試しに遊んでみるもさっそく詰まったでござる

ひさびさにJavaを触りたいと思っていた。理由はすっかり忘れているから。

ニコ生のプログラミング放送で、どのフレームワークでWebシステムを作ったほうがいいか聞いてみたところ、Play frameworkというのをおすすめされた。Java製(ツール類はPython製もあり)。というわけで、チュートリアルを触って遊んでいたら、いきなり詰まった。初のテストを書く部分で。

以下のようなエラーが自動コンパイル時に発生する。

Compilation error (In /app/models/user.java around line 9)
The file /app/models/user.java could not be compiled. Error raised is : The public type User must be defined in its own file
user.javaというファイル名なのにUserというpublicクラスを定義しようとしてエラー。しかし、ファイルシステム上のファイル名はきちんとUser.javaなんだが…

試しに、アプリケーションのtmpディレクトリを削除いてみたら、エラーが変わり

Compilation error (In /app/models/user.java around line 9)
The file /app/models/user.java could not be compiled. Error raised is : The type User is already defined
と出るようになった。

原因は、初のテストを書く部分で

User bob = user.find("byEmail", "bob@gmail.com").first();
と書いていたこと。
User bob = User.find("byEmail", "bob@gmail.com").first();
に修正したら動いた。

名前空間にuserがない -> user.javaというファイルをmodel内で探す -> open時にファイル名の大文字小文字を区別しないシステムだと(Windows/Mac) User.javaをuser.javaでも開ける -> Userの多重定義もしくはファイル名との相違 ということらしい。うおお。

Twitterで、ひさびさに触ったJavaにまだHashMapのリテラルがないことを嘆いてみた。しかし、HashMapのリテラルがないことが、Javaの設定ファイル文化を推し進めているのかな?AnnotationsがついたあたりからJavaを触っていないのでしばらくリハビリしてみる。