NoClassDefFoundError: java.sql.Date when running Play 2.6 using gradle plugin
NoClassDefFoundError: java.sql.Date when running Play 2.6 using gradle plugin
有没有人对 play gradle 插件有好感?我正在尝试 运行 Play Framework 2.6 启动项目。我可以从 SBT 运行 正常,但是当我从 gradle:运行:
时出现以下错误
play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: java/sql/Date]
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:190)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:202)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:117)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:482)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:378)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:
我正在使用 Java 1.8 和以下 build.gradle:
plugins {
id 'play'
id 'idea'
}
def playVersion = "2.6.13"
def scalaVersion = System.getProperty("scala.binary.version", /* default = */ "2.12")
model {
components {
play {
platform play: playVersion, scala: scalaVersion, java: '1.8'
injectedRoutesGenerator = true
sources {
twirlTemplates {
defaultImports = TwirlImports.JAVA
}
}
}
}
}
dependencies {
play "com.typesafe.play:play-guice_$scalaVersion:$playVersion"
play "com.typesafe.play:play-logback_$scalaVersion:$playVersion"
play "com.h2database:h2:1.4.196"
playTest "org.assertj:assertj-core:3.6.2"
playTest "org.awaitility:awaitility:2.0.0"
}
repositories {
jcenter()
maven {
name "lightbend-maven-releases"
url "https://repo.lightbend.com/lightbend/maven-release"
}
ivy {
name "lightbend-ivy-release"
url "https://repo.lightbend.com/lightbend/ivy-releases"
layout "ivy"
}
}
我发现了问题,我的 $JAVA_HOME 设置为我的 Java 9 路径,但 java/javac 设置为 Java 8。这导致我的 gradle 使用错误的 java 版本。修复我的 $JAVA_HOME 后,它可以正常工作。
我会留下这个以防其他人遇到这个问题。
您需要设置 java_home 才能使用 Java 1.8 版本。显然,play gradle 插件需要一个 java 家。
export JAVA_HOME=YOUR_JAVA_LOCATION
$ source .bash_profile
$ echo $JAVA_HOME
有没有人对 play gradle 插件有好感?我正在尝试 运行 Play Framework 2.6 启动项目。我可以从 SBT 运行 正常,但是当我从 gradle:运行:
时出现以下错误play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: java/sql/Date]
at play.core.server.DevServerStart$$anon.reload(DevServerStart.scala:190)
at play.core.server.DevServerStart$$anon.get(DevServerStart.scala:124)
at play.core.server.AkkaHttpServer.handleRequest(AkkaHttpServer.scala:202)
at play.core.server.AkkaHttpServer.$anonfun$createServerBinding(AkkaHttpServer.scala:117)
at akka.stream.impl.fusing.MapAsync$$anon.onPush(Ops.scala:1194)
at akka.stream.impl.fusing.GraphInterpreter.processPush(GraphInterpreter.scala:519)
at akka.stream.impl.fusing.GraphInterpreter.processEvent(GraphInterpreter.scala:482)
at akka.stream.impl.fusing.GraphInterpreter.execute(GraphInterpreter.scala:378)
at akka.stream.impl.fusing.GraphInterpreterShell.runBatch(ActorGraphInterpreter.scala:
我正在使用 Java 1.8 和以下 build.gradle:
plugins {
id 'play'
id 'idea'
}
def playVersion = "2.6.13"
def scalaVersion = System.getProperty("scala.binary.version", /* default = */ "2.12")
model {
components {
play {
platform play: playVersion, scala: scalaVersion, java: '1.8'
injectedRoutesGenerator = true
sources {
twirlTemplates {
defaultImports = TwirlImports.JAVA
}
}
}
}
}
dependencies {
play "com.typesafe.play:play-guice_$scalaVersion:$playVersion"
play "com.typesafe.play:play-logback_$scalaVersion:$playVersion"
play "com.h2database:h2:1.4.196"
playTest "org.assertj:assertj-core:3.6.2"
playTest "org.awaitility:awaitility:2.0.0"
}
repositories {
jcenter()
maven {
name "lightbend-maven-releases"
url "https://repo.lightbend.com/lightbend/maven-release"
}
ivy {
name "lightbend-ivy-release"
url "https://repo.lightbend.com/lightbend/ivy-releases"
layout "ivy"
}
}
我发现了问题,我的 $JAVA_HOME 设置为我的 Java 9 路径,但 java/javac 设置为 Java 8。这导致我的 gradle 使用错误的 java 版本。修复我的 $JAVA_HOME 后,它可以正常工作。
我会留下这个以防其他人遇到这个问题。
您需要设置 java_home 才能使用 Java 1.8 版本。显然,play gradle 插件需要一个 java 家。
export JAVA_HOME=YOUR_JAVA_LOCATION
$ source .bash_profile
$ echo $JAVA_HOME