Spring NoClassDefFoundError:名称错误

时间:2016-01-07 19:03:07

标签: java spring servlets gradle

我有以下课程:

package com.spring.domain;

@Document(collection = "sportactions") // for my mongodb collection
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SportAction extends Action {
      //code logic
}

当我编译它时,它会给我以下错误:

  

用于servlet [dispatcherServlet]的Servlet.service()与path的上下文   []抛出异常[处理程序处理失败;嵌套异常是   java.lang.NoClassDefFoundError:com / spring / domain / Sportaction (错误   名称:com / spring / domain / SportAction )]有根本原因   java.lang.NoClassDefFoundError:com / spring / domain / Sportaction (错误   name:com / spring / domain / SportAction

我很困惑,因为我可以看到我的班级被称为SportAction,大写A而不是小写字母a所以我试图重构我的班级名称,看看它是否可以用于小写字母a

我收到以下错误:

  

用于servlet [dispatcherServlet]的Servlet.service()与path的上下文   []抛出异常[处理程序处理失败;嵌套异常是   java.lang.NoClassDefFoundError:com / spring / domain / SportAction (错误   名称:com / spring / domain / Sportaction )]有根本原因   java.lang.NoClassDefFoundError:com / spring / domain / SportAction (错误   name:com / spring / domain / Sportaction

spring应用程序将完美编译,但是当我尝试使用该类时,它将在运行时出现。

我还在gradle上做了几个clean然后build,它仍然无效。

有谁知道代码有什么问题?

当我尝试从mongodb获取Sportaction列表时,在我的java代码行中出现错误:

List<Sportaction> sportactions = mongoTemplate.find(query, Sportaction.class);

1 个答案:

答案 0 :(得分:0)

我不知道为什么会出现这个错误,但是我的build.gradle文件要求我像这样构建一个jar:

task stage(type: Copy, dependsOn: [clean, build]) {
    from jar.archivePath
    into project.rootDir 
    rename {
        'app.jar'
    }
}
stage.mustRunAfter(clean)

clean << {
    project.file('app.jar').delete()
}

当我运行并将其推送到我的仓库时,我得到了一个非常奇怪的错误,我的文件名现在是SportAction,但我的java文件中的类名是:

public class Sportaction

这导致了不匹配,我尝试重构名称以匹配文件名SportAction,但出现了相同的错误名称错误。然后,我决定将名称重构为SportEvents之类的其他内容,然后重新运行代码,然后就可以了。

这不是最好的解决方案,但现在必须要做。我怀疑它与jar的构建方式有关但我不确定app.jar是否从未运行过。 Application.main()是我运行Spring应用程序时运行的类。

我也很困惑为什么我的bitbucket上的SportAction类似乎根本没有提交 - 看看我的Action文件旁边的那3个点 - 它没有日期,也没有描述

enter image description here