Обновление до Play Framework 2.2 Безопасные социальные проблемы

Привет, я пытаюсь перейти на Play 2.2, и у меня возникли проблемы с запуском securesocial.

Я использую последний снимок, как было предложено на форумах, но получаю следующую ошибку. Ошибка проверки указывает на несовместимость скомпилированного исходного кода где-то между двоичными файлами и версией, которую я использую. Я пробовал переключаться между java 1.6 и 1.7, но получаю ту же проблему. Я знаю, что securesocial готов только для Play 2.1, но есть примеры Play 2.2, в которых используется моментальный снимок securesocial. Возможно, я должен просто снова понизить рейтинг.

Мой Build.scala

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")
  )

} 

плагин.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]

person Shawn Vader    schedule 01.02.2014    source источник
comment
В play 2.2 вместо build.scala используется build.sbt. Вам нужно написать свои зависимости в build.sbt   -  person Ravi    schedule 01.02.2014
comment
Вы можете использовать оба, я думал. Все работает, кроме securesocial, и ему удается сбить зависимости   -  person Shawn Vader    schedule 01.02.2014


Ответы (2)


Так что оказалось, что это было намного безобиднее, чем просто разница в версиях компиляции.

Причиной ошибки была строка ниже, изменение ее на использование метода, а не поля, исправило проблему.

В логах нашел ошибку

Причина: Тип «securesocial/core/java/Token» (текущий фрейм, локальные [4]) не может быть назначен «model/LocalToken» (карта стека, локальные [4])

localToken.uuid = token.uuid;

изменено на приведенное ниже решение проблемы.

localToken.uuid = token.getUuid();

Я не совсем уверен, почему это помогло. У меня не так много опыта работы со scala, но вызов поля генерирует метод, и, возможно, это было причиной проблемы.

person Shawn Vader    schedule 05.02.2014
comment
У меня такая же ошибка в 2.2.2, но мне это исправление не помогло. Даже с переходом на token.getEmail() и token.getIsSignUp(). - person Alex L; 06.04.2014
comment
У меня сработало использование export _JAVA_OPTIONS=-XX:-UseSplitVerifier. - person Alex L; 07.04.2014

SecuresSocial 2.1.3 и master-SNAPSHOT должны работать с Play 2.2.1. Я думаю, что проблема заключается в том, что ваша реализация UserService компилируется для версии 1.7, но код, который пытается ее загрузить, был скомпилирован для версии 1.6.

По умолчанию Scala 2.10 генерирует байт-код для версии 1.6. Вы можете сгенерировать 1.7, но, насколько я понимаю, эта функция является экспериментальной. 1.6 предпочтительнее. Я бы изменил файл sbt, чтобы сгенерировать 1,6 байт-кода. Это должно заставить его работать.

person Jorge    schedule 01.02.2014