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

相关推荐
zopple1 天前
四大编程语言对比:PHP、Python、Java与易语言
java·python·php
逍遥德1 天前
Java 锁(线程间)和数据库锁(事务间)对比详解
java·数据库·sql·高并发·锁机制
gwjcloud1 天前
Docker详解
java·docker·容器
夜瞬1 天前
NLP学习笔记02:文本表示方法——从词袋模型到 BERT
笔记·学习·自然语言处理
河阿里1 天前
Java-JWT令牌技术深度指南
java·开发语言
xuhaoyu_cpp_java1 天前
MySql学习(二)
经验分享·笔记·学习·mysql
老花眼猫1 天前
逆时针旋转坐标推导公式
经验分享
你叶不叶1 天前
sap rap 的技术开发自己的学习路径
学习
WiChP1 天前
【V0.1B6】从零开始的2D游戏引擎开发之路
java·log4j·游戏引擎
厚皮龙1 天前
VAE 与世界模型学习总结
学习