2015-07-02 5 views
2

После обновления моего проекта Java от 2.2 до 2.4 я выполнил инструкции на странице миграции, но получаю эту ошибку, заявив, что значение PlayEbean не найдено.Play 2.4.1, PlayEbean не найден

Что я делаю неправильно? Насколько я могу судить, мне нужно добавить только одну строку в файл plugins.sbt, и она должна работать, не так ли?

EDIT: Я пробовал 2.4.2, возникла такая же проблема.

Для большей ясности: файл build.sbt отсутствует. Только файл Build.scala и файл BuildKeys.scala и BuildPlugin.scala. Хотя последние 2 не имеют отношения к этой проблеме.

Файлы:

проект/Build.scala:

import sbt._ 
import Keys._ 

import play.sbt.PlayImport._ 
import PlayKeys._ 

object BuildSettings { 
    val appVersion  = "0.1" 
    val buildScalaVersion = "2.11.7" 

    val buildSettings = Seq (
     version  := appVersion, 
     scalaVersion := buildScalaVersion 
    ) 
} 

object Resolvers { 
    val typeSafeRepo = "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" 
    val localRepo = "Local Maven Repositor" at "file://"+Path.userHome.absolutePath+"/.m2/repository" 
    val bintrayRepo = "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases" 
    val sbtRepo = "Public SBT repo" at "https://dl.bintray.com/sbt/sbt-plugin-releases/" 

    val myResolvers = Seq (
     typeSafeRepo, 
     localRepo, 
     bintrayRepo, 
     sbtRepo 
    ) 
} 

object Dependencies { 
     val mindrot = "org.mindrot" % "jbcrypt" % "0.3m" 
     val libThrift = "org.apache.thrift" % "libthrift" % "0.9.2" 
     val commonsLang3 = "org.apache.commons" % "commons-lang3" % "3.4" 
     val commonsExec = "org.apache.commons" % "commons-exec" % "1.3" 
     val guava = "com.google.guava" % "guava" % "18.0" 
     val log4j = "org.apache.logging.log4j" % "log4j-core" % "2.3" 
     val jacksonDataType = "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % "2.5.3" 
     val jacksonDataformat = "com.fasterxml.jackson.dataformat" % "jackson-dataformat-xml" % "2.5.3" 
     val postgresql = "postgresql" % "postgresql" % "9.3-1103.jdbc41" 

     val myDeps = Seq(
      // Part of play 
      javaCore, 
      javaJdbc, 
      javaWs, 
      cache, 

      // User defined 
      mindrot, 
      libThrift, 
      commonsLang3, 
      commonsExec, 
      guava, 
      log4j, 
      jacksonDataType, 
      jacksonDataformat, 
      postgresql 
     ) 
} 

object ApplicationBuild extends Build { 
    import Resolvers._ 
    import Dependencies._ 
    import BuildSettings._ 

    val appName = "sandbox" 

    val main = Project(
      appName, 
      file("."), 
      settings = buildSettings ++ Seq (resolvers := myResolvers, libraryDependencies := myDeps) 
     ) 
    .enablePlugins(play.PlayJava, PlayEbean) 
    .settings(jacoco.settings: _*) 
    .settings(parallelExecution in jacoco.Config := false) 
    .settings(javaOptions in Test ++= Seq("-Xmx512M")) 
    .settings(javaOptions in Test ++= Seq("-XX:MaxPermSize=512M")) 
} 

проект/plugins.sbt:

// Use the Play sbt plugin for Play projects 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.4.1") 

// The Typesafe repository 
resolvers ++= Seq(
    "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/", 
    "Local Maven Repositor" at "file://"+Path.userHome.absolutePath+"/.m2/repository", 
    "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases", 
    "Public SBT repo" at "https://dl.bintray.com/sbt/sbt-plugin-releases/" 
) 

libraryDependencies ++= Seq(
    "com.puppycrawl.tools" % "checkstyle" % "6.8", 
    "com.typesafe.play" %% "play-java-ws" % "2.4.1", 
    "org.jacoco" % "org.jacoco.core" % "0.7.1.201405082137" artifacts(Artifact("org.jacoco.core", "jar", "jar")), 
    "org.jacoco" % "org.jacoco.report" % "0.7.1.201405082137" artifacts(Artifact("org.jacoco.report", "jar", "jar")) 
) 

