如何在 IntelliJ 中运行 Play Framework 2.1 项目?

Posted

技术标签:

【中文标题】如何在 IntelliJ 中运行 Play Framework 2.1 项目?【英文标题】:How do I run a Play Framework 2.1 project in IntelliJ? 【发布时间】:2018-01-03 19:59:38 【问题描述】:

我有一个现有的 Play 2.1 项目。我一直在用控制台运行它,它工作正常。但是,当我尝试使用 IntelliJ 使用这些说明运行它时,它不起作用:

https://www.jetbrains.com/help/idea/getting-started-with-play-2-x.html#run_debug_playApp

首先,我尝试通过右键单击应用程序并选择“运行 play 2 应用程序”来运行它。它不会运行,它给了我这个错误:

sbt.IncompatiblePluginsException: Binary incompatibility in plugins detected.

在对该问题进行一些研究后,我将-Djline.terminal= 添加到我的 JVM 选项中并再次尝试。这次它运行了,但是当我尝试在浏览器中打开页面时出现此错误:

Global : Unsupported major.minor version 52.0

最后,我尝试将我的项目重新导入 intellij。在它导入之前,它迫使我将 build.properties 中的 SBT 版本从 0.12.2 更新到 0.12.4。我这样做了,但仍然遇到上面列出的相同错误。

注意:我将 Java 7 设置为我的 JDK。

这是完整的堆栈跟踪:

play.api.PlayException: Cannot init the Global object[Global : Unsupported major.minor version 52.0]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:57) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.WithDefaultGlobal$$anonfun$play$api$WithDefaultGlobal$$globalInstance$1.apply(Application.scala:51) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.WithDefaultGlobal$class.play$api$WithDefaultGlobal$$globalInstance(Application.scala:50) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance$lzycompute(Application.scala:383) ~[play_2.10-2.1.1.jar:2.1.1]
    at play.api.DefaultApplication.play$api$WithDefaultGlobal$$globalInstance(Application.scala:383) ~[play_2.10-2.1.1.jar:2.1.1]
Caused by: java.lang.UnsupportedClassVersionError: Global : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.7.0_80]
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800) ~[na:1.7.0_80]
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.7.0_80]
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) ~[na:1.7.0_80]
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71) ~[na:1.7.0_80]
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.7.0_80]

【问题讨论】:

与***.com/questions/23249331/…相关的声音 不确定这是同一个问题,因为您引用的问题中的答案是他们正在使用 Java 1.8 编译并且需要使用 1.7 编译,但是我已经将 intellij 项目中的 JDK 设置为1.7. 运行配置呢?那里指定了哪个 Java 版本? 我没有看到在运行配置中设置 Java 版本的任何选项。它不会使用我项目设置中设置的JDK吗? 据我所知并非总是如此。否则我想你不会有问题 【参考方案1】:

全局:不支持的 major.minor 版本 52.0

这意味着您已经使用 JDK 1.8 编译并尝试在 JDK 1.7 中运行。问题是因为 Java 版本不匹配。 (查看详情example)

以下是报告的主要数字列表来源Wiki:

Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45

解决方案

可能的解决方案是确保项目的类编译发生在 Java 1.7 而不是 Java 1.8 中。执行以下步骤来解决它(使用 -target 1.7 选项编译代码):

conf/application.conf 中,确保设置了java.source=1.7

【讨论】:

【参考方案2】:

问题是因为 Java 版本不匹配。参考Wikipedia Java Class Reference:

J2SE 8 = 52

J2SE 7 = 51

导入项目时try to change project SDK from Java 8 to Java 7

您可以尝试将以下内容添加到您的 build.sbt:

javacOptions ++= Seq("-source", "1.7", "-target", "1.7")

【讨论】:

从现有来源导入时,IntelliJ 没有给我这个选项。另外,我的项目中没有 build.sbt。 OP 注意到他目前正在使用 java 7【参考方案3】:

尝试将 Java 版本从 1.7.0_80 更新到一些更新的 1.7 版本(例如 1.7.0_131)

【讨论】:

以上是关于如何在 IntelliJ 中运行 Play Framework 2.1 项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 sbt/scala/play 多模块项目,该项目将与 Intellij scala 插件一起正常工作

在IntelliJ sbt shell中打破Play'run'

通过路由为 IntelliJ 中导入的 Play 2.4.x 项目解析控制器

Play Framework & IntelliJ - 无法解析符号索引/路由

IntelliJ 无法解析 Activator-Play build.sbt libraryDependencies

TwirlKeys.templateImports with Play 未在 IntelliJ IDEA 模板文件中解析