どーも、PlugOutです。
久々にプログラム系のコアな話です。
今回は最近人気の高い「Play Framework」でプロジェクトを作成し、Eclipseに取り込んでデバッグするまでの手順をまとめたいと思います。
そもそもPlay Frameworkって何だって人には、下のリンクが参考になるかもしれません。
すごく簡単に説明すると、ウェブアプリを作成するためにいろいろな機能を取り揃えたFrameworkといったところですかね。
Play FrameworkではScalaとJavaの2種類の言語に対応しているのですが、今回はJavaの場合を取り上げたいと思います。
とりあえず環境構築から始めます。
これからご紹介するのはwindowsでの場合です。
また、Eclipseは「Eclipse 4.5 Mars(Pleiades All in One)」の前提で進めます。
まず下記の公式サイトから「play 2.4.3」をダウンロードします。
Play Framework - Build Modern & Scalable Web Apps with Java and Scala
次にダウンロードしたファイルを解凍し、任意の場所に設置してパスを通します。
パスの通し方については下記のサイトが参考になるかもしれません。
次にコマンドプロンプトを立ち上げます。
ちなみにコマンドプロンプトに下記のコマンドを入力し、きちんとバージョン情報が帰ってくればパスは通っています。
activator --help
次に、プロジェクトを作成したい場所まで移動します。
そして以下のコマンドを実行します。
activator new (作成するアプリ名)
どのタイプのアプリを作成するかを聞かれるので「play-java」を選択しましょう。
(minimal-javaを選択するとうまくEclipseへの取り込みができないようです)
大量に処理が走った後、プロジェクトの作成が完了します。
次にEclipseへの取り込みを行います。
まずcdで作成した「(アプリ名)ディレクトリ」へと移動します。
「projectディレクトリ」に移動し「plugins.stb」の末尾に以下の記述を追記します。
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0-RC2")
そして「(アプリ名)ディレクトリ」へと戻り、下記コマンドを実行します。
activator eclipse
無事に処理が終了すると、Eclipseがプロジェクトとして認識してくれるようになります。
「ファイル」⇒「インポート」⇒「既存のプロジェクトをワークスペースへ」で作成した「アプリ名ディレクトリ」を指定しましょう。
そもそもEclipseってなんだって人には、以下のリンクが参考になるかもしれません。
Eclipse 日本語化 | MergeDoc Project
アプリの起動方法は「(アプリ名)ディレクトリ」で以下のコマンドを実行します。
activator run
ここに引数debugを加えることで、Eclipse上でのデバッグが可能な状態でアプリが起動します。
activator "debug run"
activator -jvm-debug 9999 run
デフォルトでは9999ポートが選択されるようなので、Eclipse上部メニューの「実行」⇒「デバッグ構成」から設定を行います。
左のメニューから「リモート Java アプリケーション」を選び、設定を新規作成します。
そしてホストを「localhost」、ポートを「9999」に設定し、「デバッグ」を実行すると設定したブレイクポイントで処理が止まるようになります。
これで、Eclipse上で「Play Framework 2 For Java」を使った開発するための最低限の環境が整いました。
※2016/03/01更新:一部食い違いがあったようなので修正しました。
【つまづきメモ1】
Eclipseに取り込んだ後に大量のコンパイルエラーが出ている場合、ライブラリのパスがいくつかおかしくなっている可能性があります。
これは「.ivy2」というディレクトリがユーザーディレクトリ配下に作られるのが問題のようで、ユーザー名に日本語等が入ると文字化けを起こしてしまうようです。
この場合は仕方がないので「.ivy2」の作成先を無理やり変更すると良いようです。
「(アプリ名)ディレクトリ」内にある「build.sbt」の末尾に以下の記述を加えてから再度「activator eclipse」を実行するとうまくいきます。
ivyConfiguration ~= { originalIvyConfiguration => val config = originalIvyConfiguration.asInstanceOf[InlineIvyConfiguration] val ivyHome = file("./.ivy2") val ivyPaths = new IvyPaths(config.paths.baseDirectory, Some(ivyHome)) new InlineIvyConfiguration(ivyPaths, config.resolvers, config.otherResolvers, config.moduleConfigurations, config.localOnly, config.lock, config.checksums, config.resolutionCacheDir, config.log) }
【つまづきメモ2】
「Application.java」の「index」で名前解決できずにコンパイルエラーになっている場合は、「Scalaのコードがコンパイルされていない」「パスが欠落している」という二つの理由が考えられるのでそれぞれ対応をする必要があります。
まずコマンドプロンプト上で「(アプリ名)ディレクトリ」で下記コマンドを実行します。
activator compile
次にEclipse上のプロジェクトを右クリックし、そこから「プロパティ」⇒「Javaのビルドパス」⇒「ライブラリー」⇒「クラスフォルダーの追加」と進み、「target/scala-2.11/classes」を選択して保存します。
その後、Eclipse上でプロジェクトを右クリックし、「リフレッシュ」を選択するとコンパイルエラーが消えるはずです。
【つまづきメモ3】
「IO error while decoding~」のようなエラーが出た場合は、先に以下を実行すると良いです。
set _JAVA_OPTIONS="-Dfile.encoding=UTF-8"
※ エンジニア系のネタは下のブログに移行中です。