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 fileuser.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を触っていないのでしばらくリハビリしてみる。