史上最详细的Maven使用笔记(建议收藏)

简介: 史上最详细的Maven使用笔记(建议收藏)

Maven

一、什么是Maven?

Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model)
是apache组织 开源的 项目构建工具
项目构建:指的是一个项目创建,编译,测试,打包(jar包:java项目|War包:javaWeb项目),部署
        维护等流程

二、为什么要用Maven?

1、maven构建的项目可以在多个IDE(集成开发环境)中移植

1、maven构建的项目可以在多个IDE(集成开发环境)中移植
   常见的IDE:IDEA、MyEclipse、Eclipse

image.png


2. maven支持本地部署,远程热部署

2. maven支持本地部署,远程热部署
   热部署:在不关闭服务器的前提下部署项目应用

本地部署:服务器和开发环境放在同一个电脑上


image.png


远程部署:服务器和开发环境不在同一个电脑上


image.png


远程热部署:在不停机的情况下,远程进行热部署



image.png

3、支持持续集成|持续发布(持续上线)

3、支持持续集成|持续发布(持续上线)
   Maven工具可以指定发布任务,在指定时间点,会自动完成项目编译,测试,打包,部署功能,
   如果项目一旦出现bug,出现的异常信息会以报告的形式发送到指定邮箱(**解放人力** )
       00:00 一次上线  bug 发送报告
       01:00 二次上线  如果第二次上线成功,第三次上线自动取消
       02:00  成功

传统项目上线,当天凌晨所有程序员在那里等着


image.png


maven构建上线任务


    00:00 一次上线(自动 编译,测试,打包,部署)
               产生bug,将错误信息,以报告形式发送到指定邮箱
    01:00 二次上线(自动 编译,测试,打包,部署)
               产生bug,将错误信息,以报告形式发送到指定邮箱
              **如果第二次上线成功,第三次上线自动取消** 
    02:00 三次上线(自动 编译,测试,打包,部署) 成功


image.png

4、自动构建项目依赖(节省存储资源,避免jar包冲突问题)

4、自动构建项目依赖(节省存储资源,避免jar包冲突问题)
  仓库(依赖 jar包)
  maven只引入框架核心jar包,自动解决jar包冲突问题,不需要负责粘贴jar包
  *注意:maven引入的是jar包的坐标
    一个jar包对应着有一个坐标
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
  </dependency>

image.png

构建依赖分析:

image.png



通过分析发现:
maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar包的坐标,
这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文件,
再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从
而找到这些 jar 包,再把这些 jar 包拿去运行。
那么问题来了
1:”存放 jar 包的仓库”长什么样?
2:通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式
不可行!
第一个问题:存放 jar 包的仓库长什么样,这一点我们后期会分析仓库的分类,也会带大家去看我们
的本地的仓库长什么样。
第二个问题:通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这
样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有**索引** 的概念,通
过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再
读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的
目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我
们就可以认为可以快速找到 jar 包。

5、自动运行单元测试

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

6、一键构建

我们的项目,往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。
1.什么是构建?
指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理,这个
过程称为构建。
一键构建
指的是**整个构建过程,使用 maven 一个命令可以轻松完成整个工作。** 

Maven 规范化构建流程如下:每个阶段使用一个命令完成


image.png


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


三、maven工具的安装配置

1、安装 解压即可

注意:文件目录不要太深 名字中不要有中文或空格


image.png


2、环境配置 环境变量中添加配置

Maven 是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
  安装 JDK1.8 + 版本 (将JAVA_HOME/bin 配置环境变量 path ),我使用的是 JDK8 相关版本
配置 MAVEN_HOME ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录)
右键 "计算机",选择 "属性",之后点击 "高级系统设置",点击"环境变量",
   来设置环境变量,有以下系统变量需要配置:
(1)新建系统变量 MAVEN_HOME,变量值:E:\Maven\apache-maven-3.3.9
(2)编辑系统变量 Path,添加变量值:%MAVEN_HOME%\bin
注意:注意多个值之间需要有分号隔开,然后点击确定。

(1)新建系统变量 MAVEN_HOME,变量值:D:\develop\apache-maven-3.5.3


image.png


(2)编辑系统变量 Path,添加变量值:%MAVEN_HOME%\bin


image.png


(3)测试配置文件是否成功


image.png


四、maven项目结构

1.src/main/java —— 存放项目的.java 文件
2.src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
3.src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
4.src/test/resources —— 测试资源文件
5.target —— 项目输出位置,编译后的 class 文件会输出到此目录
6.pom.xml——maven 项目核心配置文件
* 注意:如果是普通的 java 项目,那么就没有 webapp 目录。

image.png



作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。


进入 src 目录后,我们发现它里面的目录结构如下


image.png


五、手工构建Maven项目

pom.xml:


<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>
    <!-- 基本设置 The Basics -->
    <!-- 企业或者公司 标识 域名倒置 -->
    <groupId>com.tjcu.edu</groupId>
    <!-- 项目 id 项目名-->
    <artifactId>maven_day1</artifactId>
    <!-- 版本 1.0.0.0.0  -->
    <version>1.0</version>
 </project>

