播放2.4.1,找不到PlayEbean

时间:2015-07-02 20:16:25

标签: scala playframework sbt ebean

将我的Java项目从2.2更新到2.4后,我按照“迁移”页面上的说明操作,但是收到该错误,说找不到值PlayEbean。

我做错了什么?据我所知,我只需要将一行添加到plugins.sbt文件中就可以了,对吧?

编辑:我试过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 个答案:

答案 0 :(得分: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依赖项不正确,无法解决。
  5. SBT部分应该可以工作,在我的情况下它稍后失败,因为我没有项目中的eBeans。

    补丁版本:

    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
    
    编辑:我是如何最终得到的:IntelliJ IDEA的Scala插件的最新版本允许更好地编辑SBT配置(比以前),但是(现在)需要让SBT项目第一次构建到导入它(即评论可疑行)。导入项目后,可以使用自动完成,自动导入和其他娱乐。我希望它对crossScalaVersions有用。关于这一点,请记住,Play 2.4仅适用于Java 8+,而Scala 2.10不支持完全Java 8.(“Play 2.4迁移指南”的第一部分)