Maven的基础概念
请参考: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的基础概念相关推荐
- 【Maven】基础概念、仓库、构建与部属
1.常见的自动化构建工具有: make.ant.maven.gradle,gradle是目前最新的,maven是目前最常用的. Eclipse是一种半自动化构建工具,主要体现在把:java文件-> ...
- Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用
目录 一.基础概念 图数据库的概念 适用场景 数据模型 路径 点的VID 架构 二.初步使用 Windows安装Nebula-Graph服务 Nebula Console 连接 Nebula-Grap ...
- AspectJ切面自定义注解实现参数分组校验——基础概念(2)
AspectJ切面自定义注解实现参数分组校验--基础概念(2) 一.环境 二.创建AspectJ 2-1.基础概念 2-2.Pointcut规则表达式 2-3.切点标志符pointcut design ...
- Redis基础 概念 数据类型 常用指令 Jedis 持久化
Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...
- 谷粒商城项目篇1_分布式基础篇_分布式基础概念、环境搭建、创建项目
写在前面 为丰富项目经验,特此学习B站开源视频<全网最强电商教程<谷粒商城>对标阿里P6/P7,40-60万年薪>希望通过此学习能巩固所学,将技术栈串接起来. 此项目三个阶段 ...
- 谷粒商城项目1——分布式基础概念、环境搭建
二.分布式基础概念 1.微服务架构 一个单体应用开发为一套小服务,每个小服务在自己的进程中,并使用轻量级机制通信 拒绝大型单体应用,基于业务边界进行服务微化拆分,各个服务独立部署运行 2.集群.分布式 ...
- TCP/IP基础概念及通信过程举例
TCP/IP基础概念及通信过程举例 出现 上个世纪60年代,由于中央集中式网络的容灾性较弱,以美国国防部为中心的一家组织研究出分组交换网络.后来为了验证分组交换技术的实用性,ARPANET出现了,并且 ...
- Python+Dash快速web应用开发——基础概念篇
作者:费弗里 来源:Python大数据分析 ❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的新系 ...
- 理解 angular2 基础概念和结构 ----angular2系列(二)
前言: angular2官方将框架按以下结构划分: Module Component Template Metadata Data Binding Directive Service Dependen ...
最新文章
- debian NO_PUBKEY 8B48AD6246925553 解决方法
- keepalived+nginx实现nginx的高可用
- 16位汇编 call调用函数 通过栈来传递参数
- 机器学习 - [集成学习]Bagging算法的编程实现
- java基础杂谈(一)
- UBUNTU上新建GIT库
- Action为何要继承ActionSupport类
- 无线传感器网络(一)基于无锚节点的WSN系统设计
- 手机app的性能测试工具——GT、、Emmagee
- 微信自定义分享,分享至QQ和空间自定义内容正常、分享至微信时只有链接问题
- jinjia2模板语法
- 华为USG6320做双线-基于源地址的策略路由
- win7系统打不开chrome浏览器的一个真实有效解决办法
- 深度体验中国长城2020版笔记本电脑有感
- 【Python数据科学手册】Pandas——十二、处理时间序列
- 计算机网络(六)——因特网中的电子邮件
- 邱淑贞的女儿太漂亮啦,邱淑贞为她女儿站台!
- 数电基本触发器(全)
- 人工智能初识(百度ai)
- 基于短周期价量特征的多因子选股体系的实现(三)----因子计算
热门文章
- IE6、7 a链接内图片加滤镜后导致a标签链接失效问题解决
- JS-内置对象-Boolean-Number-String-Math-Date-Array
- NG Ng-template(模板元素)
- R7-1 What is a computer? (5 分)
- linux 上管理mysql_Linux下管理MySql
- 控制台输入一个整数,取该整数的各位数,判断其是否能被该整数整除,能则返回true,不能则返回false
- c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序
- 牛客网数据库SQL实战答案解析上篇
- 多线程---ReentrantLock
- gulpfile笔记