Java EE:使用IntelliJ和Maven的NoClassDefFoundError org.joda.time.DateTime

时间:2015-02-20 19:59:12

标签: java maven intellij-idea jodatime

我正在使用IntelliJ 14

我想在我的项目中添加joda.time lib。 当我手动添加这个lib(将jar文件复制到lib存储库,并在Project Structure中添加引用)一切正常时,我可以在servlet中使用该库并在jsp中显示结果。

但是在第二步中我创建了相同的项目,但我正在使用带有pom.xml文件的maven。我添加了这个依赖项:

<dependencies>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.1</version>
    </dependency>
</dependencies>

Maven自动下载lib,在我的项目结构中,每件事看起来都很好,我运行项目......没有错误,但是当我进入我的网页时,我的导航器出错了: / p>

java.lang.NoClassDefFoundError: org/joda/time/DateTime
com.sdzee.servlets.ServletTest.doGet(ServletTest.java:47)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

项目完全相同,我只是使用Maven来使用lib。

你有想法吗?

我的Servlet第47行例如:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    DateTime dt = new DateTime();
    Integer jourDuMois = dt.getDayOfMonth();
}

3 个答案:

答案 0 :(得分:2)

如果pom.xml明确设置为packaging type,您应该检查war。如果没有,maven将不会使用maven-war-plugin将您的应用程序与所有引用的库正确捆绑在一起,例如: joda-time

所以你应该:

<packaging>war</packaging>

另见参考资料: Maven Reference Book

答案 1 :(得分:2)

感谢MWiesner,您的回答。它有效。

我找到了另一个解决方案:

  • 在IntelliJ /项目结构(F4键)/工件
  • 在右侧(可用元素)有joda-time库,我必须双击它以传输工件中的lib。

我不知道当maven导入lib时IntelliJ是否可以自动执行此操作?

答案 2 :(得分:0)

问题更有可能是在部署项目时不包括joda-time jar。您可以解压缩war文件,看看它是否在那里。我使用Eclipse安装Maven插件。因此,当我导出Maven项目时,所有Maven管理的jar都将包含在战争中。