当前位置: 首页 > article >正文

【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven

Maven

Maven核心

Maven概述

  • 定义:

    Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目,基于项目对象模型(POM,project object model)的概念,通过一小段描述信息来管理项目的构建。官网:http://maven.apache.org/

  • 作用:

    • 依赖管理:方便快捷地管理依赖的资源(jar包)
    • 项目构建:标准化的跨平台(Linux、Windows、MacOS)的自动化项目构建方式
    • 统一项目结构:提供标准、统一的项目结构
  • 结构:

    • POM
    • dependencies
    • 构建生命周期/阶段
    • 仓库:用于存储和管理各种jar包
      • 本地仓库(1):自己计算机上的一个目录
      • 远程仓库(私服,2):一般由公司团队搭建的私有仓库。
      • 中央仓库(3):由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/

IDEA集成Maven

  • 创建Maven项目

    • 配置Maven环境(全局)
  • Maven坐标

    • Maven中的坐标是资源(jar)的唯一标识,通过该坐标可以唯一定位资源位置。
    • 使用坐标来定义项目或引入项目中需要的依赖
    • 主要组成
      • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
      • artifactId:定义当前Maven项目名称(通常是模块名称)
      • version:定义当前项目版本号(约定规范)
        • SNAPSHOT:功能不稳定、尚处于开发中的版本,即快照版本
        • RELEASE:功能趋于稳定、当前更新停止,可以用于发行的版本
  • 导入Maven项目

    建议将要导入的maven项目复制到你的项目目录下

    建议选择maven项目的pom.xml文件进行导入(后续的继承与集合,如果一个模块关联了其他模块,选择pom可以一次性将其他相关模块一起导入)

    • File -> Project Structure -> Modules -> Import Module -> 选择maven项目的pom.xml
    • Maven面板 -> + (Add Maven Projects) -> 选择maven项目的pom.xml

依赖管理

注意:一旦依赖配置变更了,记得重新加载

注意:引入的依赖本地仓库不存在,记得联网

  • 依赖:指当前项目运行所需要的jar包,一个项目中可以引入多个依赖。

  • 配置:

    • 在pom.xml中编写<dependencies>标签
    • <dependencies>标签中使用<dependency>引入坐标
    • 定义坐标的groupId, artifactId, version
    • 点击刷新按钮,引入最新加入的坐标
    • 如果不知道依赖的坐标信息,可以到官网中搜索
    • 依赖传递:如果A依赖了B,B依赖了C,C依赖了D,如果引入A,会引入ABCD
  • 排除依赖

    • 排除依赖:指主动断开依赖的资源,被排除的资源无需指定版本

      <exclusion></exclusion>
      

生命周期

Maven的生命周期就是为了对所有的maven项目构建过程进行抽象和统一。

Maven中有相互独立的3套生命周期:

下文只列出了重要的5个生命周期,实际上还有很多

在同一套生命周期中,当运行后面的阶段时,前面的阶段都会运行

  • clean:清理工作
    • clean:移除上一次构建生成的文件
  • default:核心工作,如编译、测试、打包、安装、部署等
    • compile:编译项目源代码
    • test:使用合适的单元测试框架运行测试(junit)
    • package:将编译后的文件打包,如:jar、war等
    • install:安装项目到本地仓库
  • site:生成报告、发布站点等

执行生命周期的两种方式:

  • 在idea中,右侧的maven工具栏,选中对应的生命周期,双击执行。
  • 在命令行中,通过命令执行。

单元测试

测试

一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。

