请参考:Maven史上最全总结

一 Maven的功能

1 传统开发(没有Maven)面临的问题

1 很多的模块,模块间有关系,手工管理很麻烦

2 开发中需要很多的jar包,需要先从网上找到,然后在添加,这很麻烦

3 管理很多jar包的同时还要考虑每个jar包的版本选择与替换问题,极其繁琐

4 管理jar包依赖,依赖即a,b,c…jar包依赖xxxjar包,或者说你导入了xxx包那么你的项目就依赖于xxx包,最典型性的就是druid,c3p0等jar包要依赖于数据库驱动jar包mysql驱动jar包,微服务中,有会存在很多的工具模块如entity,api…他们本身不是一个独立的模块,只有被其他模块依赖才有价值

2 maven如何解决以上问题的

1、自动下载jar的源代码和文档

2、考虑jar包的依赖关系,例如下载a.jar的同时会连同a所需要的jar包一起自动下载

3 、管理jar包版本,精准选择版本

4 、编译程序,生成.class文件

5 、测试代码是否正确

6 、打包文件生成jar/war文件

7 、帮你部署项目

8、4到7属于构建的过程,构建即完成项目的编译,测试,运行,打包,部署…构建过程如下

3 项目的构建

1 清理:将之前项目编译的内容删除,为新的项目做准备

2 编译:一次性批量编译大量代码,类似的javac一口气只能编译一个文件

3 测试:一次性批量测试大量代码,验证你的代码是否正确

4 报告:将测试信息生成报告文档

5 打包:把你项目中所有的class文件和配置文件等资源打包然后压缩,其中java项目生成.jar后缀名的压缩文件,web项目生成.war后缀名的压缩文件,这种压缩文件就是项目的结果

6 安装:把5生成的jar/war文件打包到本地的仓库

7 部署:程序安装好可以执行,通常部署到Linux环境下

4 重要概念

1 POM(Project Object Model):项目对象模型,项目对象模型对应于pom.xml文件,maven把每个项目都当做模型使用,通过它来控制maven构建对象的过程,管理jar依赖,maven命令的执行必须在这个文件下

2 预定的目录结构,maven的目录结构和文件位置都是规定好的,

3 坐标:字符串类型数据,标识资源位置

4 依赖管理(main function):管理项目所需的jar文件

5 仓库管理:你的资源存放的位置

6 生命周期:即maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署;

7 插件:执行maven时使用的工具即插件,一些jar包,真正完成功能的就是插件

命令:maven独立使用,通过这些命令完成生命周期的执行

8 继承:继承的特性是指建立一个父模块,我们项目中的多个模块都做为该模块的子模块,将各个子模块相同的依赖和插件配置提取出来,由父模块统一管理公共依赖的内容及版本,从而简化配置文件,父模块的打包方式必须为pom,否则无法构建项目。

9 聚合:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每个模块,但是随着项目的不断变大和复杂化,我们期望能够使用简单的操作来完成编译等工作,这时Maven给出了聚合的配置方式。所谓聚合,顾名思义,就是把多个模块或项目聚合到一起。

5 Maven的安装与配置

去官网获取安装包apache-maven-3.3.9-bin.zip,易错:容易获取到名字相近的错误安装包,这样一开始路就错了

验证方法①看压缩名字,易混淆的是apache-maven-3.3.9-src.zip与apache-maven-3.3.9-bin.zip,后者是正确的;

②看文件夹内容,以下是正确的文件内容

2、配置系统环境变量

  • 通过在系统环境变量中指定bin目录上一级的位置(apache-maven)来编辑一个系统属性M2_HOME
  • 在path中编辑环境变量
  • 验证配置是否成功,如下是成功的案例

6 Maven约定的目录(文件)结构,以项目hello为例

  ------/src​              ------/main   ~~#放主程序的java代码和配置文件,在此处开始受mvn compile命令影响;~~​                         ------/java   ~~#放置主程序包和java代码~~​                                  -----/com  ~~#组合包com.wzh~~​                                        -----/wzh  ~~#此处编写java文件~~​                                               ------ *.java文件 ​                         ------/resources  ~~#放置主程序配置文件(resources相当于被添加进类路径下的普通文件)~~​                         ------/webapp  ~~#如果是web项目还会有这个~~​                                    -----/web.xml  ~~#web的配置文件~~​             ------/test    ~~#放测试程序的代码和文件,在此处可执行 mvn test命令~~​                         ------/java   ~~#放置测试包和java测试代码~~​                          ------/resources  ~~#放置测试配置文件~~-------/pom.xml      ~~#maven的核心项目,必备~~-------/target    ~~#执行完mvn compile命令(一次性对src/main后面的全部java文件编译)存放新生成全部字节码文件~~​              -----classes    ~~#该包下的com.wzh内存放主程序main文件夹下编译生成的字节码文件~~​                    -----/com     ​                              ----/wzh  ​                                         ------ *.class文件    ​            -----test-classes    ~~#该包com.wzh下存放测试文件test目录下编译生成的字节码文件~~​                       -----/com   ​                                  ----/wzh   ​                                          ------ *.class文件​           ------maven-status ​                         ------maven-compiler-plugin​                                    ------compile​                                               -----default-compile​           ------ xxx.jar ~~#如果成功执行了mvn package及其以后的步骤就将主程序生成相应的jar包~~

