PlayFramework 小ネタまとめ
プラグインとかビルドの設定すぐ忘れちゃうので覚書。 無記載の場合バージョン2.4.xの話だけど、たぶんそんなに変わらない。
Eclipseプロジェクトを生成
build.sbtに次を追加
// Compile the project before generating Eclipse files, so that generated .scala or .class files for views and routes are present EclipseKeys.preTasks := Seq(compile in Compile) // Java project. Don't expect Scala IDE EclipseKeys.createSrc := EclipseCreateSrc.ValueSet(EclipseCreateSrc.ManagedClasses, EclipseCreateSrc.ManagedResources) // Use .class files instead of generated .scala files for views and routes EclipseKeys.projectFlavor := EclipseProjectFlavor.Java
sbt eclipse with-source=true
で生成.
Eclipseでプロジェクトを開いたらビルドパスにtarget/scala-2.11/classes_managed
を追加. (LibrariesにAdd Class Folder)
JUnitテストの並列実行を切る
機能テストとかで困る場合用。build.sbtに次を追加。
parallelExecution in Test := false
Jacocoでテストカバレッジをとる
https://github.com/sbt/jacoco4sbt
project/plugins.sbt
に次を追加
addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.2.0")
build.sbt
に次を追加
// 念のため並列実行も切っておく parallelExecution in jacoco.Config := false jacoco.settings
jacoco:cover
でカバレッジ生成。出力はtarget/scala-2.11/jacoco
JPAを使う場合の注意
persistence.xml
は対象のエンティティクラスが同じJarに入ってないとだめらしい。
何も設定せずにsbt dist
するとconf
ディレクトリが配布パッケージにできて、プロジェクトのconf
ディレクトリの中身がコピーされるが、
ここにpersisitence.xml
を入れとくと上記問題に引っかかる。
そこで、build.sbt
に次を追加してconf
ディレクトリを配布パッケージに作らない。(Jarにはちゃんと入るので動く。)
PlayKeys.externalizeResources := false
よく読んだから公式のDocumentation[2.4.x 日本語], [2.5.x 英語]にちゃんと書いてある。 気づかなくて小一時間ハマった。
PlayFrameworkにDIしてもらう
GuiceのAbstractModule
を継承したクラスのFQCNをapplication.conf
に書いておけばPlayFrameworkでDIしてくれる。
演算子の雰囲気からわかる通り、複数のモジュールを追加できる。
play.modules.enabled += "modules.HelloModule"
(2.5.x以降限定?)
デフォルト(ルート)パッケージにクラス名Module
でモジュールを作っておけば上記設定さえ書かなくても動く。
アノテーションのつけ方とかはGuiceそのものなので割愛。 nodchipさんの記事心地良すぎるDependency Injectionライブラリ Guiceが参考になる。 英語が苦にならない人はGuice Wiki見よう。
Javadocを生成してもらう
何も設定しないとsbt doc
でscaladocになる。build.sbt
に次を追加。
sources in (Compile, doc) ~= (_ filter (_.getName endsWith ".java"))