Maven模块化开发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven模块化开发相关的知识,希望对你有一定的参考价值。
最近在做一个项目,这个项目有个特点,含有众多业务模块,各业务模块间关联内容很少,且公司领导又想达到各模块可快速单独拆分使用的效果(说白了就是公司没钱,想把这个项目做完后,做下拆分,拆分成各个小产品单独销售),于是乎我想到是否可使用Maven来进行模块化开发,将各个业务模块做成一个个小的Jar包,到用的时候需要那个加载那个。
一,构想:
把系统分成以下几个模块(项目名称proj):
1,proj模块,作为父模块用于聚合所有子模块,打包方式pom
2,proj-web模块,用于发布最终的war包,打包方式war
3,proj-core模块,作为项目核心模块,可以把用户管理、权限管理等基础管理模块放入其 中,打包方式jar
4,proj-util模块,用于项目中共用的工具类,打包方式jar
5,proj-jslib模块,用于项目中共用的JS类库,打包方式jar
6,proj-common模块,用户项目中各业务模块间的调用,自己不需要就没加,打包方式jar
7,proj-businessModuleA,业务模块A,打包方式jar
8,proj-businessModuleB,业务模块B,打包方式jar
二,依赖关系:
三,创建项目
创建Proj Maven项目:
右键点击proj项目,创建proj-web Maven项目:
其他模块与web模块相似,只是打包方式变为了jar,maven原型可以不用选择webapp而已。
四,POM文件:
proj项目pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>proj</artifactId> <packaging>pom</packaging> <version>0.0.1</version> <name>Maven Webapp</name> <url>http://maven.apache.org</url> <build> <finalName>proj</finalName> </build> <modules> <module>proj-web</module> <module>proj-moduleA</module> <module>proj-util</module> <module>proj-core</module> <module>proj-jslib</module> <module>proj-moduleb</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.1.4.RELEASE</spring.version> <jackson.version>2.5.0</jackson.version> <activiti.version>5.16</activiti.version> <cxf.version>3.0.4</cxf.version> <shiro.version>1.2.2</shiro.version> <mq.version>5.7.0</mq.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project>
web模块pom文件:
<?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>test</groupId> <artifactId>proj</artifactId> <version>0.0.1</version> </parent> <artifactId>proj-web</artifactId> <packaging>war</packaging> <name>proj-web Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>test</groupId> <artifactId>proj-moduleA</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>test</groupId> <artifactId>proj-moduleB</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>test</groupId> <artifactId>proj-core</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>proj-web</finalName> </build> </project>
core模块POM文件:
<?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>test</groupId> <artifactId>proj</artifactId> <version>0.0.1</version> </parent> <artifactId>proj-core</artifactId> <name>proj-core</name> <packaging>jar</packaging> <build> <finalName>proj-core</finalName> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>test</groupId> <artifactId>proj-util</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>test</groupId> <artifactId>proj-jslib</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
其他模块和Core模块POM文件类似不在描述,只需添加各自所依赖的项目即可。
五,文件存放规则
依据servlet3.0,可直接访问jar包中位于src\main\resources\META-INF\resources中的文件,
因此各模块(jar包)中文件存放规则如下:
遇到的问题:
在项目运行过程中发现jsp中引入jar包中的js文件无法获取,http请求404,经过多次尝试,发现本人在web.xml中配置的springmvc DispatcherServlet的url-pattern为“/”,即匹配所有请求,这些js以及图片文件经过DispatcherServlet处理后获取不到。
解决方式:修改 url-pattern 为“*.jspx”,即让DispatcherServlet只处理后缀为“jspx”的http请求。
<servlet> <description>spring mvc servlet</description> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:springmvc.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.jspx</url-pattern> </servlet-mapping>
本文出自 “蓝色幽默” 博客,请务必保留此出处http://bluehumor.blog.51cto.com/2148378/1956676
以上是关于Maven模块化开发的主要内容,如果未能解决你的问题,请参考以下文章
02-Maven高级-分模块开发依赖传递聚合继承(SpringBoot的部分底层原理)多模块开发(环境切换)Nexus私服搭建与使用