scala - 玩2.4.1,PlayEbean未找到

标签 scala playframework sbt ebean

将我的 Java 项目从 2.2 更新到 2.4 后,我按照迁移页面上的说明进行操作,但收到该错误,提示未找到值 PlayEbean。

我做错了什么?据我所知,我只需要将这一行添加到plugins.sbt 文件中,它就应该可以工作,对吗?

编辑:我尝试了 2.4.2,出现了完全相同的问题。

为了清楚起见:没有 build.sbt 文件。只有一个 Build.scala 文件以及一个 BuildKeys.scala 和 BuildPlugin.scala 文件。虽然最后两个与这个问题无关。

文件:

项目/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. 对于错误:not found: value PlayEbean ,你必须import play.ebean.sbt.PlayEbeanBuild.scala ,
  2. 然后您将收到 jacoco 的未找到错误,你必须import de.johoop.jacoco4sbt.JacocoPlugin.jacoco ,
  3. 之后是NoClassDefFoundError ,您必须将 SBT 升级到 0.13.8project/build.properties ,
  4. 最后,postgresql 依赖项不正确并且无法解析。

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 迁移指南”的第一部分)

关于scala - 玩2.4.1,PlayEbean未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31193878/

相关文章:

scala - 如何在使用 SBT 打包期间而不是在测试期间排除资源

Scala 使多选项检查更加简洁

postgresql - 使用 play-slick 时与 heroku postgres 的间歇性连接失败

playframework - Play Framework : 2. 0.2 PersistenceException:无法在 Ebean 服务器中注册类

java - 为什么公用文件夹下的更改会触发自动重新加载?

scala - generic bounds,大部分不清楚

scala - 为特定成员类型扩展scala集合

java - 如何在play框架2.1中保存对象

java - 如何使用 sbt-assembly 插件设置 build.sbt?

scala - SBT 在多项目构建中添加项目 ID 以登录