PlayFramework 2.4 でサブプロジェクトで一部URLを切り出してみる
教科書は下記
で、まずはプロジェクト root ディレクトリに下記を一気に作成
modules
/rest_apis
/controllers
/conf
そして、
modules/rest_apis/build.sbt
を作成する。
ここに実は二つ罠があった。
公式では下記(20015/7/8 時点)が書かれているのだが
name := "myadmin" libraryDependencies ++= Seq( "mysql" % "mysql-connector-java" % "5.1.35", jdbc, anorm )
ここに罠が二つあって、
- Play2.4 では anorm が分離したので、書き方が違う
scalaVersion := "2.11.6"
などのように、ScalaVersion を親と同じ指定をしないと、ビルドでこける(下記)
[warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: UNRESOLVED DEPENDENCIES :: [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] :: rest_apis#rest_apis_2.11;0.1-SNAPSHOT: not found [warn] :::::::::::::::::::::::::::::::::::::::::::::: [warn] [warn] Note: Unresolved dependencies path: [warn] rest_apis:rest_apis_2.11:0.1-SNAPSHOT [warn] +- a-albums:a-albums_2.11:1.0-SNAPSHOT [trace] Stack trace suppressed: run last root/*:update for the full output. [error] (root/*:update) sbt.ResolveException: unresolved dependency: rest_apis#rest_apis_2.11;0.1-SNAPSHOT: not found [error] Total time: 5 s, completed 2015/07/08 21:42:26
自分は、とりあえず切り離しが目標だったので、anorm の記述は削除して、ScalaVersion は2.11.6
を指定した。
name := "rest_apis" scalaVersion := "2.11.6" libraryDependencies ++= Seq( "mysql" % "mysql-connector-java" % "5.1.35", jdbc )
その上で、親プロジェクトの build.sbt
を編集。
+ lazy val rest_apis = (project in file("modules/rest_apis")).enablePlugins(PlayScala) lazy val root = (project in file(".")).enablePlugins(PlayScala) + .dependsOn(rest_apis).aggregate(rest_apis)
ここから、サブプロジェクトの中にアプリケーションを配置し始める。
modules/rest_apis/conf/rest_apis.routes
ファイルを作成して下記を突っ込む。
GET / controllers.rest_apis.Application.index()
対応するコントローラを modules/rest_apis/controllers/Application.scala
に
package controllers.rest_apis import play.api._ import play.api.mvc._ object Application extends Controller { def index = Action { implicit request => Ok("{'msg':\"Hello test api\"}").as("application/json") } }
あとは、conf/routes
ファイルを編集して
GET / controllers.Application.index + + -> /api rest_apis.Routes
これで準備完了。
sbt clean compile run
して http://localhost:9000/api
を見て、出ればOK
基本データ、REST API を切り出すとかの用途で使えそう。