文档章节

Maven学习(一):坐标、依赖管理和仓库

yuhuan121
 yuhuan121
发布于 2017/09/12 14:59
字数 1170
阅读 7
收藏 0
点赞 0
评论 0

1、坐标

1.1、定义

在平面几何中,坐标可以标识平面中唯一的点;Maven中的坐标可以作为构件的唯一标识。

1.2、组成

  • groupId:定义当前Maven项目隶属项目;
  • artifactId:定义实际项目中的一个模块;
  • version:定义当前项目的当前版本;
  • packaging:定义该项目的打包方式;

1.3、使用坐标的理由

  • Maven世界拥有大量的构建,我们需要找一个用来唯一标识一个构建的统一规范;
  • 拥有了统一的规范,就可以把查找工作交给机器;

2、依赖管理

2.1、依赖管理-依赖范围

输入图片说明

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

  • compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
  • test:测试依赖范围。只对于测试classpath有效
  • provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
  • runtime:运行时提供。例如:jdbc驱动

2.2、如何进行依赖配置?

传递性依赖、可选依赖和排除依赖。

2.2.1、传递性依赖

若Two中使用One,Three中使用Two,则称Two是Three的直接依赖,One是Three的间接依赖;

也可表示为:

C->B B->A

C直接依赖B

C间接依赖A

2.2.2、可选依赖

<dependency>
    <groupId>...</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>...</version>
    <optional> true/false</optional>
</dependency>

<optional>元素中的true/false,表示mysql-connector-java这个依赖是否为可选依赖;

2.2.3、排除依赖

<exclusions>
    <exclusion>
            <groupId>...</groupId>
            <artifactId>...</artifactId>
    <exclusion>
</exclusions>

exclusions可以包含一个或多个exclusion子元素,表示可以排除一个或多个可选性依赖;声明exclusion的时候也不需要version元素。

2.3、 依赖冲突

如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则);

如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则);

3、仓库

3.1、概念

首先介绍下构件的概念:任何一个依赖、插件或者项目构建的输出,就称为构件;那么 存储所有maven项目共享的构件的统一位置就是仓库。

3.2、布局方式

任何构件都有一个唯一的坐标,通过这个坐标可以定义其在仓库中的唯一存储路径

3.3、仓库的分类

仓库有两种,本地和远程仓库。maven根据坐标寻找构件的时候,首先会搜索本地仓库,若存在,直接使用;若不存在或需要查看是否有更新的构件版本,maven就去远程仓库查找,找到后就下载到本地仓库使用。若都没找到就会报错。

3.2.1、本地仓库

我的本地仓库的目录为 D:\Users\YUHUAN.m2\repository

一个构件只有在本地仓库中,才能由其他maven项目使用。有两种方法:

  • 依赖maven从远程仓库下载到本地仓库
  • 将项目的构件安装到maven仓库中,这种是最常见的方法

3.2.2、远程仓库

3.2.2.1、中央仓库

中央仓库是maven核心自带的远程仓库,包含了绝大多数流行的开源构件;当本地仓库没有项目所需要的构件的时候,会尝试从中央仓库下载。

3.2.2.2 私服

是一种特殊的远程仓库,是在局域网里架设一个私有的仓库服务器,用其代理所有的外部的远程仓库。内部的项目还能部署到私服上面供其他项目用。

输入图片说明

3.3、镜像

若仓库A可以为仓库B提供其存储的所有内容,那么A是B的一个镜像;

对于内部的maven用户来说,可以使用一个私服地址来使用所需的外部仓库,这样将配置集中到私服,简化maven本身的配置。

一般在settings.xml文件里配置

<mirrors>
     <mirror>
		<!-- This sends everything else to /public -->
		<id>nexus</id>
		<mirrorOf>central</mirrorOf>
		<url>镜像仓库的地址</url>
	</mirror>
</mirrors>

<mirrorOf>标签里的内容可为:

  • central:代表该配置为中央仓库的镜像;
  • *:代表匹配所有远程仓库;
  • external:*:匹配所有不在本机上的远程仓库;
  • repo1,repo2:匹配仓库repo1和repo2,多个远程仓库用逗号分隔;
  • *,!repo1:匹配出repo1在内的所有远程仓库;

© 著作权归作者所有

共有 人打赏支持
yuhuan121
粉丝 0
博文 36
码字总数 38704
作品 0
佛山
程序员
Maven基础知识

本人博客文章网址:https://www.peretang.com/basic-knowledge-of-maven/ Maven简介 Maven , 用于Java项目的构建 , 依赖管理 , 项目信息管理的项目管理工具. 是Apache组织旗下的开源项目. Mav...

PereTang ⋅ 2017/05/09 ⋅ 0

maven(四)坐标和仓库

一:坐标 在maven中任何一个依赖,插件,项目构建的输出等;都可以称为构件。而构件都通过坐标作为唯一的标识。 在pom.xml中,下面的这些就是maven基本的坐标。 <groupId>com.maven.helloWo...

路人丁语 ⋅ 2016/03/16 ⋅ 0

Maven基础学习3

Maven学习总结 最近我学习了一下Maven工具,下面是我对Maven的理解,有理解不对的地方也请批评指正。 1.Maven是什么? 首先Maven是一个项目管理工具,基于项目对象模型(POM),它主张遵循"约定...

