Maven工程的拆分与聚合

一、开发步骤

1,创建一个父工程




点击Next




点击Finish后,它里面有一个pom.xml文件,这个文件可以将多个子模块中通用的jar所对应的坐标,

集中在父工程中配置,将来的子模块就可以不需要在pom.xml中配置,共用父模块jar。


2,创建一个子模块




点next,进入如下图:




点next,进入如下图:



再次查看父工程的pom.xml文件





并且内部所包含的结点,其实就是父工程的坐标

坐标=groupId+artifactId+version

         组织名   项目名       版本


二、冲突问题的解决


1.通过添加<exclusion>标签来解决冲突

在父工程中引入了struts-core,hibernate-core,就发现jar包是有冲突的

Javassist存在版本上冲突问题




背后的父工程的pom.xml文件中,添加的内容




2.依赖调解原则:

   maven自动按照下边的原则调解:

(1)   第一声明者优先原则

       在pom文件定义依赖,先声明的依赖为准。

测试:

如果将上边struts-spring-plugins和spring-context顺序颠倒,系统将导入spring-beans-4.2.4。

分析:

由于spring-context在前边以spring-context依赖的spring-beans-4.2.4为准,所以最终spring-beans-4.2.4添加到了工程中。


 (2)路径近者优先原则


       例如:A依赖 spirng-beans-4.2.4,A依赖B,B依赖 spirng-beans-3.0.5,则spring-beans-4.2.4优先被依赖在A中,

       因为spring-beans-4.2.4相对spirng-beans-3.0.5被A依赖的路径最近。

 测试:

在本工程中的pom中加入spirng-beans-4.2.4的依赖,根据路径近者优先原则,系统将导入spirng-beans-4.2.4


  <dependency>
  	<groupId>org.springframework</groupId>
  	<artifactId>spring-beans</artifactId>
  	<version>4.2.4.RELEASE</version>
  </dependency>


3.使用版本锁定实现冲突解决


首先父工程中pom.xml文件添加




注意:

       在使用坐标时,对于同一个框架,引入多次时,它的版本信息就会多次出现,所以可以借用常量的思想,

将这些版本号提取出来,在需要用到的时候,直接写版本的常量名称就可以了。




