Play Framework 2.4 以降の WS をライブラリプロジェクトで参照

年号が変わろうとしているこのタイミングで 2.4 ?

※この内容を書いている時点ではまだ改元施行前。

ことの発端は、とあるシステムがまだ Play の 2.2.x で、そこからの段階マイグレーションの一環で、
「とりあえずSNI対応は入っている 2.4.x にしておこう」となりました。

その作業の中でちょっと、変な時間の使い方をしてしまったので、その戒めとしてログを残しておきたいと思った次第です。

いきなり話が逸れますが、改元施行は2019年5月1日で、2019年4月1日~30日の平成31年度は一応存在するんだそうです。

(2)予算
国の予算における会計年度の名称については、原則、改元日以降 は、当年度全体を通じて「令和元年度」とし、これに伴い、当年度 予算の名称は、各府省が改元日以降に作成する文書においては「令 和元年度予算」と表示するものとする。

改元に伴う元号による年表示の取扱いについて

本年度中は、”平成31年度” でも “令和元年度” でも、目くじらたててどやされることはなさそう。
※さすがに改元施行後にあえて “平成” 持ち出すことはないとは思うけど。。

何をしようとしたのか

はいすみません、本題です。

まず構成

ざっくりとですが、

  • Play アプリの本体プロジェクト(2.2.x)
  • ↑に依存させるライプラリプロジェクト

という構成をとっていて、まずこのライブラリプロジェクトのマイグレーション作業を実施しようとしました。

ライブラリプロジェクトの build.sbt 修正

Play framework は 2.4 で 1.6, 7 が廃止されているので、ライブラリも 8 でコンパイルしてもらうように修正。

- javacOptions in (Compile, compile) := Seq("-target", "1.6", "-source", "1.6", "-encoding", "UTF-8")
+ javacOptions in (Compile, compile) := Seq("-encoding", "UTF-8")

次、java 1.8 で javadoc のチェックが厳密になっててめちゃくちゃ怒られるので、、
-Xdoclint オプション無効化で回避。

  javacOptions in (Compile, doc) := Seq("-charset", "UTF-8", "-encoding", "UTF-8", "-Xdoclint:none")

次、ライブラリ内ではWSクライアントライブラリを使ってたりするんですが、2.3.x ではPlayの外に放り出されたみたいなので、それを参照するように修正。

Play 2.2 から 2.3、2.4 へのマイグレーションガイドとにらめっこしつつ、、

Add library dependency to build.sbt:
libraryDependencies += javaWs

https://www.playframework.com/documentation/2.3.x/Migration23#Play-WS

ふむふむ、javaWs の追加と import の修正、と。

libraryDependencies ++= Seq(
  javaWs,
  ※いろいろな,
  ※ライブラリ達,,,,
)
// import play.libs.WS;
import play.libs.ws.WS;

これでライブラリ側のマイグレーションが終わったはず。publish-local して本プロジェクト側で参照っと。

D:\project\CommonLib>.\sbt\sbt.bat clean update compile publish-local

D:\project\CommonLib>java -Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M -jar .\sbt\sbt-launch.jar clean
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=384M; support was removed in 8.0
[info] Loading project definition from D:\project\CommonLib\project
D:\project\CommonLib\build.sbt:24: error: not found: value javaWs
    javaWs,
    ^
[error] Type error in expression

、、え゛?

とまぁ、、ここからちょっと沼にハマってしまいましたとさ。

まとめ

解決方法:その1

ライブラリとたかをくくらず、build.sbt に Play framework の sbt プラグインを追加。

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % playVersion)

その上で javaWs を追加

libraryDependencies ++= Seq(
  javaWs,
  ※いろいろな,
  ※ライブラリ達,,,,
)

解決方法:その2

外に放り出された ws を直接参照。

libraryDependencies ++= Seq(
  "com.typesafe.play" %% "play-java-ws" % "2.4.11",
  ※いろいろな,
  ※ライブラリ達,,,,
)

2.7 まで続くのかなぁ、この行き当たりな感じ。。

以上です!

コメント

タイトルとURLをコピーしました