项目在IntelliJ中编译得很好,Tomcat说java.lang.NoClassDefFoundError:my/package/name/blah

Bla*_*man 5 scala spring-mvc intellij-idea maven tomcat7

我的项目在IntelliJ中编译得很好,它是一个用scala编写的简单spring-mvc.

当我使用tomcat运行它时出现此错误:

java.lang.NoClassDefFoundError: org/example/houses/SomeClassNameHere
Run Code Online (Sandbox Code Playgroud)

以上不是我的图书馆的确切名称.

我的控制器看起来像:

package com.example.scalacms.web.controllers

import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.{ResponseBody, RequestMapping}
import org.example.house

@Controller
class HomeController {
  var houses: Houses = _


  @RequestMapping(Array("/"))
  @ResponseBody
  def index: String = {
    "hello, world!"
  }

}
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为它在IntelliJ中编译得很好,它在智能感知系统中学习了我所有的课程.

可能是tomcat在我的类路径中没有库吗?我正在使用爆炸的神器.

我无法在输出窗口的任何地方看到类路径,所以我无法确认.

更新

所以我查看了/out/artifacts/myapp_web_war_exploded/WEB-INF/lib,我没有看到那里的jar文件.为什么jar不包含在部署中?如何将它包含在intellij中?

Ang*_*ity 6

如果它是一个maven WAR项目,检查jar是否被标记为排除provided在pom中,或者在pom 中的范围内,因为任何一个都会从WAR中删除jar.

如果不是这种情况,请转到命令行到pom WAR所在的目录,然后执行mvn dependency:tree并确认您的jar确实在那里.

如果jar在那里,则意味着它只能是IDE相关的问题.请尝试以下步骤:

  • 废弃当前的服务器
  • 从官方网站下载并解压缩干净的服务器
  • 在IDE中配置新服务器
  • 确保将模块导入为maven模块,以便IDEA完全基于poms构建编译和部署类路径
  • 如果它已经是Maven项目,请单击Maven Projects(左上角的隐藏窗格),然后单击Reimport All Maven Projects
  • 做一个Build - > Rebuild Project
  • 单击F4/Libraries并确认库在那里,然后运行服务器


小智 1

我不知道在 intellij 中,但在 Eclipse 中,当您部署并使用 Maven 时,有时会出现您未在部署程序集中包含 Maven 依赖项的情况

看这个:Maven 依赖项在 WEB-INF/lib 中不可见