【maven】maven基础知识入门

2023-05-16

maven

文章目录

  • maven
    • 什么是maven
    • 为什么使用maven
    • 项目构建过程的几个主要环节
    • maven核心概念
      • 如何通过坐标到仓库中查找jar包

什么是maven

Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和 依赖管理。Maven 这个单词的本意是:专家,内行。

为什么使用maven

  • 添加第三方jar包

在今天的 JavaEE 开发领域,有大量的第三方框架和工具可以供我们使用。要使用这些 jar 包最简单 的方法就是复制粘贴到 WEB-INF/lib 目录下。但是这会导致每次创建一个新的工程就需要将 jar 包重复复 制到 lib 目录下,从而造成工作区中存在大量重复的文件,让我们的工程显得很臃肿。 而使用 Maven 后每个 jar 包本身只在本地仓库中保存一份,需要 jar 包的工程只需要以坐标的方式 简单的引用一下就可以了。不仅极大的节约了存储空间,让项目更轻巧,更避免了重复文件太多而造成 的混乱。

  • 获取第三方jar包

JavaEE 开发中需要使用到的 jar 包种类繁多,几乎每个 jar 包在其本身的官网上的获取方式都不尽相 同。为了查找一个 jar 包找遍互联网,身心俱疲,没有经历过的人或许体会不到这种折磨。不仅如此, 费劲心血找的 jar 包里有的时候并没有你需要的那个类,又或者又同名的类没有你要的方法——以不规 范的方式获取的 jar 包也往往是不规范的。 使用 Maven 我们可以享受到一个完全统一规范的 jar 包管理体系。你只需要在你的项目中以坐标的 方式依赖一个 jar 包,Maven 就会自动从中央仓库进行下载,并同时下载这个 jar 包所依赖的其他 jar 包

——规范、完整、准确!一次性解决所有问题!

  • jar包之间的依赖关系

引入 Maven 后,Maven 就可以替我们自动的将当前 jar 包所依赖的其他所有 jar 包全部导入进来, 无需人工参与,节约了我们大量的时间和精力。用

  • 将项目拆分成多个工程模块

随着 JavaEE 项目的规模越来越庞大,开发团队的规模也与日俱增。一个项目上千人的团队持续开 发很多年对于 JavaEE 项目来说再正常不过。那么我们想象一下:几百上千的人开发的项目是同一个 Web 工程。那么架构师、项目经理该如何划分项目的模块、如何分工呢?这么大的项目已经不可能通过 package 结构来划分模块,必须将项目拆分成多个工程协同开发。多个模块工程中有的是 Java 工程,有 的是 Web 工程。 那么工程拆分后又如何进行互相调用和访问呢?这就需要用到 Maven 的依赖管理机制。大家请看 我们的 Survey 调查项目拆分的情况:

在这里插入图片描述

项目构建过程的几个主要环节

  • 清理:删除以前的编译结果,为重新编译做好准备。
  • 编译:将Java源程序编译为字节码文件
  • 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性
  • 报告:在每一次测试后以标准的格式记录和展示测试结果
  • 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,web工程对应war包。
  • 安装:将maven环境下特指打包的结果——jar包或war包安装到本地仓库中
  • 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行

