Scala 升级到Play Framework 2.2安全社会问题
您好,我正在尝试升级到Play 2.2,在工作中遇到一些问题 我使用的是论坛中建议的最新快照,但出现以下错误。verify错误表示二进制文件和我正在使用的版本之间的编译源代码不兼容。我曾尝试在Java1.6和1.7之间切换,但遇到了同样的问题。 我知道securesocial只为Play 2.1做好准备,但也有使用securesocial snapshot的Play 2.2示例。 也许我应该再次降级 我的Build.scalaScala 升级到Play Framework 2.2安全社会问题,scala,playframework-2.0,securesocial,Scala,Playframework 2.0,Securesocial,您好,我正在尝试升级到Play 2.2,在工作中遇到一些问题 我使用的是论坛中建议的最新快照,但出现以下错误。verify错误表示二进制文件和我正在使用的版本之间的编译源代码不兼容。我曾尝试在Java1.6和1.7之间切换,但遇到了同样的问题。 我知道securesocial只为Play 2.1做好准备,但也有使用securesocial snapshot的Play 2.2示例。 也许我应该再次降级 我的Build.scala object ApplicationBuild extends Bu
object ApplicationBuild extends Build {
val appName = "rm-play"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq(
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
"com.google.guava" % "guava" % "15.0",
"org.codehaus.jackson" % "jackson-core-asl" % "1.9.13",
"com.dbdeploy" % "maven-dbdeploy-plugin" % "3.0M3",
"postgresql" % "postgresql" % "9.1-901.jdbc4",
"joda-time" % "joda-time" % "2.3",
"com.github.mumoshu" % "play2-memcached_2.10" % "0.3.0.3",
"net.spy" % "spymemcached" % "2.9.1",
"com.amazonaws" % "aws-java-sdk"% "1.6.11",
"ws.securesocial" %% "securesocial" % "master-SNAPSHOT"
)
val main = play.Project(appName, appVersion, appDependencies).settings(
resolvers += Resolver.sonatypeRepo("snapshots"),
javacOptions in Compile ++= Seq("-source", "1.7", "-target", "1.7")
)
}
plugin.sbt
logLevel := Level.Warn
// The Typesafe repository
resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
// Use the Play sbt plugin for Play projects
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % System.getProperty("play.version")
_
_ __ | | __ _ _ _
| '_ \| |/ _' | || |
| __/|_|\____|\__ /
|_| |__/
play 2.2.2-RC2 built with Scala 2.10.3 (running Java 1.7.0_04), http://www.playframework.com
> Type "help play" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.
[rm-play] $ run
[info] Updating {file:/Users/zola/Development/play/receipt-manager/rm-play/}rm-play...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000
[info] play - Listening for HTTPS on port /0:0:0:0:0:0:0:0:9443
(Server started, use Ctrl+D to stop and go back to the console...)
[warn] play - Using generated key with self signed certificate for HTTPS. This should not be used in production.
[info] Compiling 12 Scala sources and 19 Java sources to /Users/zola/Development/play/receipt-manager/rm-play/target/scala-2.10/classes...
[info] Compiling 8 Scala sources to /Users/zola/Development/play/receipt-manager/rm-play/target/scala-2.10/classes...
[error] application -
! @6h5hbne72 - Internal server error, for (GET) [/login] ->
play.api.PlayException: Cannot load plugin[Plugin [service.PersistantUserService] cannot been instantiated.]
at play.api.WithDefaultPlugins$$anonfun$plugins$1$$anonfun$apply$9.apply(Application.scala:159) ~[play_2.10.jar:2.2.2-RC2]
at play.api.WithDefaultPlugins$$anonfun$plugins$1$$anonfun$apply$9.apply(Application.scala:128) ~[play_2.10.jar:2.2.2-RC2]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) ~[scala-library.jar:na]
at scala.collection.immutable.List.foreach(List.scala:318) ~[scala-library.jar:na]
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) ~[scala-library.jar:na]
Caused by: java.lang.VerifyError: Stack map does not match the one at exception handler 188 in method service.PersistantUserService.doSave(Lsecuresocial/core/java/Token;)V at offset 116
at java.lang.Class.getDeclaredConstructors0(Native Method) ~[na:1.7.0_04]
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404) ~[na:1.7.0_04]
at java.lang.Class.getConstructor0(Class.java:2714) ~[na:1.7.0_04]
at java.lang.Class.getConstructor(Class.java:1674) ~[na:1.7.0_04]
at play.api.WithDefaultPlugins$$anonfun$plugins$1$$anonfun$apply$9.apply(Application.scala:130) ~[play_2.10.jar:2.2.2-RC2]
at play.api.WithDefaultPlugins$$anonfun$plugins$1$$anonfun$apply$9.apply(Application.scala:128) ~[play_2.10.jar:2.2.2-RC2]
SecuresSocial 2.1.3和主快照应与Play 2.2.1配合使用。我认为导致问题的原因是您的UserService实现是针对1.7编译的,但试图加载它的代码是针对1.6编译的
默认情况下,Scala2.10为1.6生成字节码。您可以生成1.7,但据我所知,该功能是实验性的。首选1.6。我会将sbt文件更改为生成1.6字节码。这应该可以让它工作。因此,事实证明,它比编译版本的差异更无害 导致错误的原因是下面的行,将其更改为使用方法,而不是字段更正了问题 在日志中我发现了错误 原因: 类型“securesocial/core/java/Token”(当前帧,局部变量[4])不可分配给“model/LocalToken”(堆栈映射,局部变量[4]) 更改为以下解决了该问题
localToken.uuid = token.getUuid();
我不确定这有什么帮助,因为我对scala没有太多的经验,但字段调用生成了方法,可能正是这导致了问题。play 2.2使用build.sbt而不是build.scala。你需要在build.sbt中编写你的依赖项。我想你可以同时使用这两个。除了securesocial之外,其他一切都可以正常工作,它确实能够降低依赖项。我在2.2.2中也有同样的错误,但此修复对我不起作用。即使更改为token.getEmail()和token.getIsSignUp()。使用export _JAVA_OPTIONS=“-XX:-UseSplitVerifier”对我来说也很有效。
localToken.uuid = token.getUuid();