从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • JavaSE

  • JavaSenior

  • JavaEE

    • JavaEE概念

    • Ant

    • Maven

      • 什么是Maven
      • 安装Maven
      • 第一个Maven项目
      • Maven的组成和配置
        • Maven目录结构分析
        • 全局配置和用户配置
        • 配置settings.xml
        • 小结
      • 快速创建Maven项目
      • 创建Web项目
      • Maven的生命周期和构建
      • Maven的依赖管理
      • Maven的插件管理
      • IDEA关于Maven的设置
      • 使用Maven完成dao层
      • 使用Maven完成service层
      • 使用Maven完成web层
      • Maven的拆分和聚合
      • Nexus的搭建
      • Nexus的使用
      • 安装第三方jar包到私服
      • Maven系列完结
      • Maven
    • 日志

    • Junit

    • JDBC

    • XML和JSON

    • Java
  • JavaWeb

  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java并发

  • Java源码

  • JVM

  • 韩顺平

  • Java
  • Java
  • JavaEE
  • Maven
2023-05-15
目录

Maven的组成和配置

# 25.Maven的组成和配置

本文来讲解一下关于Maven的组合和配置,便于后续对Maven的讲解和学习。   ‍

# Maven目录结构分析

我们解压Maven后,可以看到文件夹里有这些内容:

apache-maven-3.8.3
├── bin
├── boot
├── conf
├── lib
├── LICENSE
├── NOTICE
├── README.txt
1
2
3
4
5
6
7
8

我们简单来说下各个目录的作用,读者有个印象即可:

  • bin目录:存放了 Maven 的命令脚本,我们上一小节输入的有关Maven的命令,都是在调用这些脚本
  • boot目录:存放了一些 Maven本身的引导程序,如类加载器等
  • conf目录:存放了 Maven 的一些配置文件,如 setting.xml 文件是非常重要的配置文件
  • lib目录:存放了 Maven 本身运行所需的一些依赖
  • LICENSE:许可证说明文件
  • NOTICE:一些注意事项
  • README.txt:说明文档

‍

‍

# 全局配置和用户配置

目前操作系统都支持多用户,也就是可以创建多个用户,并且让多个用户同时使用。例如我们日常开发的时候,一个Linux服务器通常是有多个用户的,Windows也不例外,只不过大部分Windows都是用作个人电脑,比较少涉及到多用户。

因此,大部分软件也考虑到了这样的情况,比如在Windows下安装软件的时候,会提示是安装给所有用户,还是仅仅为当前用户安装。

​​

多用户的基本原理,就是根据文件权限来实现的,例如每个用户都有自己的主目录,而安装在全局的软件,可以给所有用户都使用到。

Maven也有这样的机制,在Maven的安装目录下,conf里的配置就是全局配置。但是在用户目录下,也有一个配置文件,例如我的是在:C:\Users\peterjxl\.m2\settings.xml​,这个文件就是用户自己对Maven的配置。

这样有几个好处:

  • 每个用户可以有自己不同的配置文件,并且不会相互影响;Maven会优先使用用户自己的配置文件,然后才是全局的配置文件。换句话说,如果用户的配置文件和全局的配置文件,都做了某个配置,那么会以用户的优先
  • 如果没有这样的机制,一旦某个用户修改了全局的配置文件,那么所有用户都会收到影响。
  • 如果用户没有配置文件,则默认使用全局的配置文件
  • 如果Maven有升级,那么各个用户也不会收到影响(如果都使用全局的配置文件,那么升级Maven后还要修改对应的settins.xml)

当然,相信大部分读者都是使用自己的电脑来学习Maven,直接使用和修改全局配置也是可以的,需读者自行选择。

‍

# 配置settings.xml

关于Maven的配置,大部分都是修改 Maven的conf/settings.xml文件。

‍

# 修改仓库地址

我们之前说过,Maven会将下载的依赖放到本地仓库里,那么是放在哪里呢?

我们可以打开Maven的配置文件apache-maven-3.8.3\conf\settings.xml,第46行左右,可以看到这样的注释:

<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
1
2
3
4
5
6
7
8
9

localRepository就是本地仓库的意思,可以看到注释里说默认值是 ${user.home}/.m2/repository,也就是用户目录下的.m2文件夹里。

‍

对于笔者来说,仓库里存放的jar包都挺大,为了不占用宝贵的C盘空间,我会设置成本地仓库的地址为D盘,例如:

  <localRepository>D:\Projects\apache-maven-3.8.3\repository</localRepository>
1

由于我们刚安装完Maven,本地仓库肯定是空的,那么Maven遇到这种情况,就会去中央仓库里寻找依赖,然后下载到本地仓库里。

中央仓库地址:https://repo.maven.apache.org/maven2/

这个中央仓库是配置在哪的呢?在apache-maven-3.8.3\lib\maven-builder-support-3.8.3.jar里。我们解压这个jar包,一步步找到\org\apache\maven\model\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>
1
2
3
4
5
6
7
8
9
10
11

‍

‍

# 配置镜像地址

为了加快下载依赖的速度,我们可以选择从阿里云提供的仓库里下载,因为阿里云在国内,比访问国外的话网速要快不少。

我们打开settings.xml,找到mirrors​标签(148行左右),可以看到如下内容:

<mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <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>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

‍

注释告诉我们,这里可以配置一个仓库,而不是用默认的仓库。并告诉我们配置的格式如下:

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

‍

我们新建一个阿里云的配置:

<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>
1
2
3
4
5
6

‍

后续我们下载依赖的时候,可以看到控制台里显示下载地址变成阿里云的了,速度会快很多,而之前我们都是从中央仓库下载:

​​

该截图是我们演示 第一个Maven项目的时候,编译和打包时,从中央仓库用到的一些插件

‍

修改之后,都是从阿里云的网站上下载了:

​​

‍

可以配置多个mirror,但一般只有第一个生效。如果第一个镜像网站宕机了,才会从第二个镜像下载。

‍

‍

# 镜像地址的原理

其实mirror配置后,是拦截对远程仓库的请求 , 改变对目标仓库的下载地址。

例如我们刚刚配置的是:<mirrorOf>central</mirrorOf>​,这表明如果有对central​这个中央仓库的请求,就拦截它,改为从阿里云的仓库里下载jar包。

除此之外,<mirrorOf>​还支持正则表达式,例如星号*​表示匹配所有,这样配置的话所有请求都是转到该镜像里。

‍

‍

# 配置某个项目的镜像地址

上述的配置是修改了Maven的settings.xml文件,该配置文件会对所有项目生效;

Maven 可以针对每个项目配置不同的中央仓库,在项目 pom.xml <repositories>​ 节点下增加如下配置即可:

<repositories>

    <repository>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
    </repository>

</repositories>
1
2
3
4
5
6
7
8
9
10
11
12

‍

‍

# 小结

本文我们简单介绍了下Maven的组成,并且讲解了如何配置Maven,在后续的过程中我们有不少地方需要配置Maven的。

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/15 16:02:46
第一个Maven项目
快速创建Maven项目

← 第一个Maven项目 快速创建Maven项目→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式