maven核心概念

  • POM

    Project Object Model:项目对象模型。将Java工程的相关信息封装为对象作为便于操作和管理的模型。Maven工程的核心配置。

  • 约定的目录结构

  • 坐标

    • groupid:公司或组织的域名倒序+当前项目名称

    • artifactid:当前项目的模块名称

    • version:当前模板的版本

      如何通过坐标到仓库中查找jar包

      将以上三个向量连起来:

      groupid+artifactgid+version

      以连起来的字符串作为目录结构到仓库中查找,如

      com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

  • 依赖管理

    ​ 1. 引入依赖:

    <dependency>
    <groupId>com.atguigu.maven</groupId> 
     <artifactId>Hello</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    <scope>compile</scope>
    </dependency>
    

    ​ 2.依赖的范围

    compiletestprovided
    主程序×
    测试程序
    参与部署××
  • 仓库管理

    在这里插入图片描述

    • 本地仓库:为当前本地电脑上的maven工程服务
    • 远程仓库:
      • 私服:架设在当前局域网环境下,为当前局域网范围内的所有maven工程服务
      • 中央仓库:架设在Internet上,为全世界所有maven工程服务
      • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量,减轻中央仓库压力,同时更快的响应用户请求
  • 生命周期

    Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。

    maven有三套相互独立的生命周期,分别是:

    • Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

    • Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。

    • Site Lifecycle 生成项目报告,站点,发布站点。

      使用:mvn+生命周期名称(即把Lifecycle 去掉)

    • clean生命周期:

      • pre-clean: 执行一些需要在clean之前完成的工作
      • clean: 移除所有上一次构建生成的文件
      • post-clean 执行一些需要在clean之后立刻完成的工作
    • site生命周期

      • pre-site 执行一些需要在生成站点文档之前完成的工作
      • site 生成项目的站点文档
      • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
      • site-deploy 将生成的站点文档部署到特定的服务器上
  • 插件和目标

  • 继承

    由于非compile范围的依赖信息是不能在“依赖链”中传递的,所以有需要的工程只能单独配置,

    示例:

    1. ​ 在子工程中引用父工程

      <parent>
      	<groupId>com.atguigu.maven</groupId>
      	<artifactId>Parent</artifactId>
      	<version>0.0.1-SNAPSHOT</version>
      	<!-- 指定从当前子工程的pom.xml文件出发,查找父工程的pom.xml的路径 -->
      	<relativePath>../Parent/pom.xml</relativePath>
      </parent>
      
    2. 在父工程中管理依赖

      <dependencyManagement>
      <dependencies>
      <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.9</version>
      <scope>test</scope>
      </dependency>
      </dependencies>
      </dependencyManagement>
      
    3. 在子项目中重新指定需要的依赖,删除范围和版本号

      <dependencies>
      <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      </dependency>
      </dependencies>
      
      
  • 聚合

    为什么要使用聚合?

    1 为什么要使用聚合? 将多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后也需要逐个手动进 行 clean 操作。而使用了聚合之后就可以批量进行 Maven 工程的安装、清理工作。

    如何配置聚合?

    在总的聚合工程中使用 modules/module 标签组合,指定模块工程的相对路径即可

    <modules>
    <module>../Hello</module>
    <module>../HelloFriend</module>
    <module>../MakeFriends</module>
    </modules>
    
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【maven】maven基础知识入门 的相关文章

  • 面试问题总结——关于OpenCV

    整理了一下网上和我面试中遇到的关于OpenCV相关的问题 其中因为我的简历中有个项目用到了特征点检测相关的知识 xff0c 所以整理了SIFT SURF和FLANN 有些知识点也不深入 xff0c 对于写的不对的地方 xff0c 欢迎指正
  • 全排列(C++)

    递归法实现全排列 全排列就是指n个元素随机组合 xff0c 且不重复的所有排列方式 比如 1 xff0c 2 xff0c 3 xff0c 就有123 xff0c 132 xff0c 213 xff0c 231 xff0c 312 xff0c
  • 海康威视工业相机IP设置说明

    整理电脑文件时翻到的 xff0c 记录下来方便以后查阅 第一步 先修改本机IP步骤如下 xff1a 1 打开本地连接 2 点击属性 3 选择协议 gt gt 点击属性 4 选择使用下面IP地址 5 自己设置IP地址 xff0c 然后点击确认
  • 关于Aruco标记的理解并对其进行姿态估计的可视化显示

    目录 1 什么是ArUco标记1 1 Marker和字典 2 通过使用OpenCV生成ArUco标记图3 检测Aruco标记4 一些API的介绍getPredefinedDictionary drawMarker estimatePoseS
  • 关于手眼标定的误差计算

    之前做的眼在手上的手眼标定 xff0c 流程结束后 xff0c 会得到相机坐标系到机械臂末端坐标系的变换关系T cam2end 我一般直接量取机械臂末端到相机的直线距离来校对z轴方向的距离 xff0c 但只是做个估算 xff0c 并未进行精
  • 在Ubuntu 16.04上安装和配置VNC

    目录 1 VNC客户端配置2 VNC服务端配置2 1 本机远程连接服务器2 2 更新依赖包2 3 安装Xfce桌面环境2 4 安装tightvncserver 3 客户端VNC连接服务端4 关于VNC的一些指令5 设置VNC开机自启动 1
  • ffmpeg中av_find_best_stream()函数的使用

    av find best stream xff08 xff09 函数就是要获取音视频对应的stream index span class token macro property span class token directive has
  • ubuntu16.04+GTX1650 安装cuda,驱动会自动安装!+安装cudnn

    补充一句 只是做深度学习跑模型的话 xff0c 装完驱动后就可以了 xff0c 不需要额外按照NVIDIA官网的教程配置CUDA和CUDNN 我们的代码实际用到的是python环境下的包 比如我用anaconda配置环境 xff0c 直接在
  • ADRC线性自抗扰控制感应电机矢量控制调速Matlab Simulink仿真

    ADRC线性自抗扰控制感应电机矢量控制调速Matlab Simulink仿真 1 模型简介 模型为基于线性自抗扰控制 xff08 LADRC xff09 的感应 xff08 异步 xff09 电机矢量控制仿真 xff0c 采用Matlab
  • xubuntu16.04下安装向日葵并设置开机自启

    1 安装Sunlogin 下载 SunloginClient 11 0 1 44968 amd64 deb 解压后将SunloginClient 11 0 1 44968 amd64 deb拷贝到目标设备上 xff0c 终端运行 xff1a
  • xubuntu16.04下安装turboVNC并设置开机自启(TurboVNC + VirtualGL)

    关于TightVNC的安装和使用可参考 xff1a 在Ubuntu 16 04上安装和配置VNC 使用VNC过程中遇到的问题总结 为什么使用TurboVNC xff1f 虽然TightVNC可以进行远程桌面登录 xff0c 但如果运行有界面
  • xubuntu16.04安装x11vnc

    内容 1 安装x11vnc1 1 设置x11vnc的连接密码1 2 启动x11vnc服务 2 设置x11vnc开机自启动3 如何解决x11vnc远程连接后操作卡顿 xff0c cpu占用高 xff1f 1 安装x11vnc 有网络的情况下直
  • 服务器以root身份登录

    终端输入 su root xff0c 然后输入密码就行了
  • Linux系统下----make命令详解,地球人都在用的“编译工具”

    Make命令 1 功能介绍2 准备工作 写法和用法3 注意事项4 买家秀 5 其他 1 功能介绍 make命令是用来自动完成大批量源文件的编译工作的维护工具 xff1b 能够建立不同文件之间的依赖关系 xff1b 自动识别被修改的源文件并重
  • 小四轴实验:空心杯电机驱动

    单片机的io口带负载能力是较弱的 xff0c 即输出电流较小 xff0c 不能直接用io口驱动电机 事实上 xff0c 单片机的io口接大功率的LED灯都是比较困难的 因此我们需要外部电源供电 xff0c 通过驱动电路驱动电机转动 对于大型
  • 小四轴实验:四旋翼无人机飞行原理

    转速与飞行方式说明 参考博客 https blog csdn net qq 27270029 article details 79877022 https blog csdn net sinat 29315697 article detai
  • ST-LINK JLINK JTAG SWD接线图

  • PID参数起什么作用

    PID控制中有P I D三个参数 只有明白这三个参数的含义和作用才能完成控制器PID参数整定 让控制器到达最佳控制效果 昌晖仪表在本文给大家介绍PID控制中P I D参数的作用 比例作用 比例控制器实际上就是个放大倍数可调的放大器 要说明的
  • 如何在I2C通信中同时和多个从机通信

    对于不同地址的模块就不用多说了 xff0c 直接分别对其地址进行通信即可 那么若拿到相同地址的模块 xff0c 或者直接是相同的多个模块怎么办呢 xff1f 方法一 xff1a xff08 内置了两种地址的模块 xff09 对于内置了两种地
  • CUDA是什么-CUDA简介

    CPU GPU CPU CPU xff08 Central Processing Unit xff09 是一块超大规模的集成电路 xff0c 是一台计算机的运算核心 xff08 Core xff09 和控制核心 xff08 Control

