1. 程式人生 > >maven搭建模組化專案過程遇到的坑

maven搭建模組化專案過程遇到的坑

採用maven構建模組化專案,將一個整體專案拆分為entity、dao、service、web四個獨立模組,專案架構採用spring MVC+spring+mybatis,整個過程直至專案跑起來,報了幾個小問題,在此記錄,算是經驗吧。

1、src/main/resources下建立的folder資料夾,顯示為包,而不是資料夾

產生原因:

滑鼠右鍵專案–>properties–>java bulid path–>Source–>src/main/resources,下面included和excluded作用分別為編譯期包含的路徑和編譯期排除的路徑,

之所以folder顯示為包不顯示為資料夾,是因為src/main/resources

路徑被包含進入編譯期,自動將其下面的folder按照package處理

解決辦法:

此時只需要將src/main/resources路徑排除在編譯期路徑外即可:included:(All),excluded:**,意為包含所有,然後再排除所有(**表示當前路徑及其子級路徑)

相反,如果src/main/java目錄下的package不顯示為包而顯示為資料夾,則與上述處理相反:included:(All),excluded:(None),相關檔案將被編譯

2、專案釋出、啟動,報無法載入[classpath:/mybatis/mappers/*.xml]

產生原因:

專案被拆分為4個子模組,mapper配置檔案位於dao模組,配置資料來源和mybatis的spring-context.xml配置檔案位於web模組,在web的pom.xml中新增dao依賴,

四個模組在eclipse中都出於open狀態,即使在pom.xml中明確了引用dao依賴的type為jar,但此時dao預設以war的形式被髮布到web的lib裡,所以此時無法讀取到mapper配置檔案

解決辦法:

滑鼠右鍵專案–>properties–>Deployment Assemly–>Add–>project,將所需要依賴的子模組entity、dao、service加入當前專案Web部署元件目錄中,此時要注意deploy path列,依賴被髮布到的位置、版本、型別,比如:WEB-INF/lib/xxx-dao-1.0.0.jar
當然,也可以不這麼費事,直接把entity、dao、service子模組close掉,這樣web將明確使用pom.xml中依賴定義的專案、版本以及型別等

3、專案重新發布、啟動,錯誤同上

產生原因:

因為上面2的問題,採用的解決方案是在web專案的Deployment Assemly裡面新增entity、dao、service子模組,並指定了版本、型別等,此時則把entity、dao、service三個專案的Deployment Assemly裡面的Web部署元件目錄直接打成了jar包,

分別去看三個子模組,發現它們的Deployment Assemly的deploy path列,src/main/java和src/main/resources的部署目錄都是WEB-INF/classes,那麼,可以遇見,釋出到web專案的三個子模組jar目錄結構肯定是WEB-INF/classes/…,實際上並不應該帶有WEB-INF/classes目錄結構

解決辦法:

依據上面分析的原因,此時只需要把三個子模組的Deployment Assemly的deploy path列,src/main/java和src/main/resources的部署目錄更改為根目錄,即 WEB-INF/classes 更改為 /

與上面問題2的解決方案一樣,可以不這麼費事,直接把entity、dao、service子模組close掉,這樣web將明確使用pom.xml中依賴定義的專案、版本以及型別等