那麼這是一個有趣的經歷,自從我構建了我的maven多模塊項目幾個星期以來。Maven多模塊項目結構化問題
當我決定使用maven進行我的構建生命週期管理時,我有幾個原因希望選擇maven。
a。大多數開發團隊是分開的,以便每個團隊可以在項目中的單獨模塊中工作,如Team-A在用戶管理系統上工作,Team-B在授權系統上工作,Team-C在文檔管理系統上工作......並且等等。每個團隊都有java開發人員,測試人員,UI專家等。
因此,maven項目結構應該是這樣的,每個團隊都可以獨立地在各自的模塊上工作。他們必須能夠編寫,編譯,構建,測試和部署他們的模塊,而無需編譯,測試屬於其他團隊的模塊。
就這樣我來到結論maven的多模塊項目的每個開發模塊必須代表一個功能模塊
有些論壇上的討論,我發現人們建議我按照分層的方法後,子模塊必須是控制層,服務層,道層等層。我沒有注意這個建議,因爲這不能解決我在單個模塊上工作的團隊的目的。通過這種方式,大型項目在開發期間每個團隊的構建和部署時間會增加,這會影響項目時間表。有時候,如果項目中有10到11個模塊,構建和部署時間最多可達30分鐘。
但我確實留意建議每個模塊保持DAO層分離不是一個好主意,因爲DAO是高度顆粒狀的並被其他模塊重用。所以一個模塊對其他模塊的依賴會變得更大。
我通過創建一個通用模塊並將DAO和DOMAIN移動到通用模塊來發現此問題的解決方案,該模塊將作爲每個模塊的依賴項繼承。這似乎是一個更可行的選擇。現在項目結構看起來像這樣。
現在,當我生成項目,並運行在服務器上web應用程序,它抱怨404,未找到資源。我發現這是因爲缺少WEB-INF/classes文件夾,在web-app模塊中缺少src/main/java。我搜索並找到了幾條鏈接,提示它是Eclipse中的部署組裝問題。所以我需要手動創建這些文件夾並添加到部署程序集中,因爲maven不會這樣做。
但更大的問題是
- 我是否需要將控制器類,如com.mycompany.usermgmtsys.controller.UserMgmtController等爲src /主/ Java或行家應該發現從控制器模塊jar包含在WEB-INF/lib中作爲依賴項。
我不想這樣做,即將java文件放入web-app。我希望所有控制器都可以作爲Web-app的依賴項,例如WEB-INF/lib/usermgmtsystem.jar。但是,那麼Tomcat就不會在類文件夾中尋找控制器。
我不知道該怎麼辦?任何建議,將不勝感激。
你想要你的控制器/服務取決於你的網絡應用程序?這是倒退。您的Web應用程序是您的客戶端層,應該位於架構「堆棧」的頂部。它應該調用服務層,然後將請求編排到其他服務和/或域層。 – tdrury
在我的問題中的任何地方,我並不是要顛倒依賴順序。我期望的所有內容都是讓網絡應用程序從其打包在戰爭中的依賴性瓶子中識別其控制器,以便不存在404。如果您查看結構,我仍然具有正確的依賴順序,即Common(包裝DAO和DOMAIN )作爲UserManagement的依賴項,它充當Web-app的依賴。問題是因爲我在各個子模塊中包含了各自的控制器,它們在WEB-INF/classes文件夾中找不到,而在WEB-INF/lib中找不到它們作爲jar。 – RaghaveShukla
由於它們是依賴jar,它們應該在WEB-INF/lib中。這是正確的行爲。 – tdrury