Maven学习(二)

八、依赖管理详解

坐标组成

Maven坐标通过以下元素唯一标识构件:

XML 复制代码
<groupId>com.example</groupId>  <!-- 组织标识 -->
<artifactId>my-app</artifactId>  <!-- 项目标识 -->
<version>1.0-SNAPSHOT</version>  <!-- 版本号 -->
<packaging>jar</packaging>       <!-- 打包类型(默认jar) -->

依赖范围(Scope)

  • compile:默认范围,参与编译、测试、运行。
  • test:仅测试阶段有效(如JUnit)。
  • provided:编译和测试有效,运行时由容器提供(如Servlet API)。
  • runtime:测试和运行有效,编译时不需要(如JDBC驱动)。

依赖传递与排除

  • 传递依赖:A依赖B,B依赖C,则A默认传递依赖C。
  • 排除依赖:使用<exclusions>阻断特定传递依赖。
  • 可选依赖:<optional>true</optional>标记后,依赖不会传递。

九、生命周期与插件

三套生命周期

  1. clean :清理项目(mvn clean)。
  2. default :核心构建流程(compiletestpackageinstall)。
  3. site:生成项目文档和报告。

常用插件绑定

  • maven-compiler-plugin:指定JDK版本编译。
  • maven-surefire-plugin:执行单元测试。
  • maven-jar-plugin:生成JAR包。
  • maven-install-plugin:安装构件到本地仓库。

十、继承与聚合

继承(Inheritance)

  • 父模块定义公共配置(如依赖版本、插件):

    XML 复制代码
    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
  • 子模块通过<parent>引用父模块,可省略版本号。

聚合(Aggregation)

  • 父模块通过<modules>聚合子模块:

    XML 复制代码
    <modules>
      <module>child-module1</module>
      <module>child-module2</module>
    </modules>
  • 执行父模块命令会按顺序构建所有子模块。

依赖管理区别

  • dependencies:子模块自动继承所有依赖。
  • dependencyManagement:仅管理版本,子模块需显式声明依赖。

十一、Maven私服(Nexus)

私服作用

  • 缓存中央仓库构件,加速内部构建。
  • 托管内部私有构件(如公司内部库)。
  • 控制依赖访问权限,提升安全性。

发布到私服

  1. settings.xml配置认证:

    XML 复制代码
    <server>
      <id>nexus-releases</id>
      <username>admin</username>
      <password>password</password>
    </server>
  2. pom.xml配置仓库地址:

    XML 复制代码
    <distributionManagement>
      <repository>
        <id>nexus-releases</id>
        <url>http://nexus.example.com/repository/maven-releases/</url>
      </repository>
    </distributionManagement>
  3. 执行mvn deploy发布构件。

从私服下载

  1. settings.xml配置镜像或Profile:

    XML 复制代码
    <mirror>
      <id>nexus</id>
      <url>http://nexus.example.com/repository/maven-public/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  2. 区分releases(稳定版)和snapshots(快照版)仓库策略。

相关推荐
我才是银古5 小时前
构建 Java GIS 工具库:从碎片化 API 到统一抽象的设计实践
java·gis·geotools·gdal·esri
敲代码的嘎仔6 小时前
实习日志day6--实习日志day6--title命名规范化&businessType纠正&补充缺失的@Log注解&报警与通信模块补充&产出阶段总结文档
java·开发语言·人工智能·git·python·实习·大二
Piko6146 小时前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
编程(变成)小辣鸡6 小时前
Spring事务失效场景
java·后端·spring
AOwhisky7 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
心中有国也有家7 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家7 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Zeeland7 小时前
构建护城河:自学习 Agent
学习
极客先躯7 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
BomanGe17 小时前
NSK W1501FA高速精密滚珠丝杠技术手册
数据库·经验分享·规格说明书