Maven项目依赖管理——进阶

Maven依赖范围管理

  • 依赖范围即引入jar包的作用域,引入时使用<scope>指定
    m1
  • 依赖的作用域分为以上五种,作用范围如下:
    m2
  • 具体设置看包的使用情况,例如junit就是test范围
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    

依赖传递

  • 父项目可以通过依赖传递将自身的依赖传给子项目,注意以下三项设置:
    • 打包方式:<packaging>pom</packaging>
    • 依赖管理:可以通过变量引入
    <!--project下-->
    <properties>
    	// 自定义变量
    	<spring.version>5.2.8-RELEASE</spring.version>
    </properties>
    
    <dependency>
    	坐标
    	<version>${spring.version}</version>
    </dependency>
    
    • 依赖容器:使用<dependencyManagement>,父项目统一管理,子项目中使用时才会引入
    <dependencyManagement>
    	<dependencies>
    		<dependency>
    			...
    		<dependency>
    	</dependencies>
    </dependencyManagement>
    
  • 子项目继承
    • 使用<parent>标签
    <parent>
    	<!--父项目坐标-->
    	<!--所使用的父项目配置文件位置-->
    	<relativePath>../xxx/pom.xml</relativePath>
    </parent>
    
    • 子项目会继承父项目的groupId,所以子项目无需单独定义
    • 子项目会自动继承并使用父项目的普通依赖<dependencies>,也可以在引用依赖时不写版本号,使用父项目依赖容器</dependencyManagement>中管理的依赖(前提是父项目已经下载好依赖)

项目聚合

  • 借助IDEA工具,可以在项目内部创建module,作为项目的子项目
  • 子项目在配置中用上一节所说的<parent>继承父项目,同时,在父项目配置文件中也会通过<modules>聚合各个子项目(默认)
    <modules>
    	<module>子项目名称1</module>
    	<module>子项目名称2</module>
    </modules>
    
  • 聚合+继承的方式提高了项目操作的效率,使项目的整体性较高,便于集成和维护,也提高了依赖的复用性

插件管理

  • 项目的依赖管理、生命周期等都是通过Maven的插件实现的,引入插件就在入门篇介绍的<plugin>
  • 插件可以让我们设置Maven命令,以dependency插件为例
    • 前面说到的依赖传递,用到的<dependencyManagement>标签等都需要这个插件analyzes
    • 插件可以在Maven的官网找到
    • 引入:
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.2.0</version>
    <plugin>
    
  • 接下来,添加Maven命令,可以查看依赖树
    m3
  • IDEA也集成了查看依赖树的选项,在pom文件中,右键选择Diagrams
    m4

私有服务器

  • 在基础篇中提到了使用私有服务器管理内部依赖
  • 现在比较流行的是使用Nexus构建私有服务器,访问官网下载工具,这里用Windows版
  • 搭建私有服务器:
    • 个人使用,这里就将私有服务器放在本地,即localhost,当然一般是放在线上服务器
    • 解压出来连个文件:nexus-3.xxx和sonatype-work
    • 启动私有服务器:进入nexus-3.xxx/bin文件夹,cmd启动:nexus /run
    • 启动后在浏览器即可进入:http://localhost:8081
    • 根据提示输入用户名和密码登录,并启用远程访问Enable anonymous access
  • 创建私有仓库
    • 默认有三种类型的仓库
      m5
      • proxy主要用于代理远程中央仓库
      • group主要用于仓库的分组管理
      • hosted主要用于发布本地开发的项目,再做后面的部署工作
    • 在Server administration中选择Repository并创建
      m6
    • 配置一个远程代理仓库试试:
      m7
      • 点击后面的copy就可以得到URL地址
    • 再来一个发布本地项目的仓库
      m8
    • 在创建一个发布本地快照版本项目的仓库备孕,OK!
  • 项目中配置使用私有仓库
    • 父项目中使用<repositories>配置使用私有远程仓库
      <!--project下-->
      <repositories>
       	<repository>
              <!--配置私有仓库-->
              <id>nexus_proxy</id>
              <name>my nexus</name>
              <url>http://localhost:8081/repository/nexus_maven_proxy/</url>
              <!--支持稳定版和快照版的仓库-->
              <releases>
                  <enabled>true</enabled>
              </releases>
              <snapshots>
                  <enabled>true</enabled>
              </snapshots>
      	</repository>
      </repositories>
      
    • 同级,配置本地快照和稳定版的发布地址:
      <distributionManagement>
          <repository>
              <id>hosted_release</id>
              <name>Nexus Release</name>
              <url>http://localhost:8081/repository/nexus_maven_hosted/</url>
          </repository>
          <snapshotRepository>
              <id>hosted_snapshot</id>
              <name>Nexus Snapshot</name>
              <url>http://localhost:8081/repository/maven_hosted_snapshot/</url>
          </snapshotRepository>
      </distributionManagement>
      
    • 下载远程jar包测试:还是在父项目,引入依赖
      <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
      <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>5.4.32.Final</version>
      </dependency>
      
      • 我们会发现使用本地仓库下载,在nexus浏览也存在了相关依赖
    • 发布项目
      <server>
        <id>hosted_snapshot</id>
        <username>admin</username>
        <password>xxx</password>
      </server>
      
      • 因为要写入到仓库,需要在settings.xml中增加以上仓库的登录信息,这个id就是pom中配置的本地snapshot仓库的id
      • 使用Maven命令发布:depoly,成功后浏览发现发布在了本地SNAPSHOT仓库,这是由项目pom中的<version>1.0-SNAPSHOT</version>决定
      • 如果我们改为<version2.0-RELEASE</version>,就会发布到RELEASE, 当然,要增加<server>配置

Java Web项目

  • 不使用archetype,手动构建一下,了解其过程
  • 也定义一下依赖的范围

Maven依赖冲突的问题

  • 项目引入依赖时可能由于不同版本的依赖,或者是依赖传递导致冲突,可以在配置时使用<exclusions>标签解决
  • 目的都是让依赖唯一的存在!
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞士_R

修行不易...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值