浮躁的码农 ⋅ 2016/01/26 ⋅ 0

带你深度解析Maven

一、What`s Maven?   Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说就是用来管理项目所...

hafiz.zhang ⋅ 2017/12/27 ⋅ 0

Maven学习之初识Maven

系统的学习maven 自动化构建Java程序的工具,比较强大,现在很多Java项目都是基于maven构建的,所以有必要学习。而且,太多的hadoop项目也是采用maven添加依赖的。使用maven的另外一个原因是...

Allocator ⋅ 2017/04/28 ⋅ 0

项目管理Maven篇(1)-基础详解

本文主要讲解maven入门基础部分,关于更深层次的知识请阅读我的另一篇文章:项目管理Maven篇(2)- Sonatype Nexus 介绍 Maven是一个强大的项目管理工具,其构建特性被普遍用于项目管理,Maven...

阿郎_ ⋅ 2017/04/08 ⋅ 0

Maven实战读书笔记(6)

Maven的坐标和依赖是?构件的逻辑表示方式和物理表示方式是? 1、坐标和依赖是任何一个构件在Maven世界中的逻辑表示方式 2、文件是Maven构件的物理表示方式 3、Maven通过仓库来统一管理这些文...

祥林会跟你远走高飞 ⋅ 2014/12/15 ⋅ 0

Maven 核心原理

标签 : Java基础 Maven 是每一位Java工程师每天都会接触的工具, 但据我所知其实很多人对Maven理解的并不深, 只把它当做一个依赖管理工具(下载依赖、打包), Maven很多核心的功能反而没用上....

hanqing280441589 ⋅ 2016/11/05 ⋅ 0

Maven的核心笔记(3)常用命令、坐标和仓库

1.maven中常用的命令 mvn -v 查看maven的版本 compile编译(如果需要依赖其他包就需要自动下载) test测试 package 打包 clean 删除target包 install (安装jar包到本地仓库中) 2.在cmd中使...

山月风成 ⋅ 2017/10/12 ⋅ 0

POM文件配置解析

pom.xml:maven项目的核心,定义了项目的基本信息,用于描述项目如何构建,声明项目的依赖,等等。 下面一步步解析pom.xml文件的相关配置。 如图: project:是pom.xml的根元素,声明了POM相...

皮蛋瘦肉粥里没有粥 ⋅ 2016/03/16 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 从其他备份中恢复数据

一般来说,Confluence 数据库可以从 Administration Console 或者 Confluence Setup Wizard 中进行恢复。 如果你在恢复压缩的 XML 备份的时候遇到了问题,你还是可以对整个站点进行恢复的,如...

honeymose ⋅ 12分钟前 ⋅ 0

myeclipse10 快速搭建spring boot开发环境(入门)

1.创建一个maven的web项目 注意上面标红的部分记得选上 2.创建的maven目录结构,有缺失的目录可以自己建立目录补充 补充后 这时候一个maven的web项目创建完成 3.配置pom.xml配置文件 <proje...

小海bug ⋅ 24分钟前 ⋅ 0

nginx.conf

=========================================================================== nginx.conf =========================================================================== user nobody; #......

A__17 ⋅ 27分钟前 ⋅ 0

645. Set Mismatch - LeetCode

Question 645. Set Mismatch Solution 思路: 遍历每个数字,然后将其应该出现的位置上的数字变为其相反数,这样如果我们再变为其相反数之前已经成负数了,说明该数字是重复数,将其将入结果r...

yysue ⋅ 40分钟前 ⋅ 0

Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠 ⋅ 56分钟前 ⋅ 0

压缩打包介绍、gzip压缩工具、bzip2压缩工具、xz压缩工具

压缩打包介绍 压缩的好处不仅能节省磁盘空间而且在传输的时候节省传输时间和网络带宽 windows系统下文件带有 .rar .zip .7z 后缀的就是压缩文件 linux系统下则是 .zip, .gz, .bz2, .xz, ...

黄昏残影 ⋅ 今天 ⋅ 0

观察者模式

1.利用java原生类进行操作 package observer;import java.util.Observable;import java.util.Observer;/** * @author shadow * @Date 2016年8月12日下午7:29:31 * @Fun 观察目标 **/......

Cobbage ⋅ 今天 ⋅ 0

Ubuntu打印服务器配置

参考:https://blog.csdn.net/gsls200808/article/details/50950586 https://blog.csdn.net/jiay2/article/details/80252369 https://wiki.gentoo.org/wiki/HPLIP 由于媳妇儿要大量打印资料,......

大熊猫 ⋅ 今天 ⋅ 0

面试的角度诠释Java工程师(二)

原文出处: locality 续言: 相信每一位简书的作者,都会有我这样的思考:怎么写好一篇文章?或者怎么写好一篇技术类的文章?我就先说说我的感悟吧,写文章其实和写程序是一样的。为什么我会...

颖伙虫 ⋅ 今天 ⋅ 0

github中SSH的Key

https://help.github.com/articles/connecting-to-github-with-ssh/ https://help.github.com/articles/testing-your-ssh-connection/ https://help.github.com/articles/adding-a-new-ssh-k......

whoisliang ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部