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

相关推荐
爱睡觉1111 天前
从 6500ms 到 49ms:一次 Java 内存布局优化的实录
java
摇滚侠1 天前
IDEA 新建 Java 项目 学习 Java SE
java·学习·intellij-idea
kinl20181 天前
Softmax Linear Units (SoLU)
笔记
未秃头的程序猿1 天前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·后端·ai编程
程序员老乔1 天前
03-Spring-Security-JWT认证
java·后端·spring
程序员buddha1 天前
传统 Spring 框架,XML 配置 Bean 的方式
xml·java·spring
希望永不加班1 天前
SpringBoot 消费者并发控制:线程池配置
java·spring boot·后端·spring
叶~小兮1 天前
K8s常用组件学习笔记
笔记·学习·kubernetes
星恒随风1 天前
从零开始理解 ResNet(上):为什么 CNN 需要“残差连接”?
人工智能·笔记·神经网络·学习·cnn
z小猫不吃鱼1 天前
08 BERT 论文精读:双向 Transformer 如何学习语言表示?
学习·bert·transformer