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(快照版)仓库策略。

相关推荐
caishenzhibiao10 分钟前
顺势捕猎者副图 同花顺期货通指标
java·c语言·c#
编程圈子14 分钟前
电机驱动开发学习21. R3_2 双相扇区电流采样与第三相重构
驱动开发·学习·重构
前端之虎陈随易38 分钟前
bm2,MoonBit实现的pm2替代品
经验分享
chnyi6_ya39 分钟前
论文阅读笔记 | The Script is All You Need: 对话到电影级视频生成的 Agentic 框架
论文阅读·笔记
笨蛋不要掉眼泪40 分钟前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
思陌Ai算法定制1 小时前
SpAgents:多智能体协同诊断系统破解中轴型脊柱关节炎6.7年诊断延迟,敏感性达94%比肩资深风湿科专家
经验分享
听雨入夜1 小时前
CMake构建学习笔记-libxml库的构建
笔记·学习
Mark_ZP1 小时前
【锁6】AQS (AbstractQueuedSynchronizer) 核心原理详解
java
AI砖家1 小时前
多商户多租户系统架构设计文档(Java版)
java·开发语言·系统架构·多租户·多商户
iiiiii111 小时前
【论文阅读笔记】Reparameterization Proximal Policy Optimization (RPO):将PPO的稳定性引入可微分强化学习
论文阅读·人工智能·笔记·深度学习·机器学习·机器人·具身智能