java.lang.NoClassDefFoundError : Could not initialize class play. 数据.format.Formatters

标签 java noclassdeffounderror playframework-2.1

我正在使用 Play 2.1.2,我想使用动态表单。我在我自己的小 hello world 项目中尝试过,一切正常,但是当我在其他更大的项目中使用表单时,我遇到了异常。这是我的代码(在两个项目中是相同的):

Controller

public static Result signInForm() {
    DynamicForm form = Form.form().bindFromRequest();   //exception on this line
    return renderJapid(form);
}

路线

GET     /sign-in                                            controllers.Authentication.signInForm()

当我转到 localhost:9000/sign-in 时,我得到了这个异常:

Caused by: java.lang.NoClassDefFoundError: Could not initialize class play.data.format.Formatters
at play.data.Form.bind(Form.java:320) ~[play-java_2.10.jar:2.1.2]
at play.data.DynamicForm.bind(DynamicForm.java:100) ~[play-java_2.10.jar:2.1.2]
at play.data.DynamicForm.bindFromRequest(DynamicForm.java:71) ~[play-java_2.10.jar:2.1.2]
at controllers.Authentication.signInForm(Authentication.java:310) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]

拜托,你能帮帮我吗?问题出在哪里?我检查了两个项目中的 Global.java 和 application.conf,但没有发现任何可能导致此问题的原因。

更新:

我试过把这段代码放在

FormattingConversionService fcs = Formatters.conversion;

在动态表单调用行之前。在浏览器中重新加载 localhost:9000/sign-in 后,我在新行中遇到了这个异常:

Caused by: java.lang.NullPointerException: null
at play.data.format.Formatters.register(Formatters.java:186) ~[play-java_2.10.jar:2.1.2]
at play.data.format.Formatters.<clinit>(Formatters.java:100) ~[play-java_2.10.jar:2.1.2]
at controllers.Authentication.signInForm(Authentication.java:310) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$19$$anonfun$apply$19.apply(routes_routing.scala:305) ~[na:na]
at play.core.Router$HandlerInvoker$$anon$6$$anon$2.invocation(Router.scala:175) ~[play_2.10.jar:2.1.2]

所以看起来 Formatters 在类路径中。但是当我再次点击浏览器中的重新加载按钮时,我得到了与以前相同的 NoClassDefFoundError(这次是在我添加的行上)。

最佳答案

NoClassDefFoundError 通常表示该类不在类路径中。可能在您编译它时它就在那里,但现在它不见了(主要是在共享库中看到的)。

NoClassDefFoundError documentation

看起来它可能没有找到 play-java_2.10.jar。

编辑:(总结评论)

Play jar 使用 Spring 来绑定(bind)数据。最初的想法是 Spring 没有包含在类路径中,但它确实是。但是,类路径上的 Spring 似乎与 lib 文件夹中的某些 Spring jar 有冲突。删除 lib 文件夹中的 jars 似乎已经清除了错误。 :)

关于java.lang.NoClassDefFoundError : Could not initialize class play. 数据.format.Formatters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498817/

相关文章:

security - 在 Play 2.1 中使用 ajax 进行身份验证

java - 为什么 2.1.0 版本的 playframework 测试失败?

java - 关于调用方法时添加两个数组变量

java - 使用 Gradle 在运行时出现 NoClassDefFoundError

java - 即使 jar 包含在编译中,程序也找不到 RequestEntity 类

java - 为什么我在 Java 中收到 NoClassDefFoundError 错误?

sbt - 非法状态异常 : impossible to get artifacts when data has not been loaded for Guava 12. 0?

java堆栈溢出错误?

java - 实现 hashcode 和 equal 的责任

Java - ' ) ' 预期错误