Maven解决冲突&分模块开发&搭建私服

Maven解决冲突&分模块开发&搭建私服

依赖冲突

  • Jar包之间依赖关系出现版本冲突(比如,struts1-spring-plugin包依赖spring-bean:3.0.5;spring-context包依赖spring-bean:4.2.4;它们被加载到同一个项目,到底用那个呢?)
    在这里插入图片描述
  • 或者在pom.xml文件中配置
    <exclusions>
        <exclusion>
            <groupId>javassist</groupId>
        	<artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
    

依赖调解原则

  1. 第一声明者优先原则,即把谁放前面,就用谁的
    在这里插入图片描述

  2. 路径近者优先原则,则是自己添加这个冲突的jar包,都不用被依赖的。
    在这里插入图片描述

  3. 使用版本锁定实现冲突解决(路径近者优先选择延伸)
    面对众多的依赖,有一种方法不用考虑依赖路径、声明优化等因素可以采用直接锁定版本的方法确定依赖构件的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本的为准添加到工程中。

    	<!-- 锁定版本 -->
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-context</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    			
    			<dependency>
    				<groupId>org.springframework</groupId>
    				<artifactId>spring-orm</artifactId>
    				<version>${spring.version}</version>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    

    注意:在工程中锁定依赖的版本并不代表在工程中添加了依赖,如果工程需要添加锁定版本的依赖则需要单独添加<dependencies></dependencies>标签,如下:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    

在这里插入图片描述

