美文网首页
maven项目依赖管理

maven项目依赖管理

作者: jinjin1009 | 来源:发表于2021-10-19 16:46 被阅读0次

问题:我们项目中依赖第三方的jar包,或者是依赖a包,但是a包又依赖b包

解决办法:maven的作用就是解决依赖管理,我们在项目中声明了a包,maven会自动导入其所依赖的b包等等,maven会自动解析并判断最终需要的所有依赖包

依赖关系:

scope 说明 示例
compile 编译时需要用到的该jar包 commons-logging
test 编译Test时用到的该jar包 junit
runtime 编译时不需要,但运行时需要用到 mysql
provided 编译时需要用到,但运行时由JDK或者某个服务器提供 servlet-api

其中compile 是最常用的,maven会将这种类型的依赖直接放到classpath
test 依赖表示尽在测试时使用,正常运行时不使用,最常用的test 依赖就是juint

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.3.2</version>
    <scope>test</scope>
</dependency>

runtime依赖表示编译时不需要,但运行时需要。最典型的runtime依赖是JDBC驱动,例如MySQL驱动

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.48</version>
    <scope>runtime</scope>
</dependency>

provided依赖表示编译时需要,但运行时不需要。最典型的provided依赖是Servlet API,编译的时候需要,但是运行时,Servlet服务器内置了相关的jar,所以运行期不需要

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

Maven如何知道从何处下载所需要的依赖包?也就是相关的jar包?答案是Maven维护了一个中央仓库,所有第三方库将自身的jar以及相关信息上传至中央仓库,Maven就可以从中央仓库把所需的依赖下载到本地

Maven并不会每次都从中央仓库下载jar包,一个jar包一旦被下载过,就会被Maven自动缓存到本地目录,所以,除了第一次编译时因为下载需要时间会比较慢,后续因为本地有缓存,并不会重复下载相同的jar包

唯一ID
对于某个依赖,Maven只需要三个变量就可以唯一确定某个jar包:
groupId:属于组织的名称,类似Java的包名
artifactId:该jar包自身的名称,类似Java的类名
version:该jar包的版本
通过上述3个变量,即可唯一确定某个jar包,Maven通过对jar包进行PGP签名确保任何一个jar包一经发布就无法修改,修改已发布的jar包唯一办法就是发布一个新版本
因此,某个jar包一旦被Maven下载过,即可永久地安全缓存在本地
注:只有以-SNAPSHOT结尾的版本号会被Maven视为开发版本,开发版本每次都会重复下载,这种SNAPSHOT版本只能用于内部私有的Maven repo,公开发布的版本不允许出现SNAPSHOT
Maven镜像
除了可以从Maven的中央仓库下载外,还可以从Maven的镜像仓库下载。如果访问Maven的中央仓库非常慢,我们可以选择一个速度较快的Maven的镜像仓库。Maven镜像仓库定期从中央仓库同步:
slow ┌───────────────────┐
┌─────────────>│Maven Central Repo.│
│ └───────────────────┘
│ │
│ │sync
│ ▼
┌───────┐ fast ┌───────────────────┐
│ User │─────────>│Maven Mirror Repo. │
└───────┘ └───────────────────┘
中国区用户可以使用阿里云提供的Maven镜像仓库。使用Maven镜像仓库需要一个配置,在用户主目录下进入.m2目录,创建一个settings.xml配置文件,内容如下

<settings>
    <mirrors>
        <mirror>
            <id>aliyun</id>
            <name>aliyun</name>
            <mirrorOf>central</mirrorOf>
            <!-- 国内推荐阿里云的Maven镜像 -->
            <url>https://maven.aliyun.com/repository/central</url>
        </mirror>
    </mirrors>
</settings>

配置镜像仓库后,Maven的下载速度就会非常快
搜索第三方组件
我们要引用一个第三方组件,如何获取对应的groupIdartifactIdversion?
方法是通过 search.maven.org 进行关键字搜索
命令行编译
在命令中,进入到pom.xml所在目录,输入如下命令

mvn clean package

如果没有问题的话,会在target目录下获取编译自动打包的jar

pom.xml文件详解:https://juejin.cn/post/6844903824524574734#heading-17

相关文章

  • Java构建工具Ant+Ivy, Maven, Gradle

    Maven管理项目依赖及构建 Maven 管理项目依赖及构建的工具。Maven主要做了两件事:统一开发规范与工具统...

  • 概述

    maven(几乎所有java项目都使用) maven功能:项目构建、依赖管理maven安装:https://mav...

  • Maven你必须要知道的知识

    Maven基础知识: Maven是一个项目管理工具 依赖管理:Maven对项目jar的管理过程(传统项目中jar是...

  • Maven实战之初识Maven

    Maven实战之初识Maven Maven的简单介绍 作用:Maven主要用于项目的构建,管理项目的依赖以及项目的...

  • 构建工具(一):Maven介绍及安装

    简述了什么是Maven,Maven的几个作用,项目构建、依赖管理、项目管理等,以及怎样安装配置Maven环境。 M...

  • maven学习笔记(总)

    maven 一、maven基础 1. maven的核心 依赖管理:对jar包管理的过程 项目构建:项目在编码完成后...

  • maven学习 Day1 2018-11-19

    maven 一、maven基础 1. maven的核心 依赖管理:对jar包管理的过程 项目构建:项目在编码完成后...

  • SpringBoot自动配置原理

    1. 依赖管理 SpringBoot使用父项目来进行依赖管理 , Maven的父项目通常用来进行依赖管理,只要父项...

  • Maven入坑(一) Hello world

    Maven 专题 Maven 是什么 Maven 是 Java平台的构建管理,依赖管理和项目信息管理的工具. 相当...

  • Maven配置(pom.xml)

    Maven 教程Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。 1. maven中的坐...

网友评论

      本文标题:maven项目依赖管理

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