Maven的基本概念(三)上

简介: Maven的基本概念(三)

一. Maven项目的基本结构


上一章,我们创建了一个简单的 Jar类型的项目,发现这个项目的目录结构是这样的。


20191021172800690.png


如果我们创建一个 web 类型的项目, 会发现这个项目相比较 jar类型的项目,多了一个webapp 选项。


20191023154855997.png


这个 webapp 下需要创建 WEB-INF 和 META-INF 目录,来存放相应的信息,如 web.xml和 js,css文件。


在创建项目时,一定要遵守这些规则,这些约定,只有符合这样约定的结构,才属于Maven 结构,才能 约定优于配置


二. Maven的仓库 (repository)


Maven的仓库,指的就是存放 jar包的地方。 分为两类,一类是本地仓库,另外一类是 远程仓库。 而远程仓库里面,又可以分成 中央仓库,私服,和其他公共库。


20191023154936184.png


二.一 Maven的本地仓库


Maven的本地仓库,默认的路径为 用户/.m2/repository/ 目的,也可以通过 settings.xml 文件的 <localRepository> 标签进行配置。


二.二 Maven的中央仓库


Maven的中央仓库,由 Maven的开发团队进行相应的维护, 下载jar包时,就是从 Maven的中央仓库进行相应的下载。


网址是: http://repo1.maven.org/maven2/


但由于该网站在外国,访问速度慢,故常常配置其镜像。 国内常用,阿里云镜像。


中央仓库的配置文件路径在 : M2_HOME/lib/maven-model-builder-3.5.4.jar 里面。

将其 jar包进行反编译, 在 org/apache/maven/model/pom-4.0.0.xml 文件


20191023154919131.png


在最开始的地方,有


 <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>


二.三 镜像 mirror


镜像是一种数据冗余, 是一个磁盘上的数据在另外一个磁盘上存在完全相同的一个副本,就叫镜像。 镜,就是镜子,完全一样。


为什么要使用镜像:


1 . 你有的我都有,你没有的我也有。(拥有中央仓库所有的jar包,并且还有一些中央仓库没有的jar包)

2 . 我跑的比你快 (中央仓库在外国,访问速度过慢,而国内的阿里云镜像在国内,访问速度和下载速度快)


故 常常配置镜像来替代 中央仓库。 国内选用阿里云镜像。 关于阿里云镜像的配置,老蝴蝶在上一章已经讲过了。


二.四 私服 (profile)


私服,相当于局域网内部的仓库,如部门级别的私服和公司级别的私服, 可以用 Nexus 来配置。


如果配置了私服,那么会优先去私服下载 jar包,如果私服没有,则再去镜像或者中央仓库下载,下载之后,保存一份到私服。


私有的优点有:(说法比较官方,就用 那个 ShenWenFang 前辈的话了)


1.节省外网宽带

2.加速Maven构建

3.部署第三方构件:可以将公司项目的 jar 发布到私服上,方便项目与项目之间的调用

4.提高稳定性、增强控制:原因是外网不稳定

5.降低中央仓库的负荷:原因是中央仓库访问量太大


二.五 优先级


Maven下载jar包的优先级:


1.如果本地仓库有,就从本地仓库里拿

2.如果本地仓库没有,就从私服拿,顺便下载一份到本地仓库(如果有私服的话)

3.如果私服没有,判断是否配置了镜像,如果配置了镜像,就去镜像那儿拿,如果没有没有配置镜像,就从中央仓库那拿。

4.如果中央仓库也没有,就抛出异常,坐标不对。


所以, Maven的各个仓库的优先级是:


本地仓库 > 私服 > 远程仓库


三. 坐标 (coordinates)


无论是从本地仓库引用jar包,还是从远程仓库下载jar包, 该怎么下载呢,或者是如何告诉仓库,你要使用的是哪个 jar包呢? 在自然界,我们用经纬坐标来表示自己的位置,数学界用 横纵坐标来表示点的位置, 所以 下载jar包时,也是用坐标来表示 jar包。


jar包的坐标需要三部分组成, 一个是 groupId, 一个是 artifactId, 一个是 versionId .


groupId 表示公司/组织名, 常常用 域名反写,如 阿里巴巴 是 com.alibaba


artifactId 表示项目名, 哪个项目,如 fastjson


version 表示版本号, 如 1.2.15


那么 com.alibaba.fastjson-1.2.15.jar 就可以表示出 阿里巴巴公司的fastjson项目 1.2.15版本的jar包了。


表示在 Maven中,坐标就可以写成:


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


在我们自己创建 jar项目时,也相应的制定了我们自己 jar包的坐标了, 在创建Maven项目时指定的


如上一章节我们创建的 Jar项目


20191023155102504.png


groupId 为 com.yjl


artifactId 为 HelloMaven


version 版本 为 0.0.1-SNAPSHOT


其他项目在引入 HelloMaven, 如里面的 Hello.java 类时, 只需要


<dependency>
      <groupId>com.yjl</groupId>
      <artifactId>HelloMaven</artifactId>
      <version>0.0.1-SNAPSHOT</version>
</dependency>


即可以引入相应的 HelloMaven的jar包了。


其中, SNAPSHOT 为快照的意思,是测试版本,区别于 releases 正式版。

相关文章
|
Java Maven Nacos
Maven - Maven 核心概念一网打尽:轻松掌握项目构建与管理技巧
Maven - Maven 核心概念一网打尽:轻松掌握项目构建与管理技巧
101 0
|
6月前
|
Java Maven
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
Maven实战 Item4 -- Maven核心概念_maven junit version(1)
|
Java 调度 Maven
Maven基础学习---5、其他核心概念
Maven基础学习---5、其他核心概念
|
Java 项目管理 Maven
06Maven - Maven概念模型
06Maven - Maven概念模型
27 0
|
存储 Java Apache
【Maven】Maven下载,配置以及基本概念
Maven是一个Java项目管理工具和构建工具,用于管理项目的依赖关系、构建过程以及项目的部署。它是Apache软件基金会的开源项目。Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
|
存储 Java 程序员
【Maven相关知识 一】Maven基本概念和基本功能
【Maven相关知识 一】Maven基本概念和基本功能
141 0
|
Java 应用服务中间件 Maven
MAVEN01_概述+核心概念+IDEA中如何使用(创建项目)(六)
⑥. tomcat插件和jdk插件 ⑦. maven 工程运行调试
102 0
MAVEN01_概述+核心概念+IDEA中如何使用(创建项目)(六)