• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
自由的代价是孤独丶
博客园    首页    新随笔    联系   管理    订阅  订阅

maven知识回顾

1. maven仓库类型

maven存储库有三种类型:

  1. 本地
    本地仓库存储的是你项目的所有依赖,当你运行maven构建时,会自动将所有依赖项下载到本地仓库中,有助于避免每次构建项目时引用远程仓库上的依赖项。
  2. 中央
    中央仓库由maven社区提供,它包含了大量常用的库。当你本地仓库中找不到你的依赖时,就会去中央仓库搜索下载。
  3. 远程
    远程仓库是在中央仓库也找不到时,就会去远程仓库中查找依赖。它是由开发人员自己定制的存储库。
    image


maven存储库的搜索优先级:
当我们执行maven构建命令时,maven按照如下顺序查找依赖库。

本地 ——> 中央仓库 ————> 远程仓库







2. 项目的生命周期

image







3. 依赖范围

maven的依赖范围是用来决定依赖在项目的不同阶段(编译、测试、打包、运行等)以及不同模块之间的可见性和传递性。

  • 编译:main/java及其子包下能引用他的包。就是我们写代码时能使用相关对象。
  • 测试:main/test及其子包下能引用他的包。
  • 打包:就是这个程序打包时需要这个依赖。
  • 运行:就是这个程序打包后,运行时需要这个依赖。


常见依赖范围:

  1. compile(默认)
    范围:在编译、测试、打包、运行时可用。
    传递性:对依赖的子模块可以传递。

  1. test
    范围:在测试时可用。常见场景:JUnit、Mockito、测试工具、测试数据生成器等。
    传递性:对依赖的子模块不可传递。

  1. provided
    范围:仅在编译、测试时可用。但在运行时由外部容器提供,不会打包到产物中。servlet-api、是运行在 JEE/Servlet 容器中的库,容器自带。
    传递性:对依赖的子模块不可传递。

  1. system
    范围:类似 provided,但你需要显式指定一个本地系统路径来加载依赖,而不是通过 Maven 的仓库解析。
    传递性:对依赖的子模块不可传递。
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>special-lib</artifactId>
      <version>1.0.0</version>
      <scope>system</scope>
      <systemPath>${project.basedir}/lib/special-lib.jar</systemPath>
    </dependency>

  1. runtime
    范围:仅在运行时时可以。
    传递性:对依赖的子模块可以传递。常见场景:仅在应用运行时才用到的实现、数据库驱动等(如 jdbc 驱动、某些代理库)。

  1. import
    范围:仅在 dependencyManagement 的 imports 机制中使用,用来引入一个具有 type pom 的依赖,以便将其定义的依赖范围合并到当前 POM 的 dependencyManagement依赖集合中。
    典型场景:从父级父 POM 或 BOM(Bill of Materials)中导入一组依赖版本信息。
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-framework-bom</artifactId>
          <version>5.3.28</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>

    <!-- 随后直接按需声明依赖,版本由 BOM 管理 -->
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
      </dependency>
    </dependencies>






4. 依赖的排除

示例1:在依赖 A 下排除某个传递依赖 B

<dependencies>
  <dependency>
    <groupId>com.example</groupId>
    <artifactId>demo-a</artifactId>
    <version>1.2.3</version>
    <exclusions>
      <exclusion>
        <groupId>com.example</groupId>  
        <artifactId>demo-b</artifactId> 
      </exclusion>
    </exclusions>
  </dependency>
</dependencies>






5. maven聚合

为什么要聚合:

    一个项目拆分成了多个工程,切换起来开发太麻烦。
    编译时,不需要每个模块去编译,可以直接点击到父工程点编译即可。
    方便管理依赖版本。

聚合项目的定级父工程需要怎么做?

    1. 设置     <packaging>pom</packaging>    默认打包方式是jar,需要改成pom。
       意思是:这是一个“聚合(POM)/父项目”或“没有实际可打包产物的项目”。

    2. 将子工程管理起来  <modules><module>child-a</module></modules>
       意思是:在执行 mvn 的构建时,父 POM 会触发对所有注册的子模块的构建,确保整体一致性与依赖关系的正确解析。

    3. 子工程需要设置直接的父项目。
posted @ 2025-12-24 18:06  &emsp;不将就鸭  阅读(6)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3