Playframework 验证错误;方法控制器中需要堆栈映射帧。Secure$Security.authentify
我遵循了介绍Play框架的教程,但它给了我一个错误: 执行异常 发生VerifyError:在偏移量33处的方法控制器.Secure$Security.authentify(Ljava/lang/String;Ljava/lang/String;)Z中应为堆栈映射帧 我不确定我做错了什么。我正在使用的代码(片段): 对于安全类: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
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的事实有关;有字节码和验证的东西。它可能与
有关吗?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选项中附加-noverifyinvokedynamic
java.source=1.6