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

相关推荐
三流架构师3 小时前
事业单位资源合集(第二辑)
经验分享
想学习java初学者4 小时前
SpringBoot整合Vertx-Mqtt多租户(优化版)
java·spring boot·后端
AC赳赳老秦4 小时前
政企内网落地:OpenClaw 离线环境深度适配方案,无外网场景下本地化模型对接与全功能使用
java·大数据·运维·python·自动化·deepseek·openclaw
weixin_449173654 小时前
在 Java 中,‌线程安全的 List‌ 主要有以下几种实现方式,它们的效率取决于具体的使用场景(尤其是读写比例):
java·线程安全的list
砚底藏山河4 小时前
股票数据API接口:如何获取股票历历史分时KDJ数据
java·python·maven
MegaDataFlowers6 小时前
运行若依项目
java
HalvmånEver6 小时前
MySQL的索引
android·linux·数据库·学习·mysql
lulu12165440786 小时前
JetBrains IDE 终极AI编程方案:CC GUI插件让Claude Code和Codex丝滑运行
java·ide·人工智能·python·ai编程
金色光环6 小时前
【DSP学习】DSP28335 点亮LED
嵌入式硬件·学习·dsp开发
('-')6 小时前
八股复习2:Java Array list和Linked list
java·开发语言