myeclipse+maven實現多模組專案struts+spring+mybatis,詳解
本文中建立maven專案,不使用命令,完全用myeclipse實現,個人感覺這樣新手更容易接受!
開發環境:myeclipse 8.5+maven(非myeclipse自帶外掛)
目標:期望有兩個web專案A和B,訪問同一個資料庫,即依賴同一個java專案C
這裡借用一下前輩的理解:其實是將業務分為多個模組,各個模組之間相互獨立,甚至每個模組可以獨立執行。查詢若干資料可以利用maven建立model,然後整合為一個專案,今天先介紹一下基於maven的多模組專案搭建。
多模組其實就是按照層級的管理構建,專案包含一個pom.xml檔案和若干個模組,每個模組有一個單獨的pom.xml檔案,通過pom的依賴和繼承關係來構建專案層次。
先看下專案依賴關係:父專案ssm有兩個模組,分別是web和java專案
1.建立maven專案ssm
建立後修改pom檔案,將專案的打包方式修改為pom方式
注意:需要刪除src等多餘資料夾,因為聚合模組僅僅是幫助聚合其他模組構建的工具,其本身並沒有實質的內容
2.maven專案ssm新增maven module
這邊可以看到,筆者建立此web專案時,選擇先建立一個java專案,然後再為其新增web特性(筆者試過直接建立web型別,但一直報錯,可能是環境原因,有興趣可以試試,第一步不要勾選create a simple project)。
建立ssm-atomic的步驟一樣,不多說
完成後,我們看一下父專案ssm的pom檔案,多瞭如下結構
<modules>
<module>ssm-web</module>
<module>ssm-atomic</module>
</modules>
3.為ssm-web新增web特性
在src/main下新建目錄webapp
若將javaEE的jar新增的buildpath,可能會導致後面maven打包時,無法將javaEE的jar拷貝到專案lib目錄下。
那javaEE的包哪裡來呢?在ssm專案中新增
<dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_2.4_spec</artifactId> <version>1.1.1</version> </dependency>
可看到新增web特性後,專案路徑如下,很熟悉了吧
修改ssm-web的pom檔案,新增packaging方式為war(預設打包的方式是jar)
<parent>
<artifactId>ssm</artifactId>
<groupId>com.tch</groupId>
<version>${project.version}</version>
</parent>
<artifactId>ssm-web</artifactId>
<packaging>war</packaging>
4.父專案ssm配置
右擊專案,開啟屬性
將buildpath中的source資料夾給remove掉,並將output資料夾修改到web模組下web-inf/classes資料夾下
重點關注ssm-web專案的parent標籤
<parent>
<artifactId>ssm</artifactId>
<groupId>com.tch</groupId>
<version>${project.version}</version>
</parent>
<artifactId>ssm-web</artifactId>
其配置的是該模組所屬的父級專案,子模組的pom檔案是繼承字父級的pom檔案的,所以在父級pom中定義的dependencies在子模組中可以直接引用,模組的屬性也只需定義一個artifactId就可以了,groupId和version可以從父級繼承,relativePath配置是父級pom.xml檔案的相對路徑,一般可以省略
在父級專案pom檔案中增加上執行struts2+spring+mybatis+mysql依賴jar的dependency,在子模組中即可依賴使用。不贅述,參考原始碼
5.開發ssm-atomic和ssm-web
ssm-atomic為公共持久層,包括dao、spring資料來源、sqlmap、po物件,結構如下
ssm-web為web層,包括jsp、css、js、action控制、事務等
這裡需要說明一下:ssm-web依賴ssm-atomic
原因不多說,說說怎麼做的。首先開啟ssm-web的pom檔案,新增
<dependencies>
<dependency>
<groupId>com.tch</groupId>
<artifactId>ssm-atomic</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
說明:可能遇到ssm-atomic將會被打成jar包,放到ssm-web的lib下。也就是說ssm-atomic專案的修改,不會立即生效。右擊ssm-web設定靜態依賴
這邊再說一下spring的配置檔案吧。
如上圖:ssm-atomic中spring_ssm_atomic.xml配置了資料來源、以及dao的bean;它被ssm-web的applicationContext.xml引用。我們知道ssm-atomic最終將被
打成一個jar包,那applicationContext.xml是如何引用jar包中的配置檔案的呢?
<import resource="classpath*:/spring_ssm_atomic.xml"/>
classpath兩種用法:
classpath*:spring_ssm_atomic.xml會加入本專案及所有jar包根目錄下的spring_ssm_atomic.xml檔案,跨jar包依賴時使用
classpath:spring_ssm_atomic.xml只加入本專案根目錄下的spring_ssm_atomic.xml檔案,不依賴其它jar包的配置檔案時推薦這樣寫,以避免衝突
6.最後編譯打包
並執行父工程ssm的pom檔案,如下圖
發現war包帶版本號,開發很不方便。
新增<finalName>ssm</finalName>,重新打一次包
7.原始碼0積分下載
至此,一個簡單的maven多模組專案就搭建成功了,也可以正常的執行和訪問。僅供參考
歡迎轉載