美文网首页
Maven 基础

Maven 基础

作者: Tinyspot | 来源:发表于2022-08-23 09:15 被阅读0次

1. Maven

  • Maven 是一个 Java 项目管理和构建工具
  • 约定优于配置
  • POM(Project ObjectModel,项目对象模型)
  • Maven 生命周期
  • Maven 依赖管理
  • Maven 插件

1.1 Maven 坐标

  • groupId: 隶属的实际项目-公司名
  • artifactId: Unique ID,项目里的一个模块
  • version: 1.0-SNAPSHOT
  • groupId, artifactId, version 唯一定位一个项目
  • groupId:artifactId:versioncom.mycompany.helloworld:helloworld:1.0-SNAPSHOT
  • 在 Maven 中声明一个依赖项可以自动下载并导入 classpath

1.2 生命周期

  • Lifecycle, Phase, Goal
  • Maven 的生命周期(lifecyle)由一系列阶段(phase)构成,每个阶段(phase)会挂接一到多个 Goal
  • 执行一个 phase 实际上是执行了一系列 phase, 直到该 phase 为止
  • 每执行一个Phase, 都会执行该 Phase 绑定的若干 Goal
  • Goal 是最小执行任务单元
  • clean > validate > compile > test > package > verify > install > deploy
  • 常用命令
    • mvn package 不会把依赖的包打到项目中
    • mvn install 安装到本地仓库
Phase 对应的Goal
compile compiler:compile
test compiler:testCompile
surefile:test

1.3 Maven项目的标准结构

/src/main/java
/src/main/resources
/src/test/java
/src/test/java/resources
/target
/target/classes
/pom.xml

2. Maven 依赖管理

2.1 依赖传递

Maven 的依赖传递机制:POM 中只需定义其直接依赖,不必定义任何间接依赖

2.2 Maven 依赖范围

scope 编译 测试 运行 打包(jar) 适用场景
compile Y Y Y jar default
provided Y Y 编译时需要依赖 servlet-api.jar,但是在运行时不需要该 jar 包
runtime Y jar JDBC驱动不参与编译,但在运行时需要具体的第三方实现的 jar
test Y
system Y Y 作用范围与 provided 一致,从本地 Jar 中获取依赖

2.3 可选依赖

  • optional 表示可选依赖,用来控制当前依赖是否向下传递成为间接依赖;
  • optional 默认值为 false,表示可以向下传递;
  • optional:true 不会传递依赖,子项目中将不会包含这个依赖
<dependency>
    <optional>true</optional>
</dependency>

2.4 排除依赖 VS 可选依赖

  • 都能排出依赖,但两者实现机制不一样
  • 不同点
    • 排除依赖是控制当前项目是否使用其直接依赖传递下来的接间依赖;
    • 可选依赖是控制当前项目的依赖是否向下传递;
    • 可选依赖的优先级高于排除依赖;
    • 若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置,那么可选依赖的取值必须为 false,否则排除依赖无法生效。

3. 依赖冲突与解决

  1. 依赖调解原则
  • 先声明者优先
  • 引入路径短者优先
  1. 排除依赖
  2. 锁定版本

3.1 依赖调解原则

  • 第一声明者优先原则
    • 根据坐标导入顺序,以先声明的为准
  • 路径近者优先原则
    • 直接依赖优先于间接依赖
    • 例如:A 依赖 B,如果直接把 B 写入项目的 pom.xml 中,此时 B 要比其它依赖传递过来的路径要近

3.2 依赖排除

  • 使用 exclusions 排包
<exclusions>
    <exclusion>
    <groupId></groupId>
    <artifactId></artifactId>
    </exclusion>
</exclusions>

3.3 版本锁定

采用直接锁定版本的方法确定依赖 jar 包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径。以锁定的版本为准添加到工程中

版本锁定的使用方式:
第一步:在 <dependencyManagement> 中锁定依赖的版本
第二步:在 <dependencies> 中声明需要导入的 maven 坐标

使用 <dependencyManagement> 并不会将 Jar 导入到项目中,只是对这些 jar 的版本进行锁定,然后项目中通过 <dependencies> 来声明要使用的 jar

4. Maven 仓库

本地仓库从中央仓库下载依赖

4.1 Maven 私服

本地仓库 --> 私有仓库 --> 中央仓库
私有仓库是在公司局域网内,本地仓库从私有仓库下载依赖,若要下载的依赖私有仓库没有,则私有仓库会从中央仓库下载

nexus私服搭建
官网地址
下载地址

5. settings.xml

<localRepository>F:\JavaCodes\repository</localRepository>
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

相关文章

网友评论

      本文标题:Maven 基础

      本文链接:https://www.haomeiwen.com/subject/vvvhirtx.html