Java-Maven 的使用详解

第一节 Maven传递依赖

1.1 什么是传递依赖?

当项目依赖一个jar包时,与这个jar包关联的其他jar包也会关联到当前项目,这种现象就是传递依赖。
比如A项目依赖B项目,B又依赖C项目, 此时A中也包含了C的依赖。

案例演示:

步骤1:创建Maven项目project01
    project01的基本信息如下
        groupId:com.qf.maven 
        artifactId:project01
        version:1.0-SNAPSHOT

    在pom文件中添加mysql jdbc驱动的依赖
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>
步骤2:创建Maven项目project02,在pom文件中添加project01的依赖
        <dependency>
            <groupId>com.qf.maven</groupId>
            <artifactId>project01</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>   
        
观察 project02中的依赖:包含有mysql的驱动依赖     

 

1.2 依赖传递出现的问题

依赖传递出现的问题: 经常出现jar包冲突,
 解决方案: 1 直接排除指定的jar包
           2 版本号限定原则

1.3 解决jar包冲突的方式(4种)

1.3.1 排除原则(常用)

    <exclusions>
               <exclusion>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
               </exclusion>
    </exclusions>

1.3.2 版本号限定原则(常用)

 

 <!-- 标记版本号 -->
 <!--添加属性-->
    <properties>
        <mysql.version>5.1.42</mysql.version>
    </properties>

    <!--02版本锁定-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
      <!-- 依赖管理 -->
      <dependencies>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
      </dependencies>

 

1.3.3 路径就近原则(基本不用)

1.3.4 第一声明优先原则(基本不用)

注意:如果是直接依赖,不遵循第一声明原则,后面会覆盖前面的依赖

1.4 传递依赖对依赖范围的影响

A项目直接依赖 B项目 (最左边一列 A和B的依赖范围)

B项目直接依赖C 项目 (最上面一行B和C的依赖范围)

交叉点A和C的依赖范围

第二节 分模块构建项目

 

理解继承和聚合

继承

    开发中多个项目有共同的jar包依赖,可以采用继承方式简化各个项目的pom文件,在父类的pom文件中依赖共同拥有的jar。继承是为了消除重复,如果将dao、service、web分开创建独立的工程则每个工程的pom.xml文件中的内容存在重复,比如:设置编译版本、锁定mysql的版本的等,可以将这些重复的配置提取出来在父工程的pom.xml中定义。 
   注意:
       1.父级项目只能是pom打包方式。
       2.子项目是一个Maven Module

聚合

   项目开发通常是分组分模块开发,每个模块开发完成要运行整个工程需要将每个模块聚合在一起运行,比如:dao、service、web三个工程最终会打一个独立的war运行。
   能够把项目的各个模块聚合在一起构建。一般用于分模块开发,最后整体打包发布。
   
   注意:
       1.根项目(模块)是一个pom项目。
       2.子模块:Maven Module
       3.每个模块写完后需要上传到私服
       4.打包,需要整体打包找到最后的war项目使用Tomcat加载
       
        实际中,我们会将一些庞大的项目拆分为若干模块进行开发
        三层+MVC 如下:
        dao (包含实体类、utils)----------jar
        service------jar
        web----------war

2.2 案例演示继承和聚合

第一步:创建父工程,修改pom.xml文件

第二步:创建dao,并继承父工程

第三步:创建service,并继承父工程

第四步:创建web,并继承父工程

第五步:运行

注意:分模块开发项目编译、打包、安装需要使用使用父工程来整体操作。如果要操作单个子模块,最后先整体安装一次,因为单个子模块需要依赖信息。

 

方法1:在maven-web工程的pom.xml中配置tomcat插件运行
运行maven-web工程它会从本地仓库下载依赖的jar包,所以当maven-web依赖的jar包内容修改了必须及时发布到本地仓库,比如:maven-web依赖的maven-service修改了,需要及时将maven-service发布到本地仓库。
方法2:在父工程的pom.xml中配置tomcat插件运行,自动聚合并执行 
推荐方法2,如果子工程都在本地,采用方法2则不需要子工程修改就立即发布到本地仓库,父工程会自动聚合并使用最新代码执行。
​
注意:如果子工程和父工程中都配置了tomcat插件,运行的端口和路径以子工程为准。

 

