【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 

相关文章
相关标签/搜索