阶段划分

  • 单元测试(白盒测试)
    • 介绍:对软件的基本组成单位进行测试,最小测试单位。
    • 目的:检验软件基本组成单位的正确性。
    • 测试人员:开发人员
  • 集成测试(灰盒测试)
    • 介绍:将已分别通过测试的单元,按设计要求组合成系统或子系统,再进行的测试。
    • 目的:检查单元之间的协作是否正确。
    • 测试人员:开发人员
  • 系统测试(黑盒测试)
    • 介绍:对已经集成好的软件系统进行彻底的测试。
    • 目的:验证软件系统的正确性、性能是否满足指定的要求。
    • 测试人员:测试工程师
  • 验收测试(黑盒测试)
    • 介绍:交付测试,时针对用户需求、业务流程进行的正式的测试。
    • 目的:验证软件系统是否满足验收标准。
    • 测试人员:客户/需求方

测试方法

  • 白盒测试
    • 清楚软件内部结构、代码逻辑
    • 用于验证代码、逻辑正确性
  • 黑盒测试
    • 不清楚软件内部结构、代码逻辑
    • 用于验证软件的功能、兼容性等方面
  • 灰盒测试
    • 结合了白盒、黑盒测试的特点,既关注软件的内部结构又考虑外部表现(功能)
单元测试
快速入门

针对最小的功能单元(方法),编写测试代码对其正确性进行测试

JUnit:最流行的Java测试框架之一,提供了一些功能,方便程序进行单元测试(第三方公司提供)

main方法测试

  • 测试代码与源代码未分开,难以维护
  • 一个方法测试失败,影响后面方法
  • 无法自动化测试,得到测试报告

JUnit单元测试(推荐)

  • 测试代码与源代码分开,便于维护

  • 可根据需要进行自动化测试

  • 可自动分析测试结果,产出测试报告(通过:绿色,失败:红色)

  • 一个测试方法执行失败,不会影响其它测试方法

  • 步骤

    • 在pom.xml中,引入JUnit的依赖
    • 在test/java目录下,创建测试类,并编写对应的测试方法,并在方法上声明@Test注解。
  • 命名规范

    类(规范):XxxxTest

    方法(规定): @Test <br> public void testXxxx

断言

JUnit提供的辅助方法,用来帮我们确定被测试的方法是否按照预期的效果正常工作,这种方式称为断言。

  • 单元测试方法运行不报错,不代表业务方法没问题
  • 通过断言可以检测方法运行结果是否和预期一致,从而判断业务方法的正确性
  • Assertions.assertXxxx(…)
断言方法描述
Assertions.assertEquals(Object exp, Object act, String msg)检查两个值是否相等,不相等就报错
Assertions.assertNotEquals(Object unexp, Object act, String msg)检查两个值是否不相等,相等就报错
Assertions.assertNull(Object act, String msg)检查对象是否为null,不为null就报错
Assertions.assertNotNull(Object act, String msg)检查对象是否不为null,为null就报错
Assertions.assertTrue(boolean condition, String msg)检查对象是否为true,不为true就报错
Assertions.assertFalse(boolean condition, String msg)检查对象是否为false,不为false就报错
Assertions.assertThrows(Class expType, Executable exec, String msg)检查程序运行抛出的异常,是否符合预期

上述方法形参中的最后一个参数msg,表示错误提示信息,可以不指定(有对应的重载方法)

常见注解

JUnit还提供了常见注解,还增强其功能,常见的注解有:

0注解说明备注
@Test测试类中的方法用它修饰才能成为测试方法,才能启动执行单元测试
@ParameterizedTest参数化测试的注解(可以让单个测试运行多次,每次运行时仅参数不同)用了该注解就不需要@Test注释了
@ValueSource参数化测试的参数来源,赋予测试方法参数与参数化测试注解配合使用
@DisplayName指定测试类、测试方法显示的名称(默认为类名、方法名)
@BeforeEach用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次初始化资源(准备工作)
@AfterEach用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次释放资源(清理工作)
@BeforeAll用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次初始化资源(准备工作)
@AfterAll用来修饰一个静态方法,该方法会在所有测试方法之后只执行一次释放资源(清理工作)
单元测试-企业开发规范
  • 原则:编写测试方法是,要尽可能覆盖业务方法中所有可能的情况(尤其是边界值)。
  • 使用with Coverage检测覆盖率。

