【问题标题】:Spring NoClassDefFoundError: wrong nameSpring NoClassDefFoundError:错误的名称
【发布时间】:2016-01-07 19:03:07
【问题描述】:

我有以下课程:

package com.spring.domain;

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

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

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

我很困惑,因为我可以看到我的类名为 SportAction,大写字母 A 而不是小写字母 a,所以我尝试重构我的类名,看看它是否适用于小写字母 @987654324 @。

我收到以下错误:

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

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

我还在 gradle 上做了几个 cleanbuild ,但它仍然不起作用。

有人知道代码有什么问题吗?

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

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

【问题讨论】:

  • 当您从 IDE、命令行或两者中执行此操作时会发生这种情况吗?
  • 我稍后会在命令行上尝试它,但是 gradle 构建是成功的,它只是在运行时爆炸了。我还应该让你知道,我现在在 Mac 上处理代码并且很好。但是当我将它推送到 Windows 时,就会发生错误。
  • 我在命令行和 IDE 上尝试过 gradlew clean 然后 gradlew build 和同样的错误结果。
  • 您的xml配置中没有误用名称吗?
  • 不,我使用的是spring boot,所以没有xml配置文件

标签: java spring servlets gradle


【解决方案1】:

我不知道为什么会出现这个错误,但是我的 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 个点 - 它没有日期,也没有描述.

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 2013-10-24
    • 2012-04-03
    • 1970-01-01
    • 2013-04-25
    • 2018-08-11
    相关资源
    最近更新 更多