最终在ssh_parent的pom.xml中引入的坐标


 <!-- 为了确定每个框架的版本号 -->

  <!-- 锁定版本 -->
      <properties>
		 <spring.version>4.2.4.RELEASE</spring.version>
		<struts2.version>2.3.24</struts2.version>
		<hibernate.version>5.0.7.Final</hibernate.version>
        <slf4j.version>1.6.6</slf4j.version>
        <log4j.version>1.2.12</log4j.version>
		<shiro.version>1.2.3</shiro.version>
		<cxf.version>3.0.1</cxf.version>
		<c3p0.version>0.9.1.2</c3p0.version> 
		<mysql.version>5.1.6</mysql.version>
	</properties>
  	<!-- 锁定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-context</artifactId>
				<version></version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-aspects</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-orm</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-test</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-web</artifactId>
				<version>${spring.version}</version>
			</dependency>
			<dependency>
				<groupId>org.hibernate</groupId>
				<artifactId>hibernate-core</artifactId>
				<version>${hibernate.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.struts</groupId>
				<artifactId>struts2-core</artifactId>
				<version>${struts2.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.struts</groupId>
				<artifactId>struts2-spring-plugin</artifactId>
				<version>${struts2.version}</version>
			</dependency>

		</dependencies>
	</dependencyManagement>
  
  <dependencies>
  	<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.4</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.1.37</version>
		</dependency>
		<dependency>
			<groupId>commons-beanutils</groupId>
			<artifactId>commons-beanutils</artifactId>
			<version>1.9.1</version>
		</dependency>
		<!-- <dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.1</version>
		</dependency> -->
		<dependency>
		  <groupId>commons-fileupload</groupId>
		  <artifactId>commons-fileupload</artifactId>
		  <version>1.3.1</version>
		</dependency>
	
		<!-- jstl -->
 	    <dependency>
		  <groupId>jstl</groupId>
		  <artifactId>jstl</artifactId>
		  <version>1.2</version>
	    </dependency>
	    
	    <!-- shiro -->
	     <!-- apache shiro dependencies -->
	     <!-- <dependency>
	    	<groupId>org.apache.shiro</groupId>
	    	<artifactId>shiro-all</artifactId>
	    	<version>${shiro.version}</version>
	     </dependency> -->

      
       <!-- spring -->
		<dependency>
		    <groupId>org.aspectj</groupId>
		    <artifactId>aspectjweaver</artifactId>
		    <version>1.6.8</version>
		</dependency>
		
         <dependency>
	    	<groupId>org.springframework</groupId>
	    	<artifactId>spring-aop</artifactId>
	    	<version>${spring.version}</version>
	    </dependency>
	    
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context-support</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-web</artifactId>
		  <version>${spring.version}</version>
		</dependency>

		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-orm</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-beans</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-core</artifactId>
		  <version>${spring.version}</version>
		</dependency>
		
	
		
		<!-- struts2  begin -->
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>${struts2.version}</version>
			<exclusions>
				<exclusion>
					<artifactId>javassist</artifactId>
					<groupId>javassist</groupId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-spring-plugin</artifactId>
			<version>${struts2.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-json-plugin</artifactId>
			<version>${struts2.version}</version>
		</dependency>
		<dependency>
	  		<groupId>org.apache.struts</groupId>
	  		<artifactId>struts2-convention-plugin</artifactId>
	  		<version>${struts2.version}</version>
	  	</dependency>
		<!-- struts2  end -->
		
		<!-- hibernate begin -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>${hibernate.version}</version>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.2.1.Final</version>
		</dependency>
		<!-- hibernate end -->
		
		<dependency>
	  		<groupId>c3p0</groupId>
	  		<artifactId>c3p0</artifactId>
	  		<version>${c3p0.version}</version>
	  	</dependency>
		
		<!-- <dependency> 
			<groupId>org.apache.cxf</groupId> 
			<artifactId>cxf-rt-frontend-jaxws</artifactId> 
			<version>${cxf.version}</version> 
		</dependency> 
		<dependency> 
			<groupId>org.apache.cxf</groupId> 
			<artifactId>cxf-rt-transports-http</artifactId> 
			<version>${cxf.version}</version> 
		</dependency> -->
		
        <!-- log start -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <!-- log end -->
		
		<!-- Javamail -->
	<!--     <dependency>
	      <groupId>javax.mail</groupId>
	      <artifactId>mail</artifactId>
	      <version>1.4.4</version>
	    </dependency> -->
		
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>
	
		<dependency>
			<groupId>org.codehaus.xfire</groupId>
			<artifactId>xfire-core</artifactId>
			<version>1.2.6</version>
		</dependency> 
        
		<dependency>
           <groupId>dom4j</groupId>
		   <artifactId>dom4j</artifactId>
		   <version>1.6</version>
	    </dependency>
	
		<!-- <dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi</artifactId> 
			<version>3.11</version> 
		</dependency>
		<dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi-ooxml</artifactId> 
			<version>3.11</version> 
		</dependency>
		<dependency> 
			<groupId>org.apache.poi</groupId> 
			<artifactId>poi-ooxml-schemas</artifactId> 
			<version>3.11</version> 
		</dependency> -->
	
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>3.8.1</version>
	      <scope>test</scope>
	    </dependency>
	   
	    <dependency>
	    	<groupId>mysql</groupId>
	    	<artifactId>mysql-connector-java</artifactId>
	    	<version>${mysql.version}</version>
	    </dependency>
	   <!--  <dependency>
	    	<groupId>com.oracle</groupId>
	    	<artifactId>ojdbc14</artifactId>
	    	<version>10.2.0.4.0</version>
	    </dependency> -->
	    <dependency>
	    	<groupId>javax.servlet</groupId>
	    	<artifactId>servlet-api</artifactId>
	    	<version>2.5</version>
	    	<scope>provided</scope>
	    </dependency>
	    <dependency>
	    	<groupId>javax.servlet.jsp</groupId>
	    	<artifactId>jsp-api</artifactId>
	    	<version>2.0</version>
	    	<scope>provided</scope>
	    </dependency>
	    <dependency>
	    	<groupId>net.sf.ehcache</groupId>
	    	<artifactId>ehcache-core</artifactId>
	    	<version>2.6.6</version>
	    </dependency>
  </dependencies>


三、依赖关系


依赖具有传递性,但不是无限传递的,传递的规则如下:









四、Web层的子模块创建



加入添加依赖service jar包后pom.xml会添加以下代码







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值