Maven详解

目录

1.Maven介绍

[1.1 什么是Maven](#1.1 什么是Maven)

[1.2 Maven能解决什么问题](#1.2 Maven能解决什么问题)

[1.3 构建工具的作用](#1.3 构建工具的作用)

[1.4 Maven的依赖管理](#1.4 Maven的依赖管理)

[2. Maven的使用](#2. Maven的使用)

[2.1 Maven软件下载](#2.1 Maven软件下载)

[2.2 Maven软件安装](#2.2 Maven软件安装)

[2.3 配置环境变量](#2.3 配置环境变量)

[2. 4 Maven仓库](#2. 4 Maven仓库)

[2.5 配置:](#2.5 配置:)

[3 IDEA配置Maven](#3 IDEA配置Maven)

[3.1 修改项⽬的默认配置](#3.1 修改项⽬的默认配置)

[3.2 进⼊Maven配置⻚](#3.2 进⼊Maven配置⻚)

[3.3 IDEA创建Maven项⽬](#3.3 IDEA创建Maven项⽬)

第一步:

第二步:

第三步:

第四步:

[3.4 Maven工程目录结构](#3.4 Maven工程目录结构)

[3.5 目录说明](#3.5 目录说明)

[4. Pom文件](#4. Pom文件)

[4.1 项目三大坐标](#4.1 项目三大坐标)

[4.2 依赖](#4.2 依赖)

查看依赖关系图:

查看本地仓库:

依赖的强大之处:


1.Maven介绍

1.1 什么是Maven

Maven 的正确发音是[ˈmevən],而不是"马瘟"以及其它什么瘟。Maven 在美国是一个口语化的词语,代表专家、内行的意思。

一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模型 (POMProject Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统 (Dependency Management System)

1.2 Maven能解决什么问题

我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种必不可少的事情要做,列举几个感受一下:

1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

2、世界上没有不存在 bug 的代码,计算机喜欢 bug ,就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

3、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,甚至能帮你部署项目,生成 Web 站点,你会心动吗,Maven 就可以解决上面所提到的这些问题。

1.3 构建工具的作用

Maven的定位是项目构建工具,因此需要了解什么是项目构建工具。

构建工具是将软件项目构建相关的过程自动化的工具。

构建一个软件项目通常包含以下一个或多个过程:

  • 生成源码(如果项目使用自动生成源码);

  • 从源码生成项目文档;

  • 编译源码;

  • 将编译后的代码打包成JAR文件或者ZIP文件;

  • 将打包好的代码安装到服务器、仓库或者其它的地方;

有些项目可能需要更多的过程才能完成构建,这些过程一般也可以整合到构建工具中,因此它们也可以实现自动化。

自动化构建过程的好处是将手动构建过程中犯错的风险降到最低。而且,自动构建工具通常要比手动执行同样的构建过程要快。

1.4 Maven的依赖管理

Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成

一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。

如下图:

你会发现其实我们maven需要的jar包会存放在本地的一个jar包仓库,这样就不需要存放在项目中了,

但是说来说去jar包还是占用了电脑的磁盘空间,只是传统方式放在项目中,maven放在jar包仓库,这也并没有节约磁盘空间。如果是这样的话,我们试想一下,如果有10个项目都需要这个jar包呢。

如果有10个项目都需要这些jar包。我们就可以使用maven方式创建java项目了。

其实我们就是在做一件事儿,就是代码可重用。这也就是maven的第一个特性:依赖管理

依赖管理:maven工程对jar包的管理过程。我们只需要在项目中存放jar包的坐标即可,坐标一般都是放在pom.xml文件中。

2. Maven的使用

2.1 Maven软件下载

为了使用 Maven 管理工具,我们首先要到官网去下载它的安装软件。通过百度搜索"Maven"如下:

下载Maven

进入到官网页面,然后download

其实这个maven下载下来就是一个压缩包,只需要解压到一个没有中文路径的文件夹即可。比如放在D盘下。

我们只需要做一些简单的配置即可。

2.2 Maven软件安装

Maven 下载后,将 Maven 解压到一个没有中文没有空格的路径下,比如 D:\software\maven 下面。

解压后目录结构如下:

bin:存放了 maven 的命令

boot:存放了一些 maven 本身的引导程序,如类加载器等

conf:存放了 maven 的一些配置文件,如 setting.xml 文件

lib:存放了 maven 本身运行所需的一些 jar 包

至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。匹配环境变量

2.3 配置环境变量

声明:配置环境变量目的只是为了能在任意目录下访问maven下的命令。其实不匹配也可以。

配置步骤和配置jdk步骤几乎一样,只是路径变了。

值得注意的是:maven是依赖于jdk的,所以jdk必须安装好。

2. 4 Maven仓库

三类:

  1. 本地仓库

  2. 远程仓库

  3. 中央仓库

中央仓库地址:mvn

2.5 配置:

但以上就是作为了解,其实现实中我们只需要访问阿里云的镜像即可,阿里云就是个远程仓库 (私服),我们都去访问阿里云。

我们本地仓库默认在setting.xml配置文件中会放到c盘很深的目录下,我们可以修改配置文件,把本地仓库放到自己专属的位置。

如下图:

<localRepository>/Users/lihongyan/Documents/dev/maven_repository</localRepository>

上图意味着每次启动项目时候都会去自己的本地目录找需要的jar包。而不会直接去中央仓库找需要的jar包了。

如果本地仓库没有我们想要的jar包,那么本地仓库就会去中央仓库去找。

如下图就是阿里云的镜像地址,把如下代码粘贴早自己项目的setting文件中,即可。

XML 复制代码
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>        
</mirror>

3 IDEA配置Maven

3.1 修改项⽬的默认配置

3.2 进⼊Maven配置⻚

改Maven⽬录以及settings⽂件位置

修改为自己安装路径:

3.3 IDEA创建Maven项⽬

第一步:
第二步:

填写项⽬名称、GroupId、ArtifactId以及Version,

GroupId通常为公司域名倒置,ArtifactId通常与项⽬名保持⼀致,Version为项⽬版本号,

此三项被称为Maven三⼤坐标,后⾯详细说。

第三步:

确认各项配置

第四步:

创建项⽬后需要⼀段时间⾃动下载Maven所需要的资源,BUILD SUCCESS代表创建完成。

3.4 Maven工程目录结构

3.5 目录说明

XML 复制代码
src/main/java ------ 存放项目的.java 文件
​
src/main/resources ------ 存放项目资源文件,如 spring, hibernate 配置文件
​
src/test/java ------ 存放所有单元测试.java 文件,如 JUnit 测试类
​
src/test/resources ------ 测试资源文件
​
pom.xml------maven 项目核心配置文件
​
注意:如果是普通的 java 项目,那么就没有 webapp 

4. Pom文件

Maven项⽬中最重要的是pom.xml⽂件,所谓pom意为Project Object Model,即项⽬对象模型。

Maven体现了⾯向对象的思想,将每个项⽬看作是⼀个对象,并⽤⼀个pom⽂件来具体描述。

每个项⽬有⾃⼰的属性,项⽬之间也会有⼀些关系,⽐如依赖、继承、聚合。

4.1 项目三大坐标

在项⽬pom的属性中,有三个属性是最重要的,分别是groupId、artifactId以及version,它们统称为Maven三⼤坐标,

我们可以通过这三个属性来查找、定位到某个具体的项⽬。

  1. groupId:Maven对项⽬是分组管理的,groupId通常为项⽬所属公司或组织的域名倒置,⽐如com.codingfuture。

  2. artifactId:⽤来表示项⽬ID,即为项⽬名。maven识别的名字

  3. version项⽬的版本号,可以为任意值,有两个常⽤的后缀⽅式需要了解:

    RELEASE:发⾏版、正式版

    SNAPSHOT:快照版、测试版

4.2 依赖

依赖是Maven中项⽬之间的⼀种关系,⽐如A项⽬的运⾏需要引⼊B项⽬,如果不使⽤Maven,

我们需要在A项⽬中引⼊B项⽬的jar包,⽽在Maven中,我们只需要在pom中配置项⽬A与项⽬B之间的依赖关系就好,

实际的引⼊操作由Maven来帮我们完成。

发现c3p0还依赖于mchange包

查看依赖关系图:
查看本地仓库:
依赖的强大之处:
XML 复制代码
C(2.0) <- A -> B(1.0) -> C(1.0)

A项目依赖于C的2.0版本,同时依赖于B(1.0版本),我们就需要在项目的pom.xml文件中写两个配置,C的2.0和B的1.0,

至于间接需要依赖的C的1.0,maven 就帮我们解决了。

如果没有maven,我们自己就需要在A项目中把其它三个jar包都倒入进来,这样会导致在A项目中有2个不同版本的C jar包,

这样会冲突有问题的,artifactId在pom文件中 只能有一个。不可以有多个。

<scope></scope>为依赖的作用域,具体可选值如下:

  • compile

    默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。

  • test

    scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。

  • runtime

    runtime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。通常来说项目之间通过反射进行依赖则可以设置为runtime,最典型的就是mysql驱动。

  • provided

    provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。

  • system

    从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用

相关推荐
NiNg_1_2344 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man5 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml48 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
小码编匠9 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#