Maven 规范化构建流程如下:每个阶段使用一个命令完成


image.png


(1)mvn compile:编译
(2)mvn clean :清除
(3)mvn test:测试
(4)mvn package :打包
 (5)mvn install 

1、mvn compile:编译

compile 是 maven 工程的编译命令
作用: 将 src/main/java 下的文件编译为 class 文件输出到 target目录下。 
cmd 进入命令状态,执行 mvn compile,如下图提示成功:

image.png

会出现target包:


image.png


查看 target 目录,class 文件已生成,编译完成。


image.png


2、mvn clean :清除

clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。

image.png


3、mvn test:测试

test 是 maven 工程的测试命令 mvn test
作用: 会执行 src/test/java 下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类


image.png

下图为测试结果,运行 1 个测试用例,全部成功:


image.png


4、mvn package :打包

package 是 maven 工程的打包命令
作用: (1)对于 java 工程执行 package 打成 jar 包
      (2)对于 web 工程打成 war包。


image.png

打包后;target中会有打包好的jar包


image.png


5、mvn install 安装

install 是 maven 工程的安装命令
作用:执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出:
当后面的命令执行时,前面的操作过程也都会自动执行!

👉注意:


1、maven命令时后边不能加分号
2、每个maven命令多对应一个依赖 ,第一次使用时需要下载 下载一次
下载要求网速的原因:需要去国外下载


image.png

六、Maven仓库结构

1.默认本地库
2.如果没有就联网去中心仓库下载到本地仓库(要求网络稳定)
3.配置阿里云镜像仓库(解决跨国下载资源网络不稳定问题)
4、修改本地仓库位置

1、默认本地仓库:

本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,
优先从本地仓库查找
默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示 windows 用户目录。

image.png


2、如果没有就联网去中心仓库下载到本地仓库(要求网络稳定)

中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中
央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包
含了世界上大部分流行的开源项目构件

image.png

3、配置阿里云镜像仓库(解决跨国下载资源网络不稳定问题)

远程仓库(阿里云云镜像仓库就是远程仓库也算是远程仓库,但是大多数公司都会有自己的远程仓库):
如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。
远程仓库可以在互联网内也可以在局域网内

image.png

<!-- 阿里云镜像配置 -->
  <mirror>  
    <id>alimaven</id>  
    <name>aliyun maven</name>  
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
    <mirrorOf>central</mirrorOf>          
  </mirror>


image.png

4、修改本地仓库位置


image.png

七、IDEA使用Maven工具

IDEA集成Maven工具步骤(引入外部Maven)

选择file——>setting


image.png


image.png


八、创建Maven项目

1、普通java项目

(1)选择 idea 提供好的 maven 的java 工程模板

image.png


(2)点击 Next 填写项目信息

image.png


项目信息注意事项:

1.父项目为空
2.artifact 项目骨架

坐标中Version版本区别:

1、snapshot 1.0快照版本 没有开发完的版本
2、release 1.0 稳定版本  开发完的版本


image.png

(3)点击 Next,此处不做改动。

image.png


点击 Finish 后开始创建工程,耐心等待,直到出现如下界面。

image.png



(4)普通java新建项目需要改动

a、修改项目pom文件

普通java项目需要
1、坐标
2、环境参数
3、依赖
注意:将<build>标签及其内部信息全部删掉

修改后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.tjcu</groupId>
    <artifactId>maven_java</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--环境参数 编码格式、jdk版本(要一致)-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>
    <!--依赖  添加jar包的位置 -->
    <dependencies>
        <!--默认添加的junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--添加其他的依赖-->
    </dependencies>
</project>

b、补全项目目录结构

最终目录结构不完整,需要自己手动补齐
src/main/resources
src/test/resources

image.png


2、创建Web项目

(1)选择 idea 提供好的 maven 的web 工程模板

image.png


(2)点击 Next 填写项目信息

image.png


(3)点击 Next,此处不做改动。

image.png


(4)点击 Finish 后开始创建工程,耐心等待,直到出现如下界面。


image.png

(5)新建项目需要改动

a、修改(pom.xml详解)

项目需要
1、坐标
2、环境参数
3、依赖
4、打包方式
注意:将<build>标签及其内部信息全部删掉

image.png


b、补全项目结构:

1.手动添加 src/main/java 目录,如下图右键 main 文件夹——>New——>Directory


image.png

(6)tomcat部署

image.png


九、在项目中引入依赖

添加依赖需要指定依赖 jar 包的坐标,但是很多情况我们是不知道 jar 包的的坐标,可以通过如下方


式查询:


1、中心库搜索网站:

http://search.maven.org/

http://mvnrepository.com/

网站搜索示例:



image.png

2、进行验证

为了避免同一时间全球的很多人访问网站设置了笔比较高级的验证码(验证两次,找轮船之类的)


image.png


3、进入到官网

image.png


4、搜索mybatis找到jar包


image.png

5、选择项目所需要的jar包

选择jar包原则,选择下载量最多的,就是最好的,一般都是用于生成环境中的,不要最求最新版本


image.png

6、引入相关依赖:

image.png


