SpringBoot入门-(1) Maven【概念+流程】

server/2025/3/19 0:03:39/

SpringBoot入门-(1) Maven

动机

对于企业级大项目而言,需要手动导入很大Jar包,费时费力,且Jar包之间也可能存在依赖和冲突,这些关系导致Jar包之间想毛线团一样缠在一起,因此我们需要一个包管理系统帮我们自动下载导入Jar包并且管理好他们之间的依赖和避免冲突,由此Maven诞生。

  • Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理

安装与配置

  1. 下载Maven压缩包解压

  2. 打开MAVEN安装目录\settings.xml文件,修改<localRepository>标签,设置为新建的本地仓库地址

  3. 修改镜像,<mirror>标签添加阿里镜像,下载相关依赖包速度快

自动导包原理

从maven中获取Jar包时,maven先从本地仓库中查找,若存在则返回,若不存在从中央仓库(镜像)取包并保存到本地。

IDEA中配置

在IDEA中配置好相关路径后新建项目即可,如下

新建Maven项目:

创建后,项目目录树如下:

  • main:存放主程序

  • test:存放测试代码,单元测试等

  • java:存放源代码

  • resource:存放配置文件和资源文件

  • pom.xml文件:管理依赖,标识项目

pom.xml

pom文件中包含我们刚刚新建项目设置的项目坐标,jdk版本等相关信息:

我们可以在pom.xml文件中添加依赖,右侧刷新更新依赖即可(自动下载所需依赖包):

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

MAVEN构建工具可以让对象(项目)和对象之间产生关系

相关概念

坐标

  1. 使用GAV在Maven仓库中唯一确定一个Maven工程

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

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

    • version:当前模块的版本信息

     <groupId>com.wzu.maven</groupId><artifactId>Example</artifactId><version>0.0.1-SNAPSHOT</version>
  1. 通过坐标在仓库中查找jar包

    • 将GAV三个向量连起来即可

    • com/wzu/maven/Example/0.0.1-SNAPSHOT/Example-0.0.1-SNAPSHOT.jar(相对路径,前面是本地仓库路径)

    • 自己的maven工程要生成jar包供其他项目依赖和使用,执行mvn install命令后在对应路径下出现本项目的jar包(已进入仓库)

maven自动化部署

maven可以自动执行项目构建全流程:清理 -> 编译 -> 测试 -> 报告 -> 打包 -> 部署

项目关系

  • 依赖关系:标签<dependency>把另一个项目的 jar 引入到当前项目,则maven会自动下载另一个项目的 jar 所依赖的其他项目,不会出现手动导入jar缺失依赖的问题。

  • 聚合关系:

    • 大项目一般分为模块项目,子项目用<parent>标签继承父项目(pom类型,可删除父工程的src等文件夹),此时父项目起到的作用是统一版本等相关信息。

    • New -> Module 创建子模块,也会生成子模块对应的pom.xml。

    • 父项目的packing类型为pom,子项目一般为jar或war

    • 父项目统一管理子项目的依赖包版本,不真正引入JAR包,依赖放在<dependencyManagement>标签中

    • 子项目真正引入JAR包,而不用指定版本号,确保各个模块之间版本统一,修改方便

如果子项目和<groupId><version>与父项目相同,在子项目中可以不配置<groupId><version>

依赖范围

 <dependency><groupId>...</groupId?<artifactId>...</artifactId><scope>...</scope></dependency>   

注意到<scope>标签用于控制依赖的范围

  • compile (默认)

    • main目录下的Java代码可以访问这个范围的依赖

    • test目录下的Java代码可以访问这个范围的依赖

    • 部署到Tomcat服务器上运行时要放在WEB-INF的lib目录下

  • test

    • main目录下的Java代码不能访问这个范围的依赖

    • test目录下的Java代码可以访问这个范围的依赖

    • 部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

    • 例如:对junit的依赖。仅仅是测试程序部分需要。

  • provided

    • main目录下的Java代码可以访问这个范围的依赖

    • test目录下的Java代码可以访问这个范围的依赖

    • 部署到Tomcat服务器上运行时不会放在WEB-INF的lib目录下

    • 例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要


http://www.ppmy.cn/server/176090.html

相关文章

06.Python基础4

目录 元组 tuple 1.概述 2.可变数据为什么可变 3.不可变数据如何变化 4.基础操作 4.1创建元组 4.2定位元素 4.3遍历元组 4.4序列拆包 5.字符串 str 5.1定义 5.2编码 5.2.1字符集 5.2.2编码方式 5.2.3不可变 5.3序列 5.4字面值 5.4.1单引和双引号的区别 5.4.2…

jmeter 循环控制器遍历列表中的数据

jmeter遍历列表中的数据并使用if控制器做相应的处理 测试场景请求获取列表接口发送请求JSON Extractor 提取对应字段 Loop Controller计数器If Controller 测试场景 请求获取列表接口使用循环控制器遍历接口&#xff0c;根据state字段判断是否发起其他请求 请求获取列表接口 …

vue/react/vite前端项目打包的时候加上时间最简单版本,防止后端扯皮

如果你是vite项目&#xff0c;直接写一个vite的插件&#xff0c;通过这个插件可以动态注入环境变量&#xff0c;然后当打包的时候&#xff0c;自动注入这个时间到环境变量中&#xff0c;然后在项目中App.vue中或者Main.tsx中打印出来&#xff0c;这就知道是什么时候编译的项目了…

通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)

文章链接&#xff1a; https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能&#xff08;AGI&#xff09;研究中的一个关键挑战。为实现这一目标&#xff0c;许多现有方法&#xff08;例如世界模型&#xff09;旨在捕捉支配物理世界的基本原理&#xff0…

【Mac】安装 Parallels Desktop、Windows、Rocky Linux

一、安装PD 理论上&#xff0c;PD只支持试用15天&#xff01;当然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官网 下载 Install Parallels Desktop.dmg第二步&#xff0c;双击 Install Parallels Desktop.dmg 第三步&#xff0c;双击安装Paralle…

SpringBoot快速入门

文章目录 Spring boot框架Spring Boot特性的核心快速搭建Spring Boot项目Maven依赖管理依赖配置依赖传递依赖排除Maven Help插件 Maven仓库本地仓库中央仓库私服配置国内源Spring Boot的jar包和普通jar包的区别 什么是脚手架&#xff1f;目录介绍为什么要以继承父工程的方式引入…

企业安全——密码学基础

0x00 前言 密码学的内容一直都是零零散散的&#xff0c;学一遍忘一遍&#xff0c;对于这些很少用到的内容&#xff0c;只能这样子去进行重复&#xff0c;效率低从此没有效率会稍微好一点。 总会比说出base64是一种加密方式贻笑大方的好一点。 0x01 密码学的目的 密码学的主要…

kettle的转换中sql不按设计顺序执行原因分析与解决办法

1.问题描述 如图&#xff0c;通过箭头指定多个SQL脚本的先后顺序&#xff0c;实际各个sql没有阻塞&#xff0c;没有等待&#xff0c;几乎是并行&#xff0c;与预期不符。 2.原因 转换文件&#xff08;.ktr&#xff09; 用于控制数据的流量&#xff0c;比如表输入指向表输出节…