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

  

二,依赖关系:

    wKiom1mTpEzBPJQpAAB6vgGam-g524.png-wh_50

三,创建项目

  创建Proj Maven项目:

    wKioL1mTpgSiHnM8AAB4R9ImSNI066.png-wh_50

    wKioL1mTphjAaqL5AAB_qL0UUeo144.png-wh_50

 右键点击proj项目,创建proj-web Maven项目:

    wKiom1mTpxWQz3IzAAB_j_5aQv4016.png-wh_50

    wKiom1mTpyOSk706AACAEOigUvI205.png-wh_50

    wKiom1mTpzHjkMshAAC8TtDsono961.png-wh_50

  其他模块与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包)中文件存放规则如下:

    wKiom1mTrbST1CktAAAyN1j-3sE900.png-wh_50


遇到的问题:

    

  在项目运行过程中发现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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章