Playframework 验证错误;方法控制器中需要堆栈映射帧。Secure$Security.authentify

Playframework 验证错误;方法控制器中需要堆栈映射帧。Secure$Security.authentify,playframework,Playframework,我遵循了介绍Play框架的教程,但它给了我一个错误: 执行异常 发生VerifyError:在偏移量33处的方法控制器.Secure$Security.authentify(Ljava/lang/String;Ljava/lang/String;)Z中应为堆栈映射帧 我不确定我做错了什么。我正在使用的代码(片段): 对于安全类: package controllers; import models.*; public class Security extends Secure.Securit

我遵循了介绍Play框架的教程,但它给了我一个错误:

执行异常 发生VerifyError:在偏移量33处的方法控制器.Secure$Security.authentify(Ljava/lang/String;Ljava/lang/String;)Z中应为堆栈映射帧

我不确定我做错了什么。我正在使用的代码(片段):

对于安全类:

package controllers;

import models.*;

public class Security extends Secure.Security {    
    static boolean authenticate(String username, String password) {
        return User.connect(username, password) != null;
    }
}

我还将安全模块添加到dependencies.yml中,该模块在重新启动Play framework后正确加载。我将安全模型添加到我的路由中。日食没有错误;错误仅在执行时发生。Security.Security类实际上具有可用的公共静态isConnected方法。我使用的是最新版本的Play框架(1.2.2)。

Play的消息组讨论了JDK1.7存在一些问题,Play尚未正式支持这一点。如果可能的话,请尝试使用JDK 6,看看是否仍然出现此错误

如果您仅限于JDK7,则可以使用该选项

java.source=1.6
在application.conf文件中


2011年8月18日更新:Nicolas Leroux最近在Twitter上发布了一条消息,称已在master分支中添加了对Java 7的支持。它可能不会发布1.2.3版本,但会在之后发布。

我也有同样的问题,它似乎确实来自JDK7

我想解决它,加上

java.source=1.6
对于application.conf文件,停止应用程序,删除应用程序tmp目录下的所有内容并重新启动它,即使安装了JDK1.7,它也应该可以工作


如果不删除文件,play将不会重新编译它们,也不会工作,即使返回JDK 1.6,也可以使用
-XX:-UseSplitVerifier
标志。

我在运行play应用程序时也遇到了同样的问题。 我正在使用Play1.2.5和Java1.7

我刚才补充说

java.source=1.6

在application.conf中


然后删除tmp文件夹并重新启动应用程序,它就工作了。

如果您想使用jdk7,也可以。 只需确保java路径配置正确。 选中“java-version”和“javac-version”

示例路径:


  • “C:\Program Files\Java\jdk1.7.0_07\bin”我可以看到authentify在Play source中被@Deprecated,但不确定它是在哪里被调用的,如果这是导致异常的原因?freeone3000@irc.freenode.org#Java建议它可能与我使用JDK 1.7的事实有关;有字节码和验证的东西。它可能与
    invokedynamic
    有关吗?Play1.2.4RC3支持Java7,确实如此。它确实遗漏了1.2.3,但在master中,它会自动添加到1.2.4中。与1.7-support的公告相反,情况似乎是这样。这不仅解决了我的问题,而且我在尝试使用SecureSocial插件时也看到了类似的问题,并看到了一些关于1.7也是问题所在的讨论(尽管当时我没有尝试解决它,所以我对结果不太肯定)。但我可以证明,我正在使用Play 1.2.4,并且看到了相同的错误,并且已修复。1.2.4的最新候选版本进行了一些更改,使其与Java 5向后兼容。因此,这可能再次引入了此错误。1.3.x将不支持Java 5,因此我希望该错误在1.3.x中再次消失。请注意,根据Nicolas的评论,您可以在Java 1.7上通过在命令行中添加-XX:-UseSplitVerifier标志来实现这一点。报告的问题实际上与生成的字节码不完全符合Java 7的预期有关,不适用于您选择执行appthis的java二进制文件,它在java 1.7中工作;java 1.8应该在vm选项中附加-noverify
    java.source=1.6