Maven整合SSH

  • 搭建SSH整合Maven实现数据库的查询操作
    在这里插入图片描述

  • 数据库创建

    CREATE TABLE `cst_customer` (
      `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
      `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
      `cust_user_id` bigint(32) DEFAULT NULL COMMENT '负责人id',
      `cust_create_id` bigint(32) DEFAULT NULL COMMENT '创建人id',
      `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
      `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
      `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
      `cust_linkman` varchar(64) DEFAULT NULL COMMENT '联系人',
      `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
      `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
      `cust_createtime` datetime DEFAULT NULL COMMENT '创建时间',
      PRIMARY KEY (`cust_id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
    
  • Customer字段

    	private Long custId;
    	private String custName;
    	private Long custUserId;
    	private Long custCreateId;
    	private String custIndustry;
    	private String custLevel;
    	private String custLinkman;
    	private String custPhone;
    	private String custMobile;
    
  • pom.xml

    <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/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.syj</groupId>
    	<artifactId>ssh_maven</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>war</packaging>
    	 <!-- 版本信息 -->
         <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>${spring.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>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>
      
       <build>
    	<pluginManagement>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-compiler-plugin</artifactId>
    				<version>3.2</version>
    				<configuration>
    					<source>1.8</source>
    					<target>1.8</target>
    					<encoding>UTF-8</encoding>
    					<showWarnings>true</showWarnings>
    				</configuration>
    			</plugin>
    			<plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <port>8080</port>
                        <path>/maventest</path>
                        <uriEncoding>UTF-8</uriEncoding>
                        <server>tomcat7</server>
                    </configuration>
                </plugin>
    		</plugins>
    	</pluginManagement>
      </build>
    </project>
    

分模块开发

  • 将上面的SSH整合Maven项目,改为分模块开发

创建父工程

  • 建立打包类型为pom类型的一个父模块,主要就是用来管理pom文件的
    在这里插入图片描述

创建子模块

  • 创建的方式:
    方式一:
    ​ 右击父工程–>new–>other
    在这里插入图片描述
    方式二:(推荐)
    ​ 右击父工程
    在这里插入图片描述

  • 子工程包含entity(实体层)、dao层、service层、web层。只有wen层是选择war包。其他的都是选择jar包
    在这里插入图片描述

  • 接下来将各层之间的依赖关系进行添加

    dao–>依赖entity

    service—>依赖dao

    web---->依赖service
    在这里插入图片描述

  • 各层的依赖关系具有传递性service需要引入entity,但是dao引入了entity,service引入dao,所以service可以找到entity。

工程的聚合

  • 将拆分的子模块进行聚合,将之前写的代码移植到子工程当中(按原则移植)
  • entity层将实体类进行同等的编写(Customer.java),同时将实体的映射放到src/main/resources文件夹。
  • dao层编写CustomerDao的接口和实现类
  • service层编写CustomerService的接口和实现类
  • web层编写CustomerAction的查询所有并转跳到指定的页面,applicationContext.xml和hibernate.cfg.xml和struts2.xml文件存放在web的src/main/resources文件夹下。
  • 使用tomcat启动聚合的项目,只需要将ssh_web加入到tomcat中即可(前提是已经配好了依赖关系)
  • 在tomcat上面运行肯定没有问题,但是使用maven的tomcat插件可能会出现错误的情况
  • 我们可以将子模块的项目从没有依赖的子模块依次打包到本地仓库entity—>dao—>service—>web
  • 使用maven的tomcat插件,需要运行maven的父工程。
  • 关于Maven项目build时出现No compiler is provided in this environment的处理

搭建私服

在这里插入图片描述

  • Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。

  • 下载Nexus, 下载地址:http://www.sonatype.org/nexus/archived/

  • 下载ZIP格式的。

  • 安装Nexus:

    1. 解压,进入指定的目录(bin目录)比如:D:\Maven\nexus-2.12.0-01\bin

    2. 安装并启动这个应用程序

    3. cmd进入bin目录,执行nexus.bat install(尽量采用管理员模式)
      在这里插入图片描述

    4. 安装成功在服务中查看有nexus服务:
      在这里插入图片描述

  • 卸载Nexus:

    1. cmd进入nexus的bin目录,执行:nexus.bat uninstall
      在这里插入图片描述
    2. 查看window服务列表nexus已被删除
  • 启动nexus:

    方法1:
    ​ cmd进入bin目录,执行nexus.bat start

    方法2:
    ​ 直接启动nexus服务
    在这里插入图片描述
    访问:http://localhost:8081/nexus/

    ​ 使用Nexus 内置账户admin/admin123登陆:

    ​ 点击右上角的Log in,输入账号和密码 登陆

  • 登录成功:
    在这里插入图片描述

  • 仓库类型:
    在这里插入图片描述

    1. hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库。

    2. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。

    3. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件

    4. virtual(虚拟):兼容Maven1 版本的jar或者插件

      nexus仓库默认在sonatype-work目录中:
      在这里插入图片描述

将本地的项目发布(deploy)到私服

  • 第一步: 需要在客户端即部署dao工程的电脑上配置 maven环境,并修改 settings.xml 文件,配置连接私服的用户和密码 。
    此用户名和密码用于私服校验,因为私服需要知道上传都 的账号和密码 是否和私服中的账号和密码 一致。

    	<server>
          <id>releases</id>
          <username>admin</username>
          <password>admin123</password>
        </server>
    	<server>
          <id>snapshots</id>
          <username>admin</username>
          <password>admin123</password>
        </server>
    
  • releases 连接发布版本项目仓库
    snapshots 连接测试版本项目仓库

  • 第二步:

    <!-- 私服的配置(2) -->
        <profile>   
      <!--profile的id-->
       <id>dev</id>   
        <repositories>   
          <repository>  
        <!--仓库id,repositories可以配置多个仓库,保证id不重复-->
            <id>nexus</id>   
        <!--仓库地址,即nexus仓库组的地址-->
            <url>http://localhost:8081/nexus/content/groups/public/</url> 
        <!--是否下载releases构件-->
            <releases>   
              <enabled>true</enabled>   
            </releases>   
        <!--是否下载snapshots构件-->
            <snapshots>   
              <enabled>true</enabled>   
            </snapshots>   
          </repository>   
        </repositories>  
       <pluginRepositories>  
          <!-- 插件仓库,maven的运行依赖插件,也需要从私服下载插件 -->
            <pluginRepository>  
              <!-- 插件仓库的id不允许重复,如果重复后边配置会覆盖前边 -->
                <id>public</id>  
                <name>Public Repositories</name>  
                <url>http://localhost:8081/nexus/content/groups/public/</url>  
            </pluginRepository>  
        </pluginRepositories>  
      </profile>  
    
  • 第三步: 使用profile定义仓库需要激活才可生效。

  <!--  使用profile定义仓库需要激活才可生效。  -->
  <activeProfiles>
    <activeProfile>dev</activeProfile>
  </activeProfiles>

在这里插入图片描述

  • 第四步: 配置项目pom.xml (上传之前注意子项目间的依赖关系)

    配置私服仓库的地址,公司自己的jar包会上传到私服的宿主仓库,根据工程的版本号决定上传到哪个宿主仓库,如果版本为release则上传到私服的release仓库,如果版本为snapshot则上传到私服的snapshot仓库

     <distributionManagement>
      	<repository>
      		<id>releases</id>
    	<url>http://localhost:8081/nexus/content/repositories/releases/</url>
      	</repository> 
      	<snapshotRepository>
      		<id>snapshots</id>
    	<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
      	</snapshotRepository> 
      </distributionManagement>
    
  • 上传:
    在这里插入图片描述

  • 结果:
    在这里插入图片描述

从私服下载jar包

  • 没有配置nexus之前,如果本地仓库没有,去中央仓库下载,通常在企业中会在局域网内部署一台私服服务器,有了私服本地项目首先去本地仓库找jar,如果没有找到则连接私服从私服下载jar包,如果私服没有jar包私服同时作为代理服务器从中央仓库下载jar包,这样做的好处是一方面由私服对公司项目的依赖jar包统一管理,一方面提高下载速度,项目连接私服下载jar包的速度要比项目连接中央仓库的速度快的多。

  • **管理仓库组:**nexus中包括很多仓库,hosted中存放的是企业自己发布的jar包及第三方公司的jar包,proxy中存放的是中央仓库的jar,为了方便从私服下载jar包可以将多个仓库组成一个仓库组,每个工程需要连接私服的仓库组下载jar包。
    在这里插入图片描述

  • 上面的本地项目发布到私服配置好之后,当搭建好之后,我们缺少什么jar包,只要公司有人上传了,我们只需要配置好依赖关系,Update Project就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值