依赖范围

  • 依赖的jar包,默认情况下,可以在任何地方使用。可以通过<scope>xxx</scope>设置其作用范围。

  • 作用范围:

    • 主程序范围有效。(main文件夹范围内)

    • 测试程序范围有效。(test文件夹范围内)

    • 是否参与打包运行。(package指令范围内)

      scope值主程序测试程序打包(运行)范例
      compile(默认)YYYlog4j
      test-Y-junit
      providedYY-servlet-api
      runtime-YYjdbc驱动

Maven常见问题解决方案

  • Maven面板出现红色下划线,刷新无用

    • 产生原因:由于网络原因,依赖没有下载完整导致的,在maven仓库中生成了xxx.lastUpdated文件,该文件不删除,不会再重新下载

    • 解决方案:通过命令(del /s *.lastUpdated)批量递归删除指定目录下的xxx.lastUpdated文件,删除之后重新加载项目即可

      重新加载下载依赖之后如果仍然报红,关闭IDEA重载项目

相关文章:

【黑马JavaWeb+AI知识梳理】后端Web基础01 - Maven

Maven Maven核心 Maven概述 定义&#xff1a; Maven是一款用于管理和构建Java项目的工具&#xff0c;是apache旗下的一个开源项目&#xff0c;基于项目对象模型&#xff08;POM&#xff0c;project object model&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的…...

港大今年开源了哪些SLAM算法?

过去的5个月&#xff0c;香港大学 MaRS 实验室陆续开源了四套面向无人机的在线 SLAM 框架&#xff1a;**FAST-LIVO2 、Point-LIO&#xff08;grid-map 分支&#xff09; 、Voxel-SLAM 、Swarm-LIO2 **。这四套框架覆盖了单机三传感器融合、高带宽高速机动、长时间多级地图优化以…...

Spring框架(1)

Spring框架是Java企业级开发中最受欢迎的框架之一&#xff0c;它通过简化开发流程、降低耦合度&#xff0c;让开发者能够更专注于业务逻辑的实现。本文将带你了解Spring框架的核心概念和基本用法。 一、Spring框架简介 Spring是一个轻量级的开源Java开发框架&#xff0c;由Ro…...

边缘计算:技术概念与应用详解

引言 随着物联网&#xff08;IoT&#xff09;、5G 和人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;传统的云计算架构在处理海量数据和实时计算需求时逐渐显现出瓶颈。边缘计算&#xff08;Edge Computing&#xff09;作为一种新兴的计算范式&#xff0c;通过将计…...

Godot4.3类星露谷游戏开发之【昼夜循环】

千里之行&#xff0c;始于足下 文章目录 零、 笔记一、创造时间二、产生颜色三、搭建测试环境四、测试五、免费开源资产包 零、 笔记 为了让游戏可以拥有白天和黑夜&#xff0c;我们需要像上帝一样&#xff0c;在游戏中创造时间的规则&#xff0c;并在不同的时间点产生不同的颜…...

数据结构每日一题day17(链表)★★★★★

题目描述&#xff1a;假设有两个按元素值递增次排列的线性表&#xff0c;均以单链表形式存储。请编与算法将这两个单链表归并为一个按元素值依次递减排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。 算法思想&#xff1a; 1.初始化&#xff1a; 创建一个新…...

深入解析多线程与多进程:从理论到Python实践

一、并发编程的核心概念 1.1 多线程的本质与实现原理 多线程&#xff08;Multithreading&#xff09;是指在一个进程内创建多个执行流&#xff0c;共享同一进程资源&#xff08;如内存空间、文件句柄等&#xff09;的编程模型。其核心特征包括&#xff1a; ​​资源共享​​…...

当当网Top500书籍信息爬取与分析

爬取当当网的Top500书籍信息&#xff0c;并对书籍的评价数量进行排序&#xff0c;然后绘制前十名的条形图&#xff0c;然后对各个出版社出版的书籍数量进行排序&#xff0c;绘制百分比的饼图 # 导入所需的模块 import re # 正则表达式模块&#xff0c;用于提取文本中的特定模…...

