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

Java EE: NoClassDefFoundError org.joda.time.DateTime with IntelliJ and Maven

我正在使用 IntelliJ 14

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

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

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

Maven 自动下载库,在我的项目结构中,一切看起来都很好,我 运行 项目...没有错误,但是当我转到我的网页时,我的导航器出现错误:

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();
}

问题更有可能是部署项目时未包含 joda-time jar。您可以解压缩 war 文件并查看它是否存在。我使用 Eclipse,它安装了 Maven 插件。所以当我导出 Maven 项目时,所有 Maven 管理的 jar 都将包含在 war.

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

所以你应该:

<packaging>war</packaging>

另见参考: Maven Reference Book

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

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

  • 在 IntelliJ/项目结构(F4 键)/工件中
  • 右边(Available Elements)有joda-time库,我必须双击它才能在工件中传输库。

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