背景
目前Java web工程通常都是通過IDEA module模塊化,分成xxx-admin、xxx-core、xxx-dao、xxx-web等模塊,多個module通過maven管理。這幾個模塊打包一起運行,通常只有xxx-web是個web工程,提供springMVC方式對外提供訪問。
自己使用IDEA也創(chuàng)建了個 多module的工程,出現(xiàn)了一些問題。
Intellij IDEA Tomcat啟動項目報錯:java.lang.ClassNotFoundException:org.springframework.web.context.xxxxx
我是報出ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
出現(xiàn)這個問題,是因為工程的jar包未被部署。但檢查pom.xml里面的dependency感覺都正常。
注意:在多module的工程,通常在部署到Tomcat上時,都是部署xxx-web這個module模塊。
IDEA菜單依次操作 File >Project Structure >Artifacts >Output Layout >Available Elements

我們先ctrl+shift+alt+s打開Project Structure窗口,選擇Artifacts,選擇要打包部署的項目,在Output Layout –> Web-INF查看是否有l(wèi)ib目錄,如果右邊Available Elements窗口還顯示有jar包,說明這些jar包未添加,則應(yīng)右擊選擇Put into Output Root(put into WEB_INF/lib),這樣就OK了
接著遇到了另一個問題
Web_exploded not found for the web module.
JmxAdminException: com.intellij.execution.ExecutionException
xxxx_Web_explored not found for the web module.
沒有檢測到要部署的web模塊,是因為Tomcat執(zhí)行deployed時,找不到web模塊的Artifact,依次再次進(jìn)入File >Project Structure >Artifacts
將Output directory 指定到web module的target目錄

web.xml的位置
多module工程,還需要注意 WEB-INF/web.xml的位置配置,進(jìn)入File >Project Structure >Modules

可以看到你工程的所有module,可以點擊+號給其中一個module新建一個Web 而使其成為web模塊,點擊中間的鉛筆圖標(biāo),編輯指定WEB-INF/web.xml的位置。我的配置地址為:磁盤路徑/工程名/web模塊名/src/main/webapp/WEB-INF/web.xml。
右側(cè)窗口 中下方的Web Resource Directories,雙擊修改指定路徑到:工程名/web模塊名/src/main/webapp/WEB-INF/web.xml。