1. 程式人生 > >myeclipse+maven實現多模組專案struts+spring+mybatis,詳解

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-webpom檔案,新增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.最後編譯打包

並執行父工程ssmpom檔案,如下圖

 

發現war包帶版本號,開發很不方便。

新增<finalName>ssm</finalName>重新打一次包

7.原始碼0積分下載

至此,一個簡單的maven多模組專案就搭建成功了,也可以正常的執行和訪問。僅供參考

歡迎轉載