2.3 聚合与继承的关系

  • 聚合是为了方便快速构件项目。对于聚合模块来说,它知道有哪些被聚合的模块,但那些模块不知道这个聚合模块的存在;

  • 继承是为了消除重复配置。对于继承关系的父POM来说,它不知道有哪些子模块继承于它,但是子模块必须知道自己的父POM是什么。

第三节 私服

 

正式开发时,不同的项目组开发不同的工程。dao工程开发完毕,发布到私服。service从私服下载dao。

公司在自己的局域网内搭建自己的远程仓库服务器,称为私服,私服服务器即是公司内部的maven远程仓库,每个员工的电脑上安装maven软件并且连接私服服务器,员工将自己开发的项目打成jar并发布到私服服务器,其它项目组从私服服务器下载所依赖的构件(jar)。

 

 

3.1搭建私服环境

 

3.1.1下载nexus

Nexus 是Maven仓库管理器,通过nexus可以搭建maven仓库,同时nexus还提供强大的仓库管理功能,构件搜索功能等。下载地址:http://www.sonatype.org/nexus/archived/

3.1.2 安装nexus

cmd进入bin目录,执行nexus.bat install

3.1.3 卸载nexus

cmd进入nexus的bin目录,执行:nexus.bat uninstall

3.1.4 启动nexus

方法1:
    cmd进入bin目录,执行nexus.bat start
方法2:
    windows服务中直接启动nexus服务

如何验证启动成功:查看nexus的配置文件conf/nexus.properties

# Jetty section
application-port=8081   # nexus的访问端口配置
application-host=0.0.0.0    # nexus主机监听配置(不用修改)
nexus-webapp=${bundleBasedir}/nexus     # nexus工程目录
nexus-webapp-context-path=/nexus     # nexus的web访问路径
​
# Nexus section
nexus-work=${bundleBasedir}/../sonatype-work/nexus   # nexus仓库目录
runtime=${bundleBasedir}/nexus/WEB-INF  # nexus运行程序目录
​
访问:
http://localhost:8081/nexus/
​
使用Nexus 内置账户admin/admin123登陆:
点击右上角的Log in,输入账号和密码 登陆

私服仓库类型

nexus的仓库有4种类型:

1.  hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括releases和snapshot两部分,Releases公司内部发布版本仓库、 Snapshots 公司内部测试版本仓库
2.  proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。 
3.  group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
4.  virtual(虚拟):兼容Maven1 版本的jar或者插件 
nexus仓库默认在sonatype-work目录中:

3.3 将项目发布到私服

1. 把dao模块上传到私服(如果上述setting.xml文件中配置过再次检查是否配置完整正确):
    第一步:配置私服地址 
            1. 在settings.xml添加:
          <server>
                <id>releases</id>
                <username>admin</username>
                <password>admin123</password>
          </server>
          <server>
                <id>snapshots</id>
                <username>admin</username>
                <password>admin123</password>
          </server>
        2.在当前项目的pom.xml文件添加:
          <!-- 配置远程发布到私服,mvn deploy -->
              <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>
    第二步: 运行 deploy命令,不同开发工具会有差异。
    
    如果所有配置正确,发现上传私服失败,需要进入私服找到指定仓库 
         Repository--- Access Settings--Deployment Policy修改为允许发布

3.4 从私服下载jar包

3.service模块从私服下载dao包
        1.1、在settings.xml文件中
       <profile>
        <id>dev</id>
        <repositories>
            <repository>
                <id>nexus</id>
                <name>nexus</name>
                <url>http://localhost:8081/nexus/content/groups/public/</url>
                <releases>
                    <enabled>true</enabled>
                </releases>
                <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>
    2.激活私服
        <!-- 激活 -->
<activeProfiles>
  <activeProfile>dev</activeProfile>
</activeProfiles>
          
注意:
    私服一般安装在内网的其他服务器上,而不是本机上。因此上面的配置中localhost的部分在实际情况中应该修改为公司中内网的私服服务器地址。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值