为啥在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目?

Posted

技术标签:

【中文标题】为啥在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目?【英文标题】:Why does sbt fail with NoClassDefFoundError: play/Play$ in Play 2.2.x projects after sbt compile in Play 2.3 project?为什么在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目? 【发布时间】:2014-08-15 08:16:01 【问题描述】:

一旦我在 2.3 play 项目上运行“sbt compile”,我就不能再使用“sbt compile”来编译任何 Play 2.2.x 项目。这是我运行 sbt 命令时的错误。

[info] Loading project definition from /Users/macbookpro/playproject/project
[error] java.lang.NoClassDefFoundError: play/Play$
[error] Use 'last' for the full log.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?

【问题讨论】:

您介意在问题中添加sbt about 和整个会话吗? 查看我对Can't Run Activator Template projects Activator UI Failed to load SBT configuration的回复。 【参考方案1】:

我也遇到了同样的问题。就我而言,我使用的是 Play 2.4,但这可能是相同的原因。我不小心在我的项目目录中运行了 activator ui。它创建了一个用于激活器支持的project/play-fork-run.sbt 文件,但阻止了 sbt 直接工作。删除该文件解决了问题,我现在可以再次使用 sbt。

【讨论】:

删除了我的评论,因为它没有任何帮助。我对你的帖子投了赞成票@tim 谢谢!验证它有效。 你救了我的命,蒂姆:)【参考方案2】:

尝试更新 play-fork-run.sbt

addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.3.8")

更新到

addSbtPlugin("com.typesafe.play" % "sbt-fork-run-plugin" % "2.4.0")

然后项目将能够构建。

【讨论】:

【参考方案3】:

这是一个有趣的问题,因为它适用于我 (TM) 在带有 Java 7 的 Mac OS X 10.9.3 上。

我下载了 Play 的版本 - 最新的 2.3.1 和最新的 2.2.x 流 - 2.2.3。对于这两个版本,我使用 activator (2.3.1) 创建 Web 应用程序,使用 play 创建 2.2.3。两者都运作良好。

当我在 2.3.1 和 2.2.3 中执行 sbt compile 时,两个命令也都运行良好。我花了一些时间下载所有依赖项,但最后结果如下:

jacek:~/sandbox/play231-app
$ sbt compile
[info] Loading project definition from /Users/jacek/sandbox/play231-app/project
[info] Updating file:/Users/jacek/sandbox/play231-app/project/play231-app-build...
...
[info] Done updating.
[info] Compiling 5 Scala sources and 1 Java source to /Users/jacek/sandbox/play231-app/target/scala-2.11/classes...
[info] 'compiler-interface' not yet compiled for Scala 2.11.1. Compiling...
[info]   Compilation completed in 14.895 s
[success] Total time: 200 s, completed Jun 25, 2014 1:00:18 PM

对于 2.2.3:

jacek:~/sandbox/play223-app
$ sbt compile
[info] Loading project definition from /Users/jacek/sandbox/play223-app/project
[info] Set current project to play223-app (in build file:/Users/jacek/sandbox/play223-app/)
[info] Updating file:/Users/jacek/sandbox/play223-app/play223-app...
...
[info] Done updating.
[info] Compiling 5 Scala sources and 1 Java source to /Users/jacek/sandbox/play223-app/target/scala-2.10/classes...
[info] 'compiler-interface' not yet compiled for Scala 2.10.3. Compiling...
[info]   Compilation completed in 19.626 s
[success] Total time: 45 s, completed Jun 25, 2014 3:15:34 PM

我正在使用使用自制软件安装的 sbt 0.13.5。

$ sbt --version
sbt launcher version 0.13.5

$ java -version
java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

【讨论】:

【参考方案4】:

Play 2.3 应用程序应该使用激活器构建,以确保正确的 sbt 配置。最好的

【讨论】:

【参考方案5】:

我有同样的问题。确保您使用的是 java-8 版本。 我使用的是 java-7,改成 java-8 解决了我的问题。

【讨论】:

以上是关于为啥在 Play 2.3 项目中 sbt 编译后 sbt 失败并显示 NoClassDefFoundError: play/Play$ in Play 2.2.x 项目?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用“sbt it:test”时不执行 Play/Scala 项目中的集成测试?

Play 2.3.7 sbt 多项目编译器问题

默认禁用 play framework 2.x 的 SBT 编译

未解决的依赖关系:sbt-plugin;2.7.0 尝试编译播放模板项目时

与证书相关的 SBT 项目编译错误

SBT/Play2 多项目设置在运行/测试的类路径中不包括依赖项目