maven子模塊相互依賴,maven(二) maven項目構建ssh工程(父工程與子模塊的拆分與聚合)

 2023-12-06 阅读 19 评论 0

摘要:前一節我們明白了maven是個什么玩意,這一節就來講講他的一個重要的應用場景,也就是通過maven將一個ssh項目分割為不同的幾個部分獨立開發,很重要,加油                               --WZY ? 一、maven父工程與子

前一節我們明白了maven是個什么玩意,這一節就來講講他的一個重要的應用場景,也就是通過maven將一個ssh項目分割為不同的幾個部分獨立開發,很重要,加油

                              --WZY

?

一、maven父工程與子模塊的拆分與聚合原理

maven子模塊相互依賴,      問題描述:將ssh工程拆分為多個模塊開發

      1.1、拆分原理

        創建一個maven project(pom),然后在創建三個子模塊(maven moudule),其中三個子模塊,分別為 dao、service、web,也就是將三層的內容分別獨立為一個項目,進一步將耦合性降低,其中如何將他們連接起來了,看下圖。

                  

maven多模塊工程打包部署、        為什么需要創建parent父工程來管理其下三個子模塊呢?并讓其子模塊繼承他呢?

          繼承是為了消除重復,如果將dao、service、web分開創建獨立的工程則每個工程的pom.xml文件中的內容存在重復,比如:設置編譯版本、鎖定spring的版本的等,可以將這些重復的配置提取出來在父工程的pom.xml中定義

        將三層都獨立分開來了,web層如何調用service層代碼?service層又如何調用dao層的代碼呢?

          這個在沒有maven之前是不可以這樣做的,但是有了maven一切都不一樣了,web層調用service層的代碼其實很簡單,因為service是一個完整的項目,那么我們在web層這個項目中想要使用別得項目中的代碼,只需要通過maven的pom.xml文件編寫對應的坐標,將其jar包加入進來即可達到目的,因此,看圖中,ssh-web依賴ssh-service,ssh-service依賴ssh-dao,其中的原理就是我說的這樣,所以才能將這三層分開成獨立的項目,并且進一步抽取其公有依賴的jar包,統一交由父工程來管理,這就maven帶來的效果。

優雅地使用maven父子工程,?

      1.2、聚合原理

        項目開發通常是分組分模塊開發,每個模塊開發完成要運行整個工程需要將每個模塊聚合在一起運行,比如:dao、service、web三個工程最終會打一個獨立的war運行

      

二、案例實現

maven父項目引了子項目的包,      問題描述:使用maven將ssh項目進行分模塊,并且實現從web到dao層的數據的存取進行實驗

      2.1、創建maven-parent父模塊

                  

        點擊next

                  

        點擊next

                  

        創建好之后的父工程如圖  

              

        從它的目錄結構可以看出,父工程本身不寫代碼,它里面有一個pom.xml文件,這個文件可以將多個子模塊中通用的jar所對應的坐標,集中在父工程中配置,將來的子模塊就可以不需要在pom.xml中配置通用jar的坐標le、

?

        在父工程的pom.xml中抽取一些重復的配置的,比如:鎖定jar包的版本、設置編譯版本等,一般這種都不需要我們自己臨時配置,網上或者公司都有已經寫好了的,每次使用就直接丟過來即可。下面給一個我收藏的額。嘿嘿

?maven父工程整合ssh通用的pom.xml配置

?

?

      2.2、創建maven-dao子模塊

              

        點next進入如下圖

                   

        點擊next,如下圖

               

                    

        點擊finish,完成,查看父工程中的pom.xml文件

              

        查看ssh_dao中的pom.xml文件,會發現多了一個 parent結點,并且內部所包含的結點,其實就是父工程的坐標

              

?

        查看ssh_dao的目錄結構

              

        因為是在dao層,和數據庫打交道,那么就在這個項目中,需要配置hibernate.hbm.xml和hibernate.cfg.xml,但是又集成了spring,所以hibernate.cfg.xml就不需要了,添加applicationContext.xml即可(這里需要有spring整合hibernate的基礎)

                

        注意:將applicationContext.xml拆分出一個applicationContext-dao.xml,此文件中只配置dao