1、mvn compile:会一次性编译Hello(项目名)\src\main\目录下的所有文件生成的结果集在Hello\target\classes下,结果集是字节码的形式

2、疑问:为何在第一次执行mvn compile的过程中有着大量的下载过程

原因:maven第一次执行编译命令默认会下载许多的插件(.jar形式),这都是maven工作必备的插件,

位置:默认位置是C:\User\20289(登录操作系统的用户名)\.m2\repository,当仓库中有了相关资源后再使用时直接拿来用即可,不再耗费时间

如何修改repository文件默认的安装路径:通过在maven的conf路径下的settings.xml中添加标签,技巧如下

  • 修改前最好先备份
  • 推荐指定本地仓库的位置和maven的安装程序在同一位置
  • 名称中不要出现中文
<localRepository>自定义repository安装路径,设置本地仓库</localRepository>

此外还需要在IDEA整合maven时设置一下本地仓库的位置;

3 为何要在Hello文件的目录下执行mvn命令? 因为执行命令必须要在pom.xml所在的目录下执行

二 仓库

作用:用来存放maven使用的jar包(各种插件)和我们使用的jar包(第三方jar包)

分类:①中央仓库,最权威的,所有开发人员共享的,网址是https://repo.maven.apache.org/ ②中央仓库镜像,向下划分,每个大洲,每个国家都有,③私服,公司内部,局域网中使用,不对外开放

具有用法:不需要人为参与,用户总是先访问最低级别仓库(本地仓库),如果在当前级别仓库获取不到,就向更高级的仓库请求资源,就这样一级级的请求直到最终找到或找不到

案例:开发人员需要使用mysql驱动 => maven首先检查本地仓库 => 私服 => 镜像 => 中央仓库

Maven的基础概念相关推荐

  1. 【Maven】基础概念、仓库、构建与部属

    1.常见的自动化构建工具有: make.ant.maven.gradle,gradle是目前最新的,maven是目前最常用的. Eclipse是一种半自动化构建工具,主要体现在把:java文件-> ...

  2. Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

    目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...

  3. AspectJ切面自定义注解实现参数分组校验——基础概念(2)

    AspectJ切面自定义注解实现参数分组校验--基础概念(2) 一.环境 二.创建AspectJ 2-1.基础概念 2-2.Pointcut规则表达式 2-3.切点标志符pointcut design ...

  4. Redis基础 概念 数据类型 常用指令 Jedis 持久化

    Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...

  5. 谷粒商城项目篇1_分布式基础篇_分布式基础概念、环境搭建、创建项目

    写在前面 为丰富项目经验,特此学习B站开源视频<全网最强电商教程<谷粒商城>对标阿里P6/P7,40-60万年薪>希望通过此学习能巩固所学,将技术栈串接起来. 此项目三个阶段 ...

  6. 谷粒商城项目1——分布式基础概念、环境搭建

    二.分布式基础概念 1.微服务架构 一个单体应用开发为一套小服务,每个小服务在自己的进程中,并使用轻量级机制通信 拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行 2.集群.分布式 ...

  7. TCP/IP基础概念及通信过程举例

    TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...

  8. Python+Dash快速web应用开发——基础概念篇

    作者:费弗里 来源:Python大数据分析 ❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的新系 ...

  9. 理解 angular2 基础概念和结构 ----angular2系列(二)

    前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...

最新文章

  1. debian NO_PUBKEY 8B48AD6246925553 解决方法
  2. keepalived+nginx实现nginx的高可用
  3. 16位汇编 call调用函数 通过栈来传递参数
  4. 机器学习 - [集成学习]Bagging算法的编程实现
  5. java基础杂谈(一)
  6. UBUNTU上新建GIT库
  7. Action为何要继承ActionSupport类
  8. 无线传感器网络(一)基于无锚节点的WSN系统设计
  9. 手机app的性能测试工具——GT、、Emmagee
  10. 微信自定义分享,分享至QQ和空间自定义内容正常、分享至微信时只有链接问题
  11. jinjia2模板语法
  12. 华为USG6320做双线-基于源地址的策略路由
  13. win7系统打不开chrome浏览器的一个真实有效解决办法
  14. 深度体验中国长城2020版笔记本电脑有感
  15. 【Python数据科学手册】Pandas——十二、处理时间序列
  16. 计算机网络(六)——因特网中的电子邮件
  17. 邱淑贞的女儿太漂亮啦,邱淑贞为她女儿站台!
  18. 数电基本触发器(全)
  19. 人工智能初识(百度ai)
  20. 基于短周期价量特征的多因子选股体系的实现(三)----因子计算

热门文章

  1. IE6、7 a链接内图片加滤镜后导致a标签链接失效问题解决
  2. JS-内置对象-Boolean-Number-String-Math-Date-Array
  3. NG Ng-template(模板元素)
  4. R7-1 What is a computer? (5 分)
  5. linux 上管理mysql_Linux下管理MySql
  6. 控制台输入一个整数,取该整数的各位数,判断其是否能被该整数整除,能则返回true,不能则返回false
  7. c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序
  8. 牛客网数据库SQL实战答案解析上篇
  9. 多线程---ReentrantLock
  10. gulpfile笔记