【Maven3教程】Maven多工程、多模塊

項目工程拆分原則?

    功能分層拆分、業務功能拆分?下面一個電商項目(Jmall)爲例:java

功能分層拆分

    按照項目功能分層,分爲common(java工程)、dao(java工程)、service(java工程)、web(web工程)等git

 

業務功能拆分

    按照業務拆分,分爲common工程(java工程)、用戶中心user(web工程)、商品中心goods(web工程)、訂單中心order(web工程)、總web(web工程)web

    

總結對比:

隨着業務複雜的增長、按照功能分層的拆分,每一個工程會愈來愈繁重,務必會達到瓶頸。可是按照業務功能的劃分,每一個模塊功能都是一個完整的web功能能夠獨立運行、開發、協做,同時又能合併成一個總的web的工程,使其組成一個平臺,隨着業務增長,能夠從新拆分新的工程,更好的適應業務整合。推薦按照業務功能進行拆分spring

本人不善言辭,以爲我說的不對,能夠參考其餘優秀的項目,例如spring業務按找業務功能進行拆分,以下圖:apache

下面就開始以Jmall爲例子按照業務劃分的原則,開始搭建maven多工程項目app

首先建立一個父工程jmall(pom),用於管理eclipse

接下來建立common工程(java工程)jsp

接下來構建user工程(web工程)maven

依此類推,構建好其餘工程,以下圖所示:測試

其中須要注意的是jmall-web工程是用於其餘工程合併成總工程的項目

構建好工程以後,首先Install一下,看是否成功:

測試jmall-common的依賴

在jmall-common中新建一個BaseTest的基類,以下圖:

在jmall-user工程調用BaseTest,以下圖:

首先須要添加jmall-common工程的依賴:

調用以下:

執行結果以下:

合併總的web工程

合併爲一個總的web工程,須要藉助maven-war-plugin的插件,以下圖所示:

須要添加工程依賴,以下圖:

jmall-web完整的pom.xml,以下:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.zhanghua</groupId>
		<artifactId>jmall</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>org.zhanghua</groupId>
	<artifactId>jmall-web</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>jmall-web Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.zhanghua</groupId>
			<artifactId>jmall-user</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<type>war</type>
		</dependency>
		<dependency>
			<groupId>org.zhanghua</groupId>
			<artifactId>jmall-goods</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<type>war</type>
		</dependency>
		<dependency>
			<groupId>org.zhanghua</groupId>
			<artifactId>jmall-order</artifactId>
			<version>0.0.1-SNAPSHOT</version>
			<type>war</type>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>jmall-web</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<overlays>
						<overlay>
							<groupId>org.zhanghua</groupId>
							<artifactId>jmall-user</artifactId>
						</overlay>
						<overlay>
							<groupId>org.zhanghua</groupId>
							<artifactId>jmall-goods</artifactId>
						</overlay>
						<overlay>
							<groupId>org.zhanghua</groupId>
							<artifactId>jmall-order</artifactId>
						</overlay>
					</overlays>
				</configuration>
			</plugin>
			<!-- jetty插件 -->
			<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>jetty-maven-plugin</artifactId>
				<version>7.6.15.v20140411</version>
				<configuration>
					<connectors>
						<connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
							<port>9080</port>
						</connector>
					</connectors>
					<webAppConfig>
						<contextPath>/</contextPath>
					</webAppConfig>
					<systemProperties>
						<systemProperty>
							<name>org.mortbay.util.URI.charset</name>
							<value>UTF-8</value>
						</systemProperty>
					</systemProperties>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

接下來,咱們執行install,看jmall-web的war是否已經把jmall-user,jmall-user,jmall-goods,jmall-order工程合併進來了,以下圖:

如上圖所示,合併正確,符合咱們的要求.

注意到index.jsp只有一個了,咱們每一個工程裏面都會有index.jsp,可是最後只有一個了,是由於咱們jmall-web工程裏面有index,會這個jmall-web的爲準。

總結:若是多個war相同路徑且同名的文件,若是總的web工程裏面有,那麼總的這個會覆蓋分支的,若是總的沒有,那麼看合併的順序,保留第一個順序的文件。

最後經過jetty:run運行成功,以下圖:

代碼地址:http://git.oschina.net/auhgnahz/jmall 

相關文章
相關標籤/搜索