Play Framework升级到2.6.x的填坑记录

为了使用最新的Play WS Api,升级到play 2.6.211.配置修改根据官网的升级指南,修改plugins.sbt文件,更改插件版本号:addSbtPlugin(“com.typesafe.play” % “sbt-plugin” % “2.6.21”)build.sbt文件中,把guice和play-json单独加入。libraryDependencies += guicelibraryDependencies += “com.typesafe.play” %% “play-json” % “2.6.0"build.sbt中修改依赖库cache和JavaWs的名字为ehcache和ws。修改后如下libraryDependencies ++= Seq( javaJdbc , ehcache , ws)然后点击菜单View/Tool windwos/SBT打开sbt窗口,点击刷新,然后下载新的依赖包,虽然消耗不少时间,最终顺利完成,没有遇到太大麻烦。2.运行修改完配置之后,运行play(使用 sbt run命令)。提示 \views\index.scala.html:18: not found: value welcome。此文件为首页的Twirl模板。推测可能是2.6版本和2.5版本的首页模板不同,于是到官网下载2.6版本的starter-example,找到views/index.scala.html并覆盖项目的相应文件。再次运行,还是提示同样错误。这个错误的原因是views.html包下没有welcome对象,views.html.play20包下也没有,据说是因为低版本的play下载了某个低版本依赖包,导致高版本play不再下载新版本的依赖包导致。此问题无法解决,因为这个欢迎页面可有可无,因此最终决定从views/index.scala.html中删除@welcome的调用。编译通过,开发模式下运行没有问题。3.生产环境部署和上一版本一样,命令行上 运行sbt dist或者sbt universal:packageBin打包项目为zip文件。复制到服务器上,解压zip文件,运行/bin/xxxx.bat启动web服务器,出现“输入行太长”的错误无法启动web服务器。直接原因是java -cp “…” 命令太长,超过windows命令行8000字节的限制,导致windows无法执行此命令。这个命令长的部分是 -cp后面指定的jar包文件,因为依赖的jar包太多,sbt把jar文件名全部串接起来放在cp后面,导致这个参数非常长。上一版本还勉强没超过限制,升级到新版本后,依赖包又增加了很多个,导致命令长度超限制。“输入行太长”错误的一般解决方法是,把bat文件所在路径的基础路径名尽可能缩短,把bat的上两级目录的文件夹名缩短到2个字符,再运行bat文件,这时不再报“输入行太长”错误,但出现新错误“无法找到或者加载主类play.core.server.ProdServerStart”的错误。一开始怀疑是javac选项或者jdk版本导致的,用了很长时间排查仍然无法解决问题,在stackoverflow上找到的方法也不成功。偶然想到,这个错误是不是也是因为命令长度太长导致的,于是在stackoverflow上找到一个彻底解决命令太长的方法。在build.sbt文件中添加插件LauncherJarPlugin,本来不抱太大希望,想不到运行sbt start竟然成功了,然后打包部署也成功了。添加插件LauncherJarPlugin的语句:lazy val xxxx = (project in file(”.")).enablePlugins(PlayJava,LauncherJarPlugin)至此,play framework2.6.21升级成功完成。

March 20, 2019 · 1 min · jiezi

IntelliJ Idea中Play framework/Sbt项目的配置方法

因为Play framework 2.3以后采用SBT来构建项目,而SBT使用HTTPS从Maven服务器下载各种依赖包、资源和工具,导致构建过程非常慢。解决问题的思路是修改sbt配置,让Maven优先从阿里云镜像服务器中下载。搭建步骤:一、在IntelliJ Idea中安装Play 2.x和Scala插件二、到Play framework官网下载Play的起始项目zip包。解压zip文件到文件目录假设是D:\sbt01312\,顶层目录下有一个sbt-dist目录,里面包含sbt的launcher。用winrar打开\bin\sbt-launch.jar文件,把里面的\sbt\sbt.boot.properties解压出来,然后在把[repositories]改为:[repositories] local aliyun-maven: http://maven.aliyun.com/nexus/content/groups/public/ aliyun-ivy: http://maven.aliyun.com/nexus/content/groups/public/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext] sbt-plugin-ivy: http://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext] dl-ivy: http://dl.bintray.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext] store_mir:http://mirrors.ibiblio.org/maven2/ store_0:http://maven.net.cn/content/groups/public/ store_2:http://repo2.maven.org/maven2/ maven-central: http://repo1.maven.org/maven2/ typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/artifact.[ext], bootOnly sbt-ivy-snapshots: https://repo.scala-sbt.org/scalasbt/ivy-snapshots/, [organization]/[module]/[revision]/[type]s/artifact.[ext], bootOnly把改好后的sbt.boot.properties放回\bin\sbt-launch.jar文件。三、运行IntelliJ Idea,选择File/Other Settings/Default Settings菜单在Build,Execution,Deployment/Build Tools/SBT页中,最下面的"Launcher(sbt-launch.jar)“中,选择Custom,然后输入框中输入第二步修改好的\bin\sbt-launch.jar文件路径,例如D:\sbt01312\bin\sbt-launch.jar四、在IntelliJ Idea中新建一个Play 2.x项目。SBT会自动构建,并且下载各种文件,需要很长时间。执行到 Loading project definition from XXXXX 的时候会卡死。是因为项目根目录的build.sbt文件没有从镜像Maven中下载文件,而是从国外服务器下载。此时可以终止构建,双击build.sbt打开文件,然后把最后的resolvers语句改为resolvers += “aliyun-maven” at “http://maven.aliyun.com/nexus/content/groups/public/"resolvers += Resolver.url(“aliyun-ivy”, url(“http://maven.aliyun.com/nexus/content/groups/public/"))( Patterns("[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext]”) )resolvers += Resolver.url(“sbt-plugin-ivy”, url(“http://dl.bintray.com/sbt/sbt-plugin-releases/"))( Patterns("[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext]”) )resolvers += Resolver.url(“dl-ivy”, url(“http://dl.bintray.com/typesafe/ivy-releases/"))( Patterns("[organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/artifact.[ext]”) )注意:sbt文件两条语句之间要各一个空行,否则出错。然后选择Run/Edit Configuration菜单,新建一个运行配置,然后运行这个配置。如果顺利,项目会被重新构建,构建成功后启动浏览器进入项目页,此时配置就完全成功了。

March 18, 2019 · 1 min · jiezi