?aplicationContext-dao.xml
?jdbcinfo.properties

?

        其他幾個Student.java這些就不用看了,太簡單了。

?

        StudentTest.java這個需要講解一下,因為這里使用junit測試的時候,會報錯,報的錯誤是找不到junit的jar包,這里我們就會很疑惑,為什么會找不到該jar包呢,不是在父工程里面都導入了junit的jar包了嗎?這里出錯的原因是傳遞依賴的范圍問題。

        將父工程看做A項目(下面簡稱A),將該子模塊ssh_dao看做B項目(下面簡稱B),A依賴junit的jar包是直接依賴。B繼承A(實際操作就是B中填寫A的坐標)也可以看成一種依賴,那么就是這樣一種關系,B 依賴 A 依賴 junit, A依賴junit是直接依賴沒錯,那么B跟junit的關系就叫做傳遞(間接)依賴,我們知道A依賴的junit時,junit的jar包可以設置在A中的使用范圍,就是scope屬性,可以為compile,test等,而junit設置的是test,只在A中測試的時候用,那么B想用junit時,junit的作用范圍是不是也是test呢?這就有一種關系。具體看表。

                

         按照剛才上面的例子,來看看在B中,junit的作用范圍是什么?首先看B 依賴 A,直接依賴,并且A在B中的作用范圍是compile(沒設置就默認),所以在直接依賴這一列中找到compile這一行,也就是用紅色框框框起來的一行,然后B 依賴 junit,對A來說,A 是傳遞依賴 junit,這時候看junit設置的作用范圍是多少(也就是看junit在B中的使用范圍是什么)?看傳遞依賴這一行,junit設置的是test,找到test這一列,看相交的地方,是空的,則說明,junti在B中的test范圍不能夠使用,其實看圖,B中任何范圍內都不能夠使用junit,這樣你就理解了這張圖是什么意思。這只是原理,實際上我們解決這種問題的時候,用一個簡單粗暴的解決方案。什么jar包丟失了,我們就再次導入一次jar包即可。

          所以在ssh_dao子模塊的pom.xml中有junit的坐標才能使用test

                

                               

        

      2.3、創建ssh_service子模塊

          方法同ssh_dao模塊創建方法一樣,模塊名稱為ssh_service。

          看ssh_service和ssh_parent的pom.xml文件,會出現和ssh_dao創建時一樣的情況,ssh_service多出一個parents結點,ssh_parent多個一個module結點

                

?

          在ssh_service的pom.xml中添加兩個依賴

                

?

           然后編寫service層的代碼,

                    

           主要關注一下applicationContext-service.xml中的事務的相關代碼

?aplicationContext-service.xml

?

            該層的測試,需要將ssh_dao中的applicationContext-dao.xml將ssh_service的applicationContext-service.xml包含進去才能夠實驗的通。這里不做測試,

?

?

      2.4、創建ssh_web子模塊

          方法同maven-dao模塊創建方法,模塊名稱為ssh-web,注意:打包方式為war,而不再是jar包了,因為該層需要放到tomcat中去。與瀏覽器交互,就是web項目了,所以打成war包

          和前面一樣,ssh_parent的pom.xml中增加一個module結點,而ssh_web的pom.xml中增加一個parent結點

          這個也很簡單,就是跟寫普通的struts2是一樣的,只不過是和spring的結合,有什么對象,都通過spring來給予,并且這里多做一個事情,就是將之前的applicationContext配置文件進行結合,看下圖

                    

?application.xml

?

          web.xml中配置struts2的攔截器和spring的監聽器

?web.xml

?

          這里注意一個問題,struts跟spring整合的時候,Struts.xml中的class應該填寫spring配置文件中的id。

?

      2.5、總結與啟動

           父工程和子模塊都寫完之后,就成這樣了

              

                        

           運行調試即可。這里我遇到一個小問題,一直解決不了,

              

?

三、總結

      理解了這個分模塊與聚合的作用,并且知道如何開發即可。加油。確實搞的有點煩躁。

?

?

原文鏈接:https://www.cnblogs.com/whgk/p/7121336.html

轉載于:https://www.cnblogs.com/qqfff/p/11276365.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/190346.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息