簡體   English   中英

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

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

我正在使用IntelliJ 14

我想在我的項目中添加joda.time lib。 當我手動添加此lib(將jar文件復制到lib存儲庫,並在Project Structure中添加引用)一切正常時,我可以在servlet中使用該庫並在jsp中顯示結果。

但是在第二步中,我創建了相同的項目,但是我將maven與pom.xml文件一起使用。 我添加此依賴項:

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

Maven自動下載lib,在我的項目結構中,一切看起來都很好,我運行了項目……沒有錯誤,但是當我轉到網頁時,導航器中出現錯誤:

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

如果packaging type顯式設置為war則應檢入pom.xml 否則,maven將不會使用maven-war-plugin將您的應用程序正確地與所有引用的庫捆綁在一起,例如joda-time

所以你應該有:

<packaging>war</packaging>

另請參閱參考: Maven參考書

感謝MWiesner,您的回答。 這行得通。

我找到了另一個解決方案:

  • 在IntelliJ中/項目結構(F4鍵)/工件
  • 在右側(可用元素)上有joda-time庫,我必須雙擊它才能在工件中傳輸lib。

我不知道當maven導入lib時,IntelliJ是否可以自動執行此操作?

問題很可能在您部署項目時不包含joda-time jar。 您可以解壓縮war文件,然后查看是否存在。 我使用的是Eclipse,它安裝了Maven插件。 因此,當我導出Maven項目時,戰爭中將包含所有Maven管理的jar。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM