Maven系列第4篇:仓库详解

news2024/9/20 17:44:15

maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能。

这是maven系列第4篇。

整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。

环境

  1. maven3.6.1

  2. 开发工具idea

  3. jdk1.8

本篇内容

  1. maven是如何找到我们依赖的jar的

  2. 什么是仓库

  3. 仓库的分类

  4. 各种类型仓库详解

  5. maven中远程仓库配置详解

  6. 关于构件版本问题说明

  7. 构件文件的布局

在maven出现之前,项目中用到第三方jar包时,我们会把这些依赖的jar包拷贝到项目的lib目录中,如果我们开发了多个项目,这些jar包在各个项目目录中都有一份拷贝,这存在的一些问题:

  1. 不方便jar包的管理,比如jar的升级、删除等操作

  2. 对磁盘空间的重复占用

主要还是不方便jar包的管理,maven很好的解决了这些问题,我们来看看maven管理依赖jar包的效果。

我来提几个问题,带着问题来看本篇内容

  1. maven是如何将依赖的jar引入项目的?

  2. maven项目中依赖的jar是从哪里获取的?

  3. 我们如何掌控这些jar的获取方式?

  4. maven是如何组织管理构件的?

先来看一下maven项目案例

创建一个maven项目,打开idea,点击File->New->Project,选择Maven,如下:

图片

点击Next,输入项目坐标信息,如下:

图片

点击Next,输入Project name 为maven-chat03,如下:

图片

点击Finish,创建成功,如下:

图片

我们看一下这个项目占用的磁盘大小:

图片

占用 29.9KB,下面我们在pom.xml中引入fastjson的依赖:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.62</version>
    </dependency>
</dependencies>

创建一个Demo.java,如下

package com.javacode2018;

import com.alibaba.fastjson.JSON;

public class Demo1 {
    public static void main(String[] args) {
        System.out.println(JSON.class);
    }
}

运行一下Demo1,输出:

class com.alibaba.fastjson.JSON

说明fastjson在项目中起效了,我们再来看一下项目的大小

图片

上面一次是39kb,这次是49kb,大小增加了10KB,我们来看一下fastjson.jar的大小

图片

这个jar包643kb,但是项目才49kb,这说明了什么?

说明了项目目录中没有包含这个jar包,只是对这个jar包做了一个引用。

如果系统中有很多项目,都采用同一个maven来引用依赖的jar包,那么这些jar只会在磁盘中存储一份,这些jar可以被其他所有的maven项目共享,项目只需要在pom.xml中通过maven坐标的方式来对这些jar进行引用,而不用再拷贝至项目中,若对jar包进行删除、升级版本直接修改pom.xml就可以了,非常方便。

结论:maven采用引用的方式将依赖的jar引入进来,不对真实的jar进行拷贝,但是打包的时候,运行需要用到的jar都会被拷贝到安装包中。

Maven寻找依赖的jar

我们可以看到,当我们项目中需要使用某些jar时,只需要将这些jar的maven坐标添加到pom.xml中就可以了,这背后maven是如何找到这些jar的呢?

maven官方为我们提供了一个站点,这个站点中存放了很多第三方常用的构建(jar、war、zip、pom等等),当我们需要使用这些构件时,只需将其坐标加入到pom.xml中,此时maven会自动将这些构建下载到本地一个目录,然后进行自动引用。

上面提到的maven站点,我们叫做maven中央仓库,本地目录叫做本地仓库。

默认情况下,当项目中引入依赖的jar包时,maven先在本地仓库检索jar,若本地仓库没有,maven再去从中央仓库寻找,然后从中央仓库中将依赖的构件下载到本地仓库,然后才可以使用,如果2个地方都没有,maven会报错。

下面我们来看看什么是仓库?

Maven 仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

在 Maven 中,仓库是一个位置,这个位置是用来存放各种第三方构件的,所有maven项目可以共享这个仓库中的构件。

Maven 仓库能帮助我们管理构件(主要是jar包),它就是放置所有jar文件(jar、war、zip、pom等等)的地方。

仓库的分类

主要分为2大类:

  1. 本地仓库

  2. 远程仓库

而远程仓库又分为:中央仓库、私服、其他公共远程仓库

当maven根据坐标寻找构件的时候,会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地不存在,maven会去远程仓库中查找,如果找到了,会将其下载到本地仓库中进行使用,如果本地和远程仓库都没有找到构件,maven会报错,构件只有在本地仓库中存在了,才能够被maven项目使用。

本地仓库

默认情况下,maven本地仓库默认地址是~/.m2/respository目录,这个默认我们也可以在~/.m2/settings.xml文件中进行修改:

<localRepository>本地仓库地址</localRepository>

当我们使用maven的时候,依赖的构件都会从远程仓库下载到本地仓库目录中。

Maven 的本地仓库,在安装 Maven 后并不会创建,当我们执行第一条 maven 命令的时候本地仓库才会创建,此时会从远程仓库下载构建到本地仓库给maven项目使用。

需要我们注意,默认情况下,~/.m2/settings.xml这个文件是不存在的(~是指用户目录,前面的文章中有介绍过,此处不再做说明),我们需要从Maven安装目录中拷贝conf/settings.xml文件,将M2_HOME/conf/settings.xml拷贝到~/.m2目录中,然后对~/.m2/settings.xml进行编辑,M2_HOME/config/settings.xml这个文件其实也是可以使用的,不过我们不建议直接使用,这个修改可能会影响其他所有使用者,还有修改了这个文件,也不利于以后maven的升级,如果我们使用~/.m2/settings.xml,而maven安装目录中的配置不动,升级的时候只需要替换一下安装包就好了,所以我们建议将maven安装目录中的settings.xml拷贝到~/.m2中进行编辑,这个是用户级别的,只会影响当前用户。

远程仓库

最开始我们使用maven的时候,本地仓库中的构件是空的,此时maven必须要提供一种功能,要能够从外部获取这些构件,这个外部就是所谓的远程仓库,远程仓库可以有多个,当本地仓库找不到构件时,可以去远程仓库找,然后放置到本地仓库中进行使用。

中央仓库

由于maven刚安装好的时候,本地仓库是空的,此时我们什么都没有配置,去执行maven命令的时候,我们会看到maven默认执行了一些下载操作,这个下载地址就是中央仓库的地址,这个地址是maven社区为我们提供的,是maven内置的一个默认的远程仓库地址,不需要用户去配置。

这个地址在maven安装包的什么地方呢?

我们使用的是3.6.1,在下面这个位置

apache-maven-3.6.1\lib\maven-model-builder-3.6.1.jar\org\apache\maven\model\pom-4.0.0.xml

在pom-4.0.0.xml中,如下:

<repositories>
    <repository>
      <id>central</id>
      <name>Central Repository</name>
      <url>https://repo.maven.apache.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
    </repository>
  </repositories>

就是:

https://repo.maven.apache.org/maven2

可以去访问一下,如下:

图片

上面站点中包含了很多常用的构建。

中央仓库有几个特点:

  1. 中央仓库是由maven官方社区提供给大家使用的

  2. 不需要我们手动去配置,maven内部集成好了

  3. 使用中央仓库时,机器必须是联网状态,需要可以访问中央仓库的地址

中央仓库还为我们提供了一个检索构件的站点:

https://search.maven.org/

图片

非常方便我们查找需要依赖的构件,大家可以去体验一下。

中央仓库中包含了这个世界上大多数流行的开源java构件,基本上所有的jave开发者都会使用这个仓库,一般我们需要的第三方构件在这里都可以找到。

私服

私服也是远程仓库中的一种,我们为什么需要私服呢?

如果我们一个团队中有几百个人在开发一些项目,都是采用maven的方式来组织项目,那么我们每个人都需要从远程仓库中把需要依赖的构件下载到本地仓库,这对公司的网络要求也比较高,为了节省这个宽带和加快下载速度,我们在公司内部局域网内部可以架设一台服务器,这台服务器起到一个代理的作用,公司里面的所有开发者去访问这个服务器,这台服务器将需要的构建返回给我们,如果这台服务器中也没有我们需要的构建,那么这个代理服务器会去远程仓库中查找,然后将其先下载到代理服务器中,然后再返回给开发者本地的仓库。

还有公司内部有很多项目之间会相互依赖,你可能是架构组的,你需要开发一些jar包给其他组使用,此时,我们可以将自己jar发布到私服中给其他同事使用,如果没有私服,可能需要我们手动发给别人或者上传到共享机器中,不过管理起来不是很方便。

总体上来说私服有以下好处:

  1. 加速maven构件的下载速度

  2. 节省宽带

  3. 方便部署自己的构件以供他人使用

  4. 提高maven的稳定性,中央仓库需要本机能够访问外网,而如果采用私服的方式,只需要本机可以访问内网私服就可以了

关于私服,后面会专门有一篇文章会做详细介绍。

其他远程仓库

中央仓库是在国外的,访问速度不是特别快,所以有很多比较大的公司做了一些好事,自己搭建了一些maven仓库服务器,公开出来给其他开发者使用,比如像阿里、网易等等,他们对外提供了一些maven仓库给全球开发者使用,在国内的访问速度相对于maven中央仓库来说还是快了不少。

还有一些公司比较牛,只在自己公开的仓库中发布构件,这种情况如果要使用他们的构件时,需要去访问他们提供的远程仓库地址。

构建文件的布局

我们来看一下构件在仓库的文件结构中是如何组成的?

这块我们以本地仓库来做说明,远程仓库中组织构件的方式和本地仓库是一样的,以fastjson在本地仓库中的信息为例来做说明,如下:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

上面是fastjson 1.2.62这个jar,我们看一下这个jar在本地仓库中的位置,如下图

图片

fastjson这个jar的地址是:

~\.m2\repository\com\alibaba\fastjson\1.2.62\fastjson-1.2.62.jar

~\.m2\repository\是仓库的目录,所有本地构件都位于该目录中,我们主要看一下后面的部分,是怎么构成的。

构件所在目录的构成如下:

groupId+"."+artifactId+"."+版本号

通过上面获取一个字符串,字符串由groupId、artifactId、版本号之间用.连接,然后将这个字符串中的.替换为文件目录分隔符然后创建多级目录。

而构件文件名称的组成如下:

[artifactId][-verion][-classifier].[type]

上面的fastjson-1.2.62.jar信息如下:

artifactId为fastjson
version为1.2.62
classifier为空
type没有指定,默认为jar

所以构件文件名称为fastjson-1.2.62.jar

关于构件版本问题

平时我们开发项目的时候,打包测试,或者将自己开发的构建提供给他人使用时,中间我们反反复复的打包测试,会给使用方提供很多不稳定的版本,最终经过同事和测试反复验证修改,我们会发布一个稳定的版本。

在发布稳定版本之前,会有很多个不稳定的测试版本,我们版本我们称为快照版本,用SNAPSHOT表示,回头去看看本文开头搭建的maven-cha03的pom.xml文件,默认是快照版本的,如下:

<version>1.0-SNAPSHOT</version>

version以-SNAPSHOT结尾的,表示这是一个不稳定的版本,这个版本我们最好只在公司内部测试的时候使用,最终发布的时候,我们需要将-SNAPSHOT去掉,然后发布一个稳定的版本,表示这个版本是稳定的,可以直接使用,这种稳定的版本我们叫做release版本。

当我们想控制构件获取的远程地址时,我们该怎么做呢?此时需要使用远程仓库的配置功能。

Maven中远程仓库的配置

此处我们讲解2种方式。

方式1
pom.xml中配置远程仓库,语法如下:
<project>
    <repositories>
        <repository>
            <id>aliyun-releases</id>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

在repositories元素下,可以使用repository子元素声明一个或者多个远程仓库。

repository元素说明:

  • id:远程仓库的一个标识,中央仓库的id是central,所以添加远程仓库的时候,id不要和中央仓库的id重复,会把中央仓库的覆盖掉

  • url:远程仓库地址

  • releases:主要用来配置是否需要从这个远程仓库下载稳定版本构建

  • snapshots:主要用来配置是否需要从这个远程仓库下载快照版本构建

releases和snapshots中有个enabled属性,是个boolean值,默认为true,表示是否需要从这个远程仓库中下载稳定版本或者快照版本的构建,一般使用第三方的仓库,都是下载稳定版本的构建。

快照版本的构建以-SNAPSHOT结尾,稳定版没有这个标识。

示例

来感受一下pom方式配置远程仓库的效果。

文本编辑器打开maven-chat03/pom.xml,将下面内容贴进去:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.javacode2018</groupId>
    <artifactId>maven-chat03</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>aliyun-releases</id>
            <url>https://maven.aliyun.com/repository/public</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

</project>

上面我们配置了一个远程仓库,地址是阿里云的maven仓库地址,releasesenabledtruesnapshotsenabledfalse,表示这个远程仓库我们只允许下载稳定版本的构件,而不能从这个仓库中下载快照版本的构建。

删除本地仓库中以下几个目录:

~\.m2\repository\org\springframework
~\.m2\repository\com\alibaba

maven-chat03项目目录中打开cmd运行:

mvn compile

输出如下:

D:\code\IdeaProjects\maven-chat03>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat03 >--------------------
[INFO] Building maven-chat03 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom (3.3 kB at 5.1 kB/s)
Downloading from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starters/2.2.1.RELEASE/spring-boot-starters-2.2.1.RELEASE.pom
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starters/2.2.1.RELEASE/spring-boot-starters-2.2.1.RELEASE.pom (1.8 kB at 8.0 kB/s)
Downloading from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-parent/2.2.1.RELEASE/spring-boot-parent-2.2.1.RELEASE.pom
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-parent/2.2.1.RELEASE/spring-boot-parent-2.2.1.RELEASE.pom (1.8 kB at 8.6 kB/s)
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/spring-expression/5.2.1.RELEASE/spring-expression-5.2.1.RELEASE.jar (282 kB at 82 kB/s)
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/spring-webmvc/5.2.1.RELEASE/spring-webmvc-5.2.1.RELEASE.jar (946 kB at 219 kB/s)
Downloaded from aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/spring-beans/5.2.1.RELEASE/spring-beans-5.2.1.RELEASE.jar (684 kB at 56 kB/s)
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-chat03 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-chat03 ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to D:\code\IdeaProjects\maven-chat03\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  24.079 s
[INFO] Finished at: 2019-11-12T15:33:27+08:00
[INFO] ------------------------------------------------------------------------

输出中有很多Downloaded from aliyun-releasesDownloaded from后面跟的aliyun-releases就是上面我们在pom.xml中配置的远程仓库repository元素中的id,后面还可以看到很多下载地址,这个地址就是我们上面在pom.xml中指定的远程仓库的地址,可以看到项目中依赖的构建从我们指定的远程仓库中下载了。

pom中配置远程仓库的方式只对当前项目起效,如果我们需要对所有项目起效,我们可以下面的方式2,向下看。

方式2
镜像的方式

如果仓库X可以提供仓库Y所有的内容,那么我们就可以认为X是Y的一个镜像,通俗点说,可以从Y获取的构件都可以从他的镜像中进行获取。

可以采用镜像的方式配置远程仓库,镜像在settings.xml中进行配置,对所有使用该配置的maven项目起效,配置方式如下:

<mirror>
  <id>mirrorId</id>
  <mirrorOf>repositoryId</mirrorOf>
  <name>Human Readable Name for this Mirror.</name>
  <url>http://my.repository.com/repo/path</url>
</mirror>

mirrors元素下面可以有多个mirror元素,每个mirror元素表示一个远程镜像,元素说明:

  • id:镜像的id,是一个标识

  • name:镜像的名称,这个相当于一个描述信息,方便大家查看

  • url:镜像对应的远程仓库的地址

  • mirrorOf:指定哪些远程仓库的id使用这个镜像,这个对应pom.xml文件中repository元素的id,就是表示这个镜像是给哪些pom.xml文章中的远程仓库使用的,这里面需要列出远程仓库的id,多个之间用逗号隔开,*表示给所有远程仓库做镜像

这里主要对mirrorOf再做一下说明,上面我们在项目中定义远程仓库的时候,pom.xml文件的repository元素中有个id,这个id就是远程仓库的id,而mirrorOf就是用来配置哪些远程仓库会走这个镜像去下载构件。

mirrorOf的配置有以下几种:

<mirrorOf>*</mirrorOf> 

上面匹配所有远程仓库id,这些远程仓库都会走这个镜像下载构件

<mirrorOf>远程仓库1的id,远程仓库2的id</mirrorOf> 

上面匹配指定的仓库,这些指定的仓库会走这个镜像下载构件

<mirrorOf>*,! repo1</mirrorOf> 

上面匹配所有远程仓库,repo1除外,使用感叹号将仓库从匹配中移除。

需要注意镜像仓库完全屏蔽了被镜像的仓库,所以当镜像仓库无法使用的时候,maven是无法自动切换到被镜像的仓库的,此时下载构件会失败,这个需要了解。

示例

将maven-chat03中的pom.xml修改为:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.javacode2018</groupId>
    <artifactId>maven-chat03</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
    </dependencies>

</project>

修改~/.m2/settings.xml,加入镜像配置,如下:

<mirrors>
    <mirror>
        <id>mirror-aliyun-releases</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云maven镜像</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>

上面配置了一个阿里云的镜像,注意镜像的id是mirror-aliyun-releases

下面我们就来验证一下镜像的效果。

删除本地仓库中的以下几个目录:

~\.m2\repository\org\springframework
~\.m2\repository\com\alibaba

maven-chat03项目目录中打开cmd运行:

mvn compile

输出如下:

D:\code\IdeaProjects\maven-chat03>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.javacode2018:maven-chat03 >--------------------
[INFO] Building maven-chat03 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom
Downloaded from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/com/alibaba/fastjson/1.2.62/fastjson-1.2.62.pom (9.7 kB at 17 kB/s)
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom
Downloaded from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starter-web/2.2.1.RELEASE/spring-boot-starter-web-2.2.1.RELEASE.pom (3.3 kB at 15 kB/s)
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starters/2.2.1.RELEASE/spring-boot-starters-2.2.1.RELEASE.pom
Downloaded from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-starters/2.2.1.RELEASE/spring-boot-starters-2.2.1.RELEASE.pom (1.8 kB at 8.3 kB/s)
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-parent/2.2.1.RELEASE/spring-boot-parent-2.2.1.RELEASE.pom
Downloaded from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-parent/2.2.1.RELEASE/spring-boot-parent-2.2.1.RELEASE.pom (1.8 kB at 8.2 kB/s)
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-dependencies/2.2.1.RELEASE/spring-boot-dependencies-2.2.1.RELEASE.pom
Downloaded from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/boot/spring-boot-dependencies/2.2.1.RELEASE/spring-boot-dependencies-2.2.1.RELEASE.pom (127 kB at 311 kB/s)
Downloading from mirror-aliyun-releases: https://maven.aliyun.com/repository/public/org/springframework/spring-framework-bom/5.2.1.RELEASE/spring-framework-bom-5.2.1.RELEASE.pom
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-chat03 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-chat03 ---
[INFO] Nothing to compile - all classes are up to date
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  15.967 s
[INFO] Finished at: 2019-11-12T16:44:57+08:00
[INFO] ------------------------------------------------------------------------

上面复制了部分内容,大家仔细看一下Downloaded from后面显示的是mirror-aliyun-releases,这个和settings.xml中镜像的id一致,表示我们配置的镜像起效了,所有依赖的构建都从镜像来获取了。

关于镜像一个比较常用的用法是结合私服一起使用,由于私服可以代理所有远程仓库(包含中央仓库),因此对于maven用来来说,只需通过访问一个私服就可以间接访问所有外部远程仓库了,这块后面我们会在私服中做具体说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wifi列表扫描和Wifi链接

上面的截图&#xff0c;就是本文要介绍的主要功能。 1.准备工作&#xff0c;声明权限&#xff1a; <uses-permission android:name"android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name"android.permission.ACCESS_WIFI_STATE&quo…

振弦传感器和振弦采集仪应用隧道安全监测的解决方案

振弦传感器和振弦采集仪应用隧道安全监测的解决方案 现代隧道越来越复杂&#xff0c;对于隧道安全的监测也变得越来越重要。振弦传感器和振弦采集仪已经成为了一种广泛应用的技术&#xff0c;用于隧道结构的监测和评估。它们可以提供更精确的测量结果&#xff0c;并且可以在实…

三维模型3DTile格式轻量化压缩集群处理方法分析

三维模型3DTile格式轻量化压缩集群处理方法分析 在地理信息系统中&#xff0c;由于三维模型的数据密度和文件体积较大&#xff0c;因此需要进行轻量化和压缩处理。这里我们将对使用集群处理方法来实现3D Tiles数据的轻量化压缩进行探讨。 首先&#xff0c;集群计算是一种并行处…

WebDAV之π-Disk派盘 + 开源阅读

开源阅读是一款真正免费的小说阅读软件。开源阅读app有多种新颖的书籍资源。用户可以自由设置并添加书籍清单。无论是在线搜索和浏览还是本地TXT文件导入,都非常方便。当用户使用开源阅读应用阅读小说时,不会有广告跳出来,您可以阅读整个过程,开源阅读app是喜欢看小说的朋友…

持续集成交付CICD:Jenkins部署

目录 一、理论 1.CI/CD 2.Gitlab内置持续集成 3.Jenkins安装与部署 4.Gitlab服务部署 5.Jenkins服务部署 6.Tomcat服务部署 7.Jenkins–Pipeline流水线项目构建 二、实验 1.Gitlab服务部署 2.Jenkins服务部署 3.Tomcat服务部署 4.Jenkins–Pipeline流水线项目构建…

RabbitMQ常见的交换机类型

RabbitMQ安装 pom.xml里导入相关的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> application.properties配置文件 spring.rabbitmq.hos…

利用SoapUI工具生成Java WebService客户端代码

一. 下载安装软件 安装SoapUI 5.4.0-EB&#xff1b;下载axis-1_4&#xff0c;下载后解压至个人目录下即可。 注&#xff1a;axis-1_4下载地址&#xff08;https://archive.apache.org/dist/ws/axis/1_4/axis-bin-1_4.zip&#xff09; 二. 创建SOAP Project 点击File–>New…

GRU的 电影评论情感分析 - python 深度学习 情感分类 计算机竞赛

1 前言 &#x1f525;学长分享优质竞赛项目&#xff0c;今天要分享的是 &#x1f6a9; GRU的 电影评论情感分析 - python 深度学习 情感分类 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 这…

YOLOv7改进:原创独家首发 | 可变形自注意力Attention | 即插即用系列

💡💡💡本文属于原创独家改进:当你停留在可形变卷积上(DCNV1,DCNV2,DCNV3等),可形变Attention助力检测,创新性十足,不仅增强了 sparse attention 的表征能⼒,同时具有线性空间复杂度。 可形变与attention 的完美融合 | 亲测在多个数据集实现暴力涨点,对遮挡…

数据库Mysql三大引擎(InnoDB、MyISAM、 Memory)与逻辑架构

MySQL数据库及其分支版本主要的存储引擎有InnoDB、MyISAM、 Memory等。简单地理解&#xff0c;存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特色&#xff0c;使用的是一个可插拔存储引擎架构&#xff0c;能够在运行的时候动态加载或者卸载这些存…

为什么说CDN是网站速度优化大师

CDN&#xff08;内容分发网络&#xff09;是一个强大的工具&#xff0c;可以帮助您的网站实现飞一般的加载速度。本文将引领您深入了解CDN的奇妙世界&#xff0c;揭示其强大功能&#xff0c;并提供关于如何充分利用CDN服务来提升网站性能的宝贵建议。 探索CDN的世界 CDN&#x…

功率半导体器件静态参数测试都测哪些内容?

功率半导体器件如今已成为不可或缺的元件&#xff0c;在通信、电力电子等领域得到广泛应用。而对其性能参数的测试也是必不可少的&#xff0c;是对半导体性能、质量的保障。半导体测试参数包含静态测试参数和动态测试参数&#xff0c;本文将介绍半导体分立器件静态测试参数的相…

随手拍文明城市美丽乡村监督上报小程序开发

功能介绍&#xff1a; 一款拍照上传系统&#xff0c;ThinkPHP Uniapp开发&#xff0c;代码简洁&#xff0c;UI清爽。 后台功能 1、应用配置&#xff1a;首页轮播图配置&#xff1b;上报事件标签&#xff1b;上报等级&#xff08;可设置积分&#xff09;&#xff1b;小程序配…

gitlab docker部署,备份,恢复。附踩坑记录

本次安装在CentOS7下进行 1、安装yum 检查是否已经安装yum yum --version如果未安装 sudo yum install -y yum-utils添加镜像源&#xff1a; 国外镜像源&#xff1a;yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo阿里镜像源&am…

【vue富文本插件】tinymce 安装使用及汉化注意项

文章目录 前言一、tinymce 下载安装1.1 npm 安装1.2 提供 CDN 版本免费下载 二、tinymce 本地化三、编写富文本组件四、在其他 .vue 组件中引入上面编写的 myEditor 组件 五、相关问题5.1 汉化5.2 富文本不显示或者黄色文本提示 附&#xff1a;引入第三方拓展啊插件 前言 前端…

HNU-计算机网络-讨论课1

题目&#xff1a; 有关网络系统结构的讨论 一、必选问题&#xff08;每组平均每人1个&#xff09; 1、分层结构其实是世界演进形成的普遍系统结构&#xff0c;不管是自然领域还是社会领域&#xff0c;请举例说说你的理解。 2、有人说通信网络的核心技术在物理层&#xff0c…

Soul CEO张璐团队以用户安全为核心,探索社交平台安全治理新路径

“认同感”,是现代年轻人当下的核心社交需求之一,作为年轻人喜爱的新型开放式社交平台,Soul APP为年轻人们提供了一个自在表达、轻松互动的平台,为用户带来了志趣相投、精神共鸣的高质量网络连接。在Soul日活近千万的用户中,超过七成为Z世代年轻群体,如何能够为Z世代提供更安全…

MySQL增删查改(进阶2)

一、查询 1.聚合查询 1.1聚合函数&#xff1a; &#xff08;1&#xff09;count() 获取整个结果集的行数&#xff08;数据的数量&#xff09; count&#xff08;某个字段&#xff09;count(*)count&#xff08;常量值&#xff09; &#xff08;2&#xff09;sum(某个字段)…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测用例(五)

六、华为云耀云服务器L实例评测用例&#xff1a; “兵马未动&#xff0c;粮草先行”&#xff0c;随着企业业务的快速发展&#xff0c;服务器在数字化建设体系至关重要&#xff0c;为了保证服务器的稳定性、可靠性&#xff0c;需要对服务器进行评测&#xff0c;以确保服务器能够…

用“和美”丈量中国丨走进酒博物馆系列⑨

五粮液酒文化博览馆始建于1988年&#xff0c;是中国酒业最早的酒文化博览馆&#xff0c;于2020年启动升级改造。 现在我们看到的五粮液酒文化博览馆&#xff0c;采用了当今博览馆最前沿的展陈方式&#xff0c;展陈设计与空间布局更具灵动性和多元性&#xff0c;蕴含传统文化氛围…