Android Framework 记录之二

23、services目录 文件描述class AlarmManagerService extends IAlarmManager.Stub {//定时管理服务public class AppOpsService extends IAppOpsService.Stub { // 程序选项服务public class AppsLaunchFailureReceiver extends BroadcastReceiver { //app启动失败广播class A…...

RabbitMQ 幂等性与消息可靠性保障

一、引言 RabbitMQ 是一个广泛应用于软件开发、数据传输、微服务等领域的高效、可靠的开源消息队列系统1。在分布式系统中&#xff0c;保证消息的可靠传递和幂等性是至关重要的&#xff0c;它能够确保系统在各种复杂情况下的稳定性和数据的准确性。 二、消息可靠性保障 &…...

neo4j图数据库基本概念和向量使用

一.节点 1.新建节点 create (n:GroupProduct {name:都邦高保额团意险,description: "保险产品名称"} ) return n CREATE&#xff1a;Neo4j 的关键字&#xff0c;用于创建新节点或关系。 (n:GroupProduct)&#xff1a; n 是节点的临时别名&#xff08;变量名&#…...

修复笔记:获取 torch._dynamo 的详细日志信息

一、问题描述 在运行项目时&#xff0c;遇到与 torch._dynamo 相关的报错&#xff0c;并且希望获取更详细的日志信息以便于进一步诊断问题。 二、相关环境变量设置 通过设置环境变量&#xff0c;可以获得更详细的日志信息&#xff1a; set TORCH_LOGSdynamo set TORCHDYNAM…...

Windows平台下的Qt发布版程序打包成exe可执行文件(带图标)|Qt|C++

首先先找一个可执行文件的图标 可以去阿里的矢量图库里找 iconfont-阿里巴巴矢量图标库 找到想要的图标下载下来 此时的图标是png格式的&#xff0c;我们要转到icon格式的文件 要使用到一个工具Drop Icons_2.1.1.rar - 蓝奏云 生成icon文件后把icon文件放到你项目的根目录下…...

PDF解析新范式:Free2AI工具实测

在数字化浪潮中,PDF文件已成为企业、政府及个人存储与传递信息的核心载体。然而,PDF内容的提取与处理始终是行业痛点——无论是合同解析、研究报告整理,还是大规模知识库构建,传统方法常面临效率低、成本高、准确率不足等问题。Free2AI基于智能体技术与大模型算力,为PDF内…...

CSS--图片链接垂直居中展示的方法

原文网址&#xff1a;CSS--图片链接垂直居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接垂直居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content&quo…...

聊聊Spring AI autoconfigure模块的拆分

序 本文主要研究一下Spring AI autoconfigure模块的拆分 v1.0.0-M6版本 (base) ➜ spring-ai-spring-boot-autoconfigure git:(v1.0.0-M6) tree -L 9 . ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── org │ │ │ └…...

【Elastsearch】如何获取已创建的api keys

『这种方法其实无法获取秘钥&#xff0c;只是获取了秘钥的名字等信息』 在Elasticsearch中&#xff0c;可以通过API获取已创建的API密钥&#xff08;API keys&#xff09;。以下是具体步骤和示例&#xff1a; 1.使用GET请求获取API密钥 Elasticsearch提供了GETAPI&#xff0c;用…...

Flutter异步原理-Future

前言 在 Dart 中&#xff0c;谈到异步就离不开 Future。无论是 .then()、还是 await&#xff0c;它们背后运作的都是一个私有实现类&#xff1a;_Future &#xff0c;我们平时使用的 Future 只是一个抽象接口&#xff0c;其真正的实现逻辑由_Future 承担。 class _Future<…...

TRAE 配置blender MCP AI自动3D建模

BlenderMCP - Blender模型上下文协议集成 BlenderMCP通过模型上下文协议(MCP)将Blender连接到Claude AI&#xff0c;允许Claude直接与Blender交互并控制Blender。这种集成实现了即时辅助的3D建模、场景创建和操纵。 1.第一步下载 MCP插件(addon.py):Blender插件&#xff0c;在…...

VUE2课程计划表练习

主要练习数据变量对象 以下是修正后的完整代码&#xff1a; //javascript export default {data() {return {list: [{ id: 1, subject: Vue.js 前端实战开发, content: 学习指令&#xff0c;例如 v-if、v-for、v-model 等, place: 自习室, status: false }// 可以在这里添加更…...

虚拟文件系统

虚拟文件系统&#xff08;Virtual File System&#xff0c;VFS&#xff09;是操作系统内核中的一个抽象层&#xff0c;它为不同的文件系统&#xff08;如ext4、NTFS、FAT32等&#xff09;提供统一的访问接口。通过VFS&#xff0c;用户和应用程序无需关心底层文件系统的具体差异…...

2025年软件工程与数据挖掘国际会议(SEDM 2025)

2025 International Conference on Software Engineering and Data Mining 一、大会信息 会议简称&#xff1a;SEDM 2025 大会地点&#xff1a;中国太原 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 2025年软件开发与数据挖掘国际会议于…...

基于大模型预测的足月胎膜早破行阴道分娩全流程研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 1.3 研究创新点 二、胎膜早破(足月)行阴道分娩概述 2.1 胎膜早破定义与分类 2.2 足月胎膜早破行阴道分娩的现状与挑战 2.3 大模型预测引入的必要性 三、大模型预测原理与技术 3.1 大模型介绍 3.2 数据收集与…...

学习记录:DAY28

DispatcherController 功能完善与接口文档编写 前言 没什么动力说废话了。 今天来完善 DispatcherController 的功能&#xff0c;然后写写接口文档。 日程 早上&#xff1a;本来只有早八&#xff0c;但是早上摸鱼了&#xff0c;罪过罪过。下午&#xff1a;把 DispatcherContro…...

软件系统中功能模型 vs 数据模型 对比解析

功能模型 vs 数据模型 对比解析 一、功能模型&#xff08;Functional Model&#xff09; 定义&#xff1a;描述系统 做什么&#xff08;业务逻辑与操作流程&#xff09; 核心关注&#xff1a;行为、交互、业务流程 建模工具&#xff1a; 用例图&#xff08;UML Use Case Dia…...

.NET高频技术点(持续更新中)

1. .NET 框架概述 .NET 框架的发展历程.NET Core 与 .NET Framework 的区别.NET 5 及后续版本的统一平台 2. C# 语言特性 异步编程&#xff08;async/await&#xff09;LINQ&#xff08;Language Integrated Query&#xff09;泛型与集合委托与事件属性与索引器 3. ASP.NET…...

pandas中的数据聚合函数:`pivot_table` 和 `groupby`有啥不同?

pivot_table 和 groupby 是 pandas 中两种常用的数据聚合方法&#xff0c;它们都能实现数据分组和汇总&#xff0c;但在使用方式和输出结构上有显著区别。 0. 基本介绍 groupby分组聚合 groupby 是 Pandas 库中的一个功能强大的方法&#xff0c;用于根据一个或多个列对数据进…...

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT 数据集准备常用数据集自定义数据集AlpacaShareGPT数据集准备 常用数据集 预训练数据集 Wiki Demo (en)RefinedWeb (en)RedPajama V2 (en)Wikipedia (en)Wikipedia (zh)Pile (en)...

【Gradio】helloworld程序

前言 发现这个库用来做可视化的demo还不错&#xff0c;简单学习一下。 官网 https://www.gradio.app/ 安装 pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple/helloWorld 示例 import gradio as grdef greet(name):return "hello"nameifacegr…...

机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)

一、预测facebook签到位置 代码展示&#xff1a; import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…...