7、手动刷新依赖和自动刷新依赖的方法

(1)手动刷新依赖

注意:如果不设置自动刷新 引入依赖之后需要手工刷新项目


image.png


(2)设置IDEA自动刷新maven项目配置


image.png



8、lifecycle是maven的生命周期

image.png


十、maven中jar包的依赖范围

A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:


scope:
1、compile【默认值】:作用于项目整个范围
  编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在
  编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
2、provided:不会出现在打包的产物里,由容器(服务器)提供
          provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, 
          provided 依赖在编译和测试时需要,在运行时不需要,
          比如:servlet api 被 tomcat 容器提供。
注意:所以服务器中有的jar包,我们需要用provide,不然打包运行时会和服务器中的jar包冲突
3、runtime:最多生效到测试环节
          runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。
          比如:jdbc的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。 
4、test:测试时生效 junit中使用
        test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用
         比如:junit。由于运行时不需要所以 test范围依赖不会被打包。
5、system:需要手工添加,不推荐使用
        system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中JAR
        文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用

image.png

十一、本地仓库手工打入jar包

防止当前使用jar包在中心仓库没有


mvn install:install-file 
          -DgroupId=com.tjcu
          -DartifactId=ojdbc 
          -Dversion=14.0 
          -Dpackaging=jar 
          -Dfile=F:\百知笔记JavaWeb\JDBC\jdbc_day3\lib\mysql-connector-java-8.0.16.jar

说明:


image.png


手工导入自己创建的jar包:


image.png


十二、删除下载失败的命令

1、出现的问题

注意:maven所有下载失败的jar包标识:.lastUpdated结尾文件
这些下载失败的文件引起的问题:
1、下载想导入成功的jar包,失败的jar会占用位置,导致项目报错
2、占存储空间


image.png

image.png


2、下载失败jar包解决办法:

我们手写一个bat文件,使用循环的办法将本地仓库中下载失败的jar包进行自动删除

自动删除失败jar包的脚本,删除maven仓库中的失败文件.bat


image.png


脚本源码:


@echo off
rem create by sunhao(sunhao.java@gmail.com)
rem crazy coder
rem 这里写你的仓库路径
set REPOSITORY_PATH=D:\develop\Repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause


image.png

使用演示:

桌面.gif



十三、更新本地仓库中的索引

让idea知道你的本地仓库更新了

image.png


相关文章
|
Java Maven
【笔记04】下载、配置 MAVEN(配置 MAVEN 本地仓库)(MAVEN 的 setting.xml)
下载、配置 MAVEN(配置 MAVEN 本地仓库)(MAVEN 的 setting.xml)
4461 0
【笔记04】下载、配置 MAVEN(配置 MAVEN 本地仓库)(MAVEN 的 setting.xml)
|
2月前
|
Java 数据库连接 Maven
【Java笔记+踩坑】Maven高级
分模块开发、依赖传递与冲突问题、 可选依赖和排除依赖、聚合和继承、属性、多环境配置与应用、私服安装和使用
【Java笔记+踩坑】Maven高级
|
5月前
|
XML Java 数据库连接
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
173 0
|
IDE Java 测试技术
史上最详细的Maven使用笔记(建议收藏)
Maven 🍅 Java学习路线:搬砖工的Java学习路线 🍅 作者:程序员小王 🍅 程序员小王的博客:https://www.wolai.com/wnaghengjie/ahNwvAUPG2Hb1Sy7Z8waaF 🍅 扫描主页左侧二维码,加我微信 一起学习、一起进步 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 温馨提示:如果需要详细的线下笔记,PDF文件方便保存,可以关注公众号“程序员小王”回复“maven”领取PDF版本笔记
469 0
史上最详细的Maven使用笔记(建议收藏)
|
Kubernetes NoSQL Java
Maven 打包笔记
Maven 打包笔记
|
JSON Java 数据库连接
SSM+Maven高级+MybatisPlus万字笔记
SSM+Maven高级+MybatisPlus万字笔记
195 0
SSM+Maven高级+MybatisPlus万字笔记
|
XML 前端开发 Java
maven的ssm整合笔记
ssm整合笔记 一:ssm描述 二:整合ssm 2.1搭建maven工程(pom.xml导入相关的包) maven中央仓库:[maven中央仓库](https://mvnrepository.com/) 具体配置说明 2.2配置mybatis-config.xml文件(mybatis) 创建jdbc的资源文件 具体配置说明 2.3配置applicationContext.xm (Spring) 具体配置说明 2.4配置springMVC环境DispatcherServlet 详细配置 2.5配置web.xml环境 配置内容如下 总结
182 0
maven的ssm整合笔记
|
Java Maven
使用Maven命令行运行Java main方法| Java Debug 笔记
使用Maven命令行运行Java main方法| Java Debug 笔记
591 0
|
敏捷开发 Java 应用服务中间件
Java笔记:Maven软件依赖管理
Java笔记:Maven软件依赖管理
188 0
|
弹性计算 Java Maven
开发笔记20 | 多模块 Maven 工程部署
开发笔记20 | 多模块工程部署
13556 11