随机推荐

  • 自动驾驶传感器评估 ——IMU惯性测量单元

    自动驾驶传感器评估 IMU惯性测量单元 前言 对于自动驾驶来说 xff0c 高精度定位必不可少 为了让自动驾驶系统更高频率的获取定位信息 xff0c 就必须引入更高频率的传感器 xff0c 这时就体现出了惯性测量单元 xff08 Inert
  • 洛谷:P1238 走迷宫(DFS)

    题目描述 有一个mn格的迷宫 表示有m行 n列 xff0c 其中有可走的也有不可走的 xff0c 如果用1表示可以走 xff0c 0表示不可以走 xff0c 文件读入这m n个数据和起始点 结束点 起始点和结束点都是用两个数据来描述的 xf
  • 通过ajax进行文件上传及回显并解决后台返回图片路径却不能直接显示问题

    1 选中图片立刻回显 前端代码 lt div class 61 34 row 34 id 61 34 uplodFilel 34 gt lt div class 61 34 col md 8 34 gt lt label gt 上传身份证正
  • STM32CubeMX配置串口

    配置串口 1 在Piont amp Configuration中的A gt Z找到USART1 xff1b 2 第一个选项Mode是用来设置串口模式或关闭串口 xff0c 第二个选项Hardware Flow Control用来开启硬件流控
  • postman汉化教程(历史老版本)

    目录 1 下载对应版本的postman 2 替换url中对应的版本号 3 下载postman对应版本的汉化包 4 打开postman文件位置 5 打开后寻找 app 9 12 2 resources 目录 然后将下载好的压缩包解压 6 重启
  • c++学习 :函数形参4种传递形式:(int a)(int &a)(int *a)(int *& a)

    c 43 43 学习 xff1a 函数形参4种传递形式 1 void func int para 2 void func int amp para 3 void func int pointer 4 void func int amp po
  • RTOS关于SysTickHandler()

    我们知道FREERTOS会自动装载PendSV Handler 和SVC Handler 函数 xff0c 这里我们希望自己对其从新定义 xff0c 故做如下处理 include 34 delay h 34 include 34 sys h
  • STM32 正点原子学习(个人学习)

    系统执行一般只设置一次优先级分组 设置好之后不再改变 xff0c 不然会导致混乱 抢占优先级先进行判断响应优先级后 xff0c 同级别抢占优先级但高级别的响应优先级也不能打断同级别抢占优先级低级别的响应优先级 系统中断优先级分组函数 xff
  • Spring AOP使用案例

    AOP 原理 代理模式 需求背景 返回前端的用户信息包含手机号等敏感内容 xff0c 并在系统上已经有大量接口 现拿到需求 xff0c 需要在返回前端的对象中 xff0c 找到手机号的属性并将手机号加密 现状 xff1a 分散在各处的接口中
  • 【JVM】说一下jvm运行时数据区域

    说一下jvm运行时数据区域 文章目录 说一下jvm运行时数据区域程序计数器栈本地方法栈堆方法区运行时常量池直接内存 本篇文章总结自 深入理解Java虚拟机 程序计数器 程序计数器是一块较小的内存空间 xff0c 它可以看作是当前线程所执行的
  • ffmpeg错误总结

    av err2str 在C 43 43 项目中 xff0c 使用FFmpeg中的av err2str函数时 xff0c 报错 解决 xff1a 调用该函数的文件开始加上以下代码 xff1a span class token keyword
  • 【JVM】垃圾回收算法

    垃圾回收算法 文章目录 垃圾回收算法标记 清除算法标记 复制算法Appel式回收 标记整理算法混合使用 标记 清除算法 标记 清除算法是最早出席那也是最基础的垃圾收集算法 xff0c 是1960年由Lisp之父John McCarthy所提
  • 【JVM】如何判决一个对象的生死

    如何判决一个对象的生死 文章目录 如何判决一个对象的生死如何判断对象是否存活 xff08 应该被回收 xff09 引用计数法可达性分析算法引用生存还是死亡 如何判断对象是否存活 xff08 应该被回收 xff09 引用计数法 很多教科书判断
  • 【大前端】vue,jq,uniapp ajax默认的请求格式

    vue jq uniapp ajax默认的请求格式 文章目录 vue jq uniapp ajax默认的请求格式常见的内容类型 xff08 content type xff09 jq默认请求格式默认内容类型 xff1a multipart
  • 【大前端】uniapp上传图片

    uniapp上传图片 看本篇文章之前建议看下本篇文章 直接上代码 uni chooseImage success chooseImageRes 61 gt 获取文件的路径 const tempFilePaths 61 chooseImage
  • 【JavaWeb】el表达式与jstl标签的使用

    el表达式与jstl标签的使用 el表达式 简介 el表达式的全称 xff1a Expression Language 是表达式语言 EL表达式的作用 xff1a EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出 因
  • 【Java】说说Java的线程池

    说说Java的线程池 文章目录 说说Java的线程池为什么要使用线程池ThreadPoolExecutor提供的构造方法解析 线程池处理流程 为什么要使用线程池 创建 销毁线程需要消耗系统资源 xff0c 线程池可以复用已创建的线程控制并发
  • 【Java】Java的类加载器和双亲委派模型

    文章目录 类加载器双亲委派模型 类加载器 对于任意一个类 xff0c 都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性 xff0c 每一个类加载器 xff0c 都有一个独立的类名称空间 比较两个类是否 34 相等
  • 【git】说说git的基础命令

    git的基础命令 命令名称作用git config global user name 用户名设置用户签名git config global user email 邮箱设置用户签名git init初始化本地库git status查看本地库状态
  • 【maven】maven基础知识入门

    maven 文章目录 maven什么是maven为什么使用maven项目构建过程的几个主要环节maven核心概念如何通过坐标到仓库中查找jar包 什么是maven Maven 是 Apache 软件基金会组织维护的一款自动化构建工具 xff