業務都合によりPlayFramworkを始めました。
ここまでの下勉強により、PlayFramworkのバージョンは2.4.6にすることにしました。
しかし、PlayFramworkは最新バージョンで作成するのは簡単なのですが、古いバージョンで作成するのは面倒なのです。
今回は古いバージョンで作成する手順をご紹介します。
バージョン指定が出来ない
おさらいから行ってみましょう。
PlayFrameworkではプロジェクトを新規作成する場合、コマンドプロンプトでActivatorのnewコマンドを実行すれば一発で作成出来ます。
activator new my-first-app play-java
この時、Activatorはインターネットに接続し、Play本家のサイトから最新バージョンをサーチして取得するという挙動をします。
勝手に最新バージョンを取得してしまい、古いバージョンは取得出来ません。
「-version=2.4.6」のようにオプションを指定することで古いバージョンを取得する機能はありません。
これくらい出来そうな気がするんですけどね。何で無いんだろ……。
しかし、自動で作成出来ないなら手動で作成しましょう。
テンプレートをダウンロード
PlayFrameworkのnewコマンドが最新バージョンになってしまうのは、最新のテンプレートをダウンロードしてくるからです。
そして過去のテンプレートはGitHubに置いてありますので、これを手動でダウンロードすればテンプレートは入手可能です。
以下サイトからお好みのバージョンをダウンロードしてきてください。
私は2.4.6をダウンロードします。
解凍すると、中に「templates」というフォルダが入っています。
その中には2.4.6テンプレート4種が入っています。
これこれ、これが欲しかったんですよ。
私はJavaを使用しますので「play-java」をゲッツします。
その中身は、このように「Activator new」した時とほぼ同じ構成になっています。
PlayFramework初心者はこの状態からスタートするのが最もスムーズに入っていく近道でしょう。
しかし、この状態でアプリを起動しようとするとまだエラーが発生してしまいます。
- :: org.scala-sbt#sbt;%SBT_VERSION%: java.lang.IllegalArgumentException at sun.net.www.ParseUtil.decode(ParseUtil.java:202)
%SBT_VERSION%!!
バージョン指定。
つまり、本来はnewコマンドが自動で行ってくれる設定ファイルへの最新バージョンセット機能が作動していない。
よってここから先は手動でバージョンを記述することになります。
「手動でセットって、どんな値をセットすればいいの?」という問題につきましては、フォルダを一個遡ってtemplatesフォルダ直下のbuild.sbtに書いてあります。
import play.sbt.activator.Templates._
templateSettings
scalaVersion := {
// If we're a snapshot build, then default to 2.10.5, since this is what gets built by default for Play
// If we're a production build, then we want 2.11.6
sys.props.getOrElse("scala.version", if (isSnapshot.value) {
"2.10.5"
} else {
"2.11.6"
})
}
crossScalaVersions := Seq("2.10.5", "2.11.6")
templates := {
val dir = baseDirectory.value
Seq(
"play-scala",
"play-java",
"play-scala-intro",
"play-java-intro"
).map(template => dir / template)
}
version := sys.props.getOrElse("play.version", version.value)
def playDocsUrl(version: String) = {
// Use a version like 2.4.x for the documentation
val docVersion = version.replaceAll("""(\d+)\.(\d+)\D(.*)""", "$1.$2.x")
s"http://www.playframework.com/documentation/${docVersion}"
}
// Use different names for release and milestone templates
def templateNameAndTitle(version: String) = {
val officialRelease = version.matches("[0-9.]+") // Match final versions but not *-SNAPSHOT or *-RC1
if (officialRelease) ("", "") else ("-preview", " (Preview)")
}
templateParameters := Map(
"PLAY_VERSION" -> version.value,
"SCALA_VERSION" -> scalaVersion.value,
"PLAY_DOCS_URL" -> playDocsUrl(version.value),
"SBT_VERSION" -> "0.13.8",
"COFFEESCRIPT_VERSION" -> "1.0.0",
"LESS_VERSION" -> "1.0.6",
"JSHINT_VERSION" -> "1.0.3",
"DIGEST_VERSION" -> "1.1.0",
"RJS_VERSION" -> "1.0.7",
"MOCHA_VERSION" -> "1.1.0",
"ENHANCER_VERSION" -> "1.1.0",
"EBEAN_VERSION" -> "1.0.0",
"PLAY_SLICK_VERSION" -> "1.1.0",
"TEMPLATE_NAME_SUFFIX" -> templateNameAndTitle(version.value)._1,
"TEMPLATE_TITLE_SUFFIX" -> templateNameAndTitle(version.value)._2
)
パッと見て概ね意味は分かるのではないでしょうか?
例えば、「SBT_VERSION" -> "0.13.8"」と書かれていますので、
先ほどのエラーの「%SBT_VERSION%」の所には「0.13.8」を書けば良いという意味になります。
「"PLAY_VERSION" -> version.value」のように直球で書かれていない部分は、
「自分は2.4.6を使いたいんだから2.4.6だな」と判断していくことになります。
これらを元にplay-javaの以下ファイルにガンガン手動記述していってください。
- play-java/build.sbt
- play-java/project/build.properties
- play-java/project/plugins.sbt
ちょっと数が多いので面倒ですが、正常に設定出来ていないと上記画像のようにコマンドプロンプト上にエラーが出来ますから、
地道にやっていけば10分くらいで起動まで到達出来ると思います。
これでPlayFramwork2.4.6の起動に成功しました。
おめでとうございます!!
終わりに
我ながら荒技ですね、このやり方は……。
元々がActivator newコマンド一発で可能な作業なわけですから、
build.sbtによるビルドを熟知している人なら、こんな手動置換作業を行わなくても自動でビルド出来るはずなのですが……。
しかし調べても分からなかったので今回はこのような手動ゴリ押し戦術で対処しました。
何か分かったら追加記事を書きたいと思います。
引き続きPlayFramworkの記事を継続します。
0 件のコメント:
コメントを投稿