// Plugin for code coverage 
addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6") 

// Play enhancer - this automatically generates getters/setters for public fields 
// and rewrites accessors of these fields to use the getters/setters. Remove this 
// plugin if you prefer not to have this feature, or disable on a per project 
// basis using disablePlugins(PlayEnhancer) in your build.sbt 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") 

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using 
// enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in 
// Play enhancer, regardless of whether the line above is commented out or not. 
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0") 

Я попытался добавить javaEbean к переменной myDeps, выход остается одна и та же.

Кроме того, вопреки всем примерам и учебникам, если я хочу включить PlayJava, я должен сделать это через play.PlayJava. Что с этим связано?

+1

Где ваш 'enablePlugins (SbtEbean)'? – bjfletcher

+0

@bjfletcher Добавление, которое дает мне ту же проблему: «not found: value SbtEbean» – KdgDev

+0

Можете ли вы добавить содержимое 'build.sbt' на свой вопрос, пожалуйста? – bjfletcher

ответ

3
  1. Для ошибки: not found: value PlayEbean, вы должны import play.ebean.sbt.PlayEbean в Build.scala,
  2. Тогда у вас будет не-найдена ошибка для jacoco, вы должны import de.johoop.jacoco4sbt.JacocoPlugin.jacoco,
  3. После этого NoClassDefFoundError, там необходимо обновить SBT до 0.13.8 в project/build.properties,
  4. И, наконец, зависимость postgresql неверна и не разрешается.

Часть SBT должна работать, в моем случае она терпит неудачу позже, потому что у меня нет проекта eBeans в проекте.

версия

Patch:

diff a/project/Build.scala b/project/Build.scala 
--- a/project/Build.scala 
+++ b/project/Build.scala 
@@ -1,3 +1,5 @@ 
+import de.johoop.jacoco4sbt.JacocoPlugin.jacoco 
+import play.ebean.sbt.PlayEbean 
import play.sbt.PlayImport._ 
import sbt.Keys._ 
import sbt._ 
@@ -35,7 +37,7 @@ 
    val log4j = "org.apache.logging.log4j" % "log4j-core" % "2.3" 
    val jacksonDataType = "com.fasterxml.jackson.datatype" % "jackson-datatype-joda" % "2.5.3" 
    val jacksonDataformat = "com.fasterxml.jackson.dataformat" % "jackson-dataformat-xml" % "2.5.3" 
- val postgresql = "postgresql" % "postgresql" % "9.3-1103.jdbc41" 
+ val postgresql = "org.postgresql" % "postgresql" % "9.3-1103-jdbc41" 

    val myDeps = Seq(
     // Part of play 
diff a/project/build.properties b/project/build.properties 
--- a/project/build.properties 
+++ b/project/build.properties 
@@ -1,1 +1,1 @@ 
-sbt.version=0.13.5 
+sbt.version=0.13.8 

EDIT: Как я в конечном итоге с этим: последние версии Scala плагин для IntelliJ IDEA позволяют лучше редактировать SBT конфиги (чем ранее), но (пока) один необходимо сначала создать проект SBT, чтобы импортировать его (т. е. комментировать подозрительные строки). После импорта проекта можно использовать автозаполнение, авто-импорт и другие радости. Я надеюсь, что это будет полезно с crossScalaVersions. О том, что Play 2.4 является только Java 8+, а Scala 2.10 полностью не поддерживает Java 8. (Первый раздел «Руководство по миграции Play 2.4»)

+0

Ну, это сработало. Теперь это правильно разрешить PlayEbean. Я все еще немного рассмеялся, что я не мог найти это где-то. Теперь я имею дело с crossScalaVersions. Спасибо за помощь в этом. – KdgDev

+0

@KdgDev Я просто добавил простой howto, надеюсь, что это поможет вам в будущих разработках. – shellholic

+0

Спасибо. Я сам использую eclipse и, по-видимому, требует установки плагина eclipseIDE. Я посмотрю на InteliJ сегодня вечером. – KdgDev