Play2.1.0 の models と controllers の package object がうざい問題

ちなみに、最新版では改善されてます*1

https://github.com/playframework/Play20/blob/2.1.0/framework/src/play/src/main/scala/play/api/models/package.scala

2.1.0というか、2.0.4の頃からあるんですね・・・。

https://github.com/playframework/Play20/blob/2.0.4/framework/src/play/src/main/scala/play/api/models/package.scala

package play.api

package object models

にするべきところを、単に

package object models

としている・・・と思ったら、そうでなく理由あるかもしれない(?) *2 けど、面倒なので詳しく追ってません。sampleにおいてmodelsパッケージやcontrollersパッケージあるので、そのパッケージ構成がなんとなく推奨されてる気がするが、

https://github.com/playframework/Play20/blob/2.1.0/samples/scala/forms/app/models/User.scala
https://github.com/playframework/Play20/blob/2.1.0/samples/scala/forms/app/controllers/Application.scala

それで、ユーザー側でmodelsやcontrollersというpackage objectをつくると、被る・・・。もし、modelsやcontrollersというpackage objectを定義してしまってる人は、現在なんとなく動いていても、実行時に万が一play側で定義しているmodelsのほうのpackage objectを先にpathから見つけてしまって「メソッドがないよ!」とか実行時エラーになる可能性あるので、今すぐpackage名変更するか、"models"や"controllers"というpackage objectは使わないほうがいいかも・・・?

modelsじゃなくて、package 名 modelとかにしようかな・・・。

「IDEAがpackage objectに定義したもの認識してくれない!」とか言っていたんですが、もしかしてこいつのせいか・・・?

*1: https://github.com/playframework/Play20/pull/735

*2: 代わりに違うオブジェクト置いてる・・・。このあたりのpull reqの議論読んでください https://github.com/playframework/Play20/pull/489 https://github.com/playframework/Play20/pull/735