Maven入门教程
一、Maven简介
Maven 是一个基于项目对象模型(Project Object Model)的构建工具,用于管理 Java 项目的依赖、构建流程和文档生成。它的核心功能包括:
- 依赖管理(Dependency Management):自动下载和管理第三方库(JAR 文件)。
- 标准化项目结构:统一项目目录布局。
- 构建生命周期(Project Lifecycle):提供编译、测试、打包、部署等标准化流程。
- 插件系统:支持扩展功能(如代码检查、生成报告)。
1. 依赖管理
① jar包的规模
② jar包的来源: 使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
③ jar包之间的依赖关系: 通过依赖的传递性自动完成
2. 标准化项目结构
约定优于配置(Convention Over Configuration)
目录 | 说明 |
---|---|
src/main/java | 主代码目录 |
src/main/resources | 资源文件目录 |
src/test/java | 测试代码目录 |
src/test/resources | 测试使用的资源文件目录 |
pom.xml | 项目配置文件 |
target | 输出目录 |
3. 构建生命周期
- 清理:删除上一次构建的结果,为下一次构建做好准备
- 编译:Java 源程序编译成 *.class 字节码文件
- 测试:运行提前准备好的测试程序
- 报告:针对刚才测试的结果生成一个全面的信息
- 打包
- Java工程:jar包
- Web工程:war包
- 安装:把一个 Maven 工程经过打包操作生成的 jar 包或 war 包存入 Maven 仓库
- 部署
- 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
- 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上
4. 插件系统
Maven 的核心设计理念是“约定优于配置”,其功能实现高度依赖插件系统。Maven 插件是扩展 Maven 功能的工具,每个插件包含一组 目标(Goals),用于执行特定任务(如编译代码、打包、部署等)。
核心特点:
- 生命周期绑定:插件目标(Goals)与 Maven 的生命周期阶段(Phase)绑定。
- 高度可扩展:支持自定义插件或使用第三方插件。
- 配置灵活:通过 POM 文件或命令行参数控制插件行为。
二、安装配置
1. 安装 Java
Maven 依赖 Java 环境,请先安装 JDK 8+ 并配置 JAVA_HOME
。
2. 下载 Maven
- 官网下载地址:https://maven.apache.org/download.cgi
- 选择二进制包(如
apache-maven-3.x.x-bin.zip
)。
3. 配置环境变量
- M2_HOME
- PATH:将Maven的bin目录添加到PATH环境变量
4. 配置(conf/settings.xml)
指定本地仓库
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\maven-repo</localRepository>
配置阿里云提供的镜像仓库
<!-- 阿里云镜像 -->
<mirror><id>aliyunmaven</id><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url><!-- 匹配所有仓库请求 --><mirrorOf>*</mirrorOf>
</mirror>
配置 Maven 工程的基础 JDK 版本
<profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile>
5. IDEA集成Maven环境
配置Maven信息
三、Maven基本命令
1. 创建项目
mvn archetype:generate -DgroupId=com.example -DartifactId=my-first-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
groupId
: 组织标识(如公司域名倒写)。artifactId
: 项目名称(生成的项目目录名)。archetypeArtifactId
:指定项目模板。
生成的标准目录结构如下:
my-first-app/
├── src/
│ ├── main/
│ │ └── java/ # 主代码目录
│ └── test/
│ └── java/ # 测试代码目录
├── pom.xml # 项目配置文件
2. 项目对象模型(POM)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-first-app</artifactId><!-- 当前Maven工程的打包方式,可选值有下面三种: --><!-- jar:表示这个工程是一个Java工程 --><!-- war:表示这个工程是一个Web工程 --><!-- pom:表示这个工程是“管理其他工程”的工程 --><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>my-first-app</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>
更详细的pom文件,可以运行下面的命令获取:
mvn help:effective-pom
3. 常用命令
命令 | 功能说明 |
---|---|
mvn clean | 清理 target 目录(删除编译结果) |
mvn compile | 编译主代码, 主体程序编译结果存放的目录:target/classes |
mvn test-compile | 编译测试代码,测试程序编译结果存放的目录:target/test-classes |
mvn test | 运行测试代码,测试的报告存放的目录:target/surefire-reports |
mvn package | 打包项目(生成 JAR/WAR 文件),存放的目录:target |
mvn install | 将项目安装到本地仓库 |
mvn deploy | 部署到远程仓库(需配置) |
mvn site | 生成项目报告网站 |
完整构建流程命令mvn clean package会依次执行
clean→
compile→
test→
package`。
四、核心概念
1. 坐标
-
groupId:公司或组织的 id,公司或组织域名的倒序
-
artifactId:一个项目或者是项目中的一个模块的 id
-
version:版本号
例如:SNAPSHOT 表示快照版本,正在迭代过程中,不稳定的版本
例如:RELEASE 表示正式版本 -
scope:依赖的范围
-
compile:默认的scope。任何定义在compile scope下的依赖将会在所有的class paths下可用。maven工程会将其打包到最终的artifact中。如果你构建一个WAR类型的artifact,那么在compile scope下引用的JAR文件将会被集成到WAR文件内。
-
provided:这个scope假定对应的依赖会由运行这个应用的JDK或者容器来提供。最好的例子就是servlet API。任何在provided scope下定义的依赖在构建时的类路径里是可用的,但是不会被打包到最终的artifact中。如果是一个WAR的文件,servlet API在构建时的类路径里是可用的,但是并不会被打包到WAR文件中。
-
runtime:在runtime scope下定义的依赖只会在运行期可用,而在构建期的类路径下不可用。这些依赖将会被打包到最终的artifact中。比如你有一个基于web的应用需要在运行时访问MySQL数据库。你的代码没有任何MySQL数据库驱动的硬依赖。你的代码仅仅是基于JDBC API来编写,在构建期并不需要MySQL数据库驱动。然而,在运行期,就需要相应的驱动来操作MySQL数据库了。因此,这个驱动应该被打包到最终的artifact中。
-
test:只用于测试变异的依赖(比如JUnit),execution必须定义在test scope下。这些依赖不会被打包到最终的artifact中。
-
system:于provided scope很像。唯一的区别在于,在system scope中,你需要告诉Maven如何去找到这个依赖。如果你要引用的依赖在Maven仓库中不存在时,就可以用这个scope。不推荐使用system依赖。
-
import:从其它的pom文件中导入依赖设置
-
2. 生命周期
所谓lifecycle,可以理解为可以执行一组命令的集合,用来执行具体的某些操作。
Maven默认有三种lifecycle:default,clean和site。default主要用来处理项目的开发,clean主要用来负责项目的清理,site主要用来生成项目的文档。
lifecycle是由一个或者多个phase组成的。
以default为例,它大概由23个phases组成,这些phases将会按顺序执行来完成default的lifecycle
- validate: 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
- generate-sources: 生成所有需要包含在编译过程中的源代码
- process-sources: 处理源代码,比如过滤一些值
- generate-resources: 生成所有需要包含在打包过程中的资源文件
- process-resources: 复制并处理资源文件至目标目录,准备打包
- compile: 编译项目的源代码
- process-classes: 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
- generate-test-sources: 生成所有包含在测试编译过程中的测试源码
- process-test-sources: 处理测试源码,比如过滤一些值
- generate-test-resources: 生成测试需要的资源文件
- process-test-resources: 复制并处理测试资源文件至测试目标目录
- test-compile: 编译测试源码至测试目标目录
- test:使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
- prepare-package: 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)
- package: 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
- pre-integration-test: 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
- integration-test: 如果有必要的话,处理包并发布至集成测试可以运行的环境
- post-integration-test: 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
- verify: 执行所有检查,验证包是有效的,符合质量规范
- install: 安装包至本地仓库,以备本地的其它项目作为依赖使用
- deploy: 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)
3. mvn package目标执行顺序
- resources:resources
Resources插件的resources目标绑定到了resources 阶段。这个目标复制src/main/resources下的所有资源和其它任何配置的资源目录,到输出目录。 - compiler:compile
Compiler插件的compile目标绑定到了compile 阶段。这个目标编译src/main/java下的所有源代码和其他任何配置的资源目录,到输出目录。 - resources:testResources
Resources插件的testResources目标绑定到了test-resources 阶段。这个目标复制src/test/resources下的所有资源和其它任何的配置的测试资源目录,到测试输出目录。 - compiler:testCompile
Compiler插件的testCompile目标绑定到了test-compile 阶段。这个目标编译src/test/java下的测试用例和其它任何的配置的测试资源目录,到测试输出目录。 - surefire:test
Surefire插件的test目标绑定到了test 阶段。这个目标运行所有的测试并且创建那些捕捉详细测试结果的输出文件。默认情况下,如果有测试失败,这个目标会终止。 - jar:jar
Jar插件的jar目标绑定到了package 阶段。这个目标把输出目录打包成JAR文件。
五、常见问题
1. 依赖下载失败
现象:执行 mvn install
时出现 Could not resolve dependencies
错误。
原因: 网络问题或仓库配置错误; 依赖版本不存在; 本地仓库缓存损坏
解决办法:
(1)检查仓库配置
确认 settings.xml
中镜像(如阿里云)配置正确(参考之前的配置方法)。
(2)清理本地仓库缓存
# 删除所有未下载完成的临时文件
mvn dependency:purge-local-repository
# 或手动删除本地仓库中的相关依赖目录(路径:~/.m2/repository/)
(3)手动下载依赖*
访问仓库地址(如 Maven Central 或阿里云仓库),确认依赖是否存在。
2. 依赖冲突(版本冲突)
现象:运行时出现 NoSuchMethodError
或 ClassNotFoundException
。
解决办法
(1)分析依赖树
mvn dependency:tree -Dincludes=groupId:artifactId
输出示例:
[INFO] com.example:project:jar:1.0
[INFO] +- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] \- ch.qos.logback:logback-classic:jar:1.2.3:compile
[INFO] \- ch.qos.logback:logback-core:jar:1.2.3:compile
(2)排除冲突依赖
在 pom.xml
中排除特定传递依赖:
<dependency><groupId>org.example</groupId><artifactId>example-lib</artifactId><version>1.0</version><exclusions><exclusion><groupId>conflict-group</groupId><artifactId>conflict-artifact</artifactId></exclusion></exclusions>
</dependency>
3. 插件执行失败
现象:提示 Plugin execution failed
或 No plugin found
。
解决办法:
(1)更新插件版本
在 pom.xml
中显式指定插件版本:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.11.0</version></plugin></plugins>
</build>
(2)检查插件配置
确认插件的 <configuration>
参数是否正确(如 JDK 版本)。
4. 资源文件未生效
现象:src/main/resources
中的配置文件未被打包,或变量未替换。
解决办法
(1)启用资源过滤
在 pom.xml
中配置资源目录和过滤:
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering> <!-- 启用变量替换 --></resource></resources>
</build>
(2)检查文件路径
确保资源文件位于正确目录,未被 .gitignore
或 .mvnignore
排除。
5. 多模块项目问题
现象:父模块与子模块依赖不继承,或构建顺序错误。
解决办法
(1)正确声明父模块
子模块的 pom.xml
中需指定父模块:
<parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0</version><relativePath>../pom.xml</relativePath> <!-- 父模块路径 -->
</parent>
(2)统一管理依赖版本
在父模块的 <dependencyManagement>
中定义公共依赖版本。
6.本地仓库缓存问题
现象:依赖已更新,但本地构建仍使用旧版本。
解决办法
(1)清理本地仓库
mvn dependency:purge-local-repository
(2)强制更新 SNAPSHOT 版本
mvn clean install -U
7. 版本号问题(SNAPSHOT vs RELEASE)
现象:SNAPSHOT 版本未更新到最新。
解决办法
-
SNAPSHOT 版本:Maven 默认每天检查一次更新,可通过
-U
强制更新:mvn clean install -U
-
RELEASE 版本:版本号固定,需手动升级。
8. 其他常见错误
错误提示 | 可能原因 | 解决方案 |
---|---|---|
Project build error: Non-resolvable parent POM | 父模块未正确声明或仓库中不存在 | 检查父模块的 <relativePath> 或手动安装父模块到本地仓库 |
Invalid JDK version in project | JDK 版本不匹配 | 在 pom.xml 中配置 maven-compiler-plugin 的 <source> 和 <target> |
Failed to read artifact descriptor | 依赖的 POM 文件损坏或缺失 | 删除本地仓库中的依赖目录,重新下载 |
9. 常用排查命令
# 查看依赖树
mvn dependency:tree# 查看有效配置(合并所有配置后的最终结果)
mvn help:effective-pom# 清理项目并重新构建
mvn clean install# 跳过测试
mvn install -DskipTests
附、常用插件
1. 核心构建插件
-
maven-compiler-plugin
-
作用: 编译 Java 源代码。
-
groupId:
org.apache.maven.plugins
-
artifactId:
maven-compiler-plugin
-
常用配置:
<configuration><source>1.8</source> <!-- 指定 Java 版本 --><target>1.8</target><encoding>UTF-8</encoding> </configuration>
-
-
maven-clean-plugin
-
作用: 清理构建输出目录(默认删除
target/
)。 -
命令:
mvn clean
-
2. 测试与报告插件
-
maven-surefire-plugin
-
作用: 运行单元测试(JUnit、TestNG)。
-
groupId:
org.apache.maven.plugins
-
跳过测试:
mvn test -DskipTests
-
-
maven-failsafe-plugin
-
作用: 运行集成测试(通常绑定到
verify
阶段)。 -
groupId:
org.apache.maven.plugins
-
命令:
mvn verify
-
-
maven-javadoc-plugin
-
作用: 生成 Javadoc 文档。
-
常用命令:
mvn javadoc:javadoc # 生成文档到 target/site/apidocs
-
3. 打包与部署插件
-
maven-jar-plugin
-
作用: 打包项目为 JAR 文件。
-
groupId:
org.apache.maven.plugins
-
默认绑定阶段:
package
-
-
maven-war-plugin
-
作用: 打包 Web 项目为 WAR 文件。
-
groupId:
org.apache.maven.plugins
-
配置示例:
<packaging>war</packaging> <!-- 修改打包类型 -->
-
-
maven-assembly-plugin
-
作用: 定制化打包(如生成包含依赖的 ZIP/TAR 包)。
-
groupId:
org.apache.maven.plugins
-
常用命令:
mvn assembly:single
-
-
maven-shade-plugin
-
作用: 打包可执行 Fat JAR(合并依赖)。
-
groupId:
org.apache.maven.plugins
-
典型配置:
<configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.Main</mainClass> <!-- 指定主类 --></transformer></transformers> </configuration>
-
-
maven-deploy-plugin
-
作用: 将构建产物部署到远程仓库(如 Nexus)。
-
groupId:
org.apache.maven.plugins
-
命令:
mvn deploy
-
4. 依赖管理插件
-
maven-dependency-plugin
-
作用: 分析、复制或解压依赖。
-
groupId:
org.apache.maven.plugins
-
常用命令:
mvn dependency:tree # 查看依赖树 mvn dependency:copy-dependencies -DoutputDirectory=libs # 复制依赖到目录
-
-
versions-maven-plugin
-
作用: 管理依赖版本(检查更新、升级版本)。
-
groupId:
org.codehaus.mojo
-
常用命令:
mvn versions:display-dependency-updates # 检查依赖更新 mvn versions:set -DnewVersion=2.0.0 # 批量修改版本号
-
5. 代码质量与静态分析
-
maven-checkstyle-plugin
-
作用: 检查代码风格是否符合规范。
-
groupId:
org.apache.maven.plugins
-
绑定阶段:
validate
-
-
maven-pmd-plugin
-
作用: 静态代码分析(检测潜在 Bug、复杂代码)。
-
groupId:
org.apache.maven.plugins
-
-
jacoco-maven-plugin
-
作用: 生成单元测试覆盖率报告。
-
groupId:
org.jacoco
-
常用命令:
mvn jacoco:report # 生成报告到 target/site/jacoco
-
6. 容器化与云原生
-
spring-boot-maven-plugin
-
作用: 打包 Spring Boot 应用(可执行 JAR)。
-
groupId:
org.springframework.boot
-
配置示例:
<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId> </plugin>
-
-
docker-maven-plugin
-
作用: 构建 Docker 镜像并推送至仓库。
-
groupId:
io.fabric8
-
典型配置:
<configuration><images><image><name>my-app:${project.version}</name><build><dockerFile>Dockerfile</dockerFile></build></image></images> </configuration>
-
7. 其他实用插件
-
exec-maven-plugin
-
作用: 直接运行 Java 类或 Shell 命令。
-
groupId:
org.codehaus.mojo
-
运行 Main 类:
mvn exec:java -Dexec.mainClass="com.example.Main"
-
-
flatten-maven-plugin
-
作用: 简化 POM 文件(去除冗余信息,适合发布)。
-
groupId:
org.codehaus.mojo
-
配置示例:
<plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.3.0</version><configuration><flattenMode>oss</flattenMode></configuration> </plugin>
-
-
antrun-maven-plugin
-
作用: 在 Maven 中执行 Ant 任务。
-
groupId:
org.apache.maven.plugins
-
示例:
<execution><id>copy-files</id><phase>package</phase><goals><goal>run</goal></goals><configuration><target><copy file="src/data/config.xml" toFile="target/config.xml"/></target></configuration> </execution>
-
使用建议:
(1)官方插件优先在 Maven Plugins List 查找。
(2)第三方插件可在 Maven Central 搜索。
(3)通过 mvn help:describe -Dplugin=插件ID
查看插件详情。
相关文章:

Maven入门教程
一、Maven简介 Maven 是一个基于项目对象模型(Project Object Model)的构建工具,用于管理 Java 项目的依赖、构建流程和文档生成。它的核心功能包括: 依赖管理(Dependency Management):自动下载和管理第三方库&#x…...
大数据与金融科技:革新金融行业的动力引擎
大数据与金融科技:革新金融行业的动力引擎 在今天的金融行业,大数据与金融科技的结合正在以惊人的速度推动着金融服务的创新与变革。通过精准的数据分析与智能化决策,金融机构能够更高效地进行风险管理、客户服务、资产管理等一系列关键操作…...

Autosar RTE配置-Port Update配置及使用-基于ETAS工具
文章目录 前言Autosar Rte中enableUpdate参数定义ETAS工具中的配置生成代码分析总结前言 在E2E校验中,需要对Counter进行自增,但每个报文周期不一样,导致自增的周期不一样。且Counter应该在收到报文之后才进行自增。基于这些需求,本文介绍使用RTE Port中的参数enableUpdat…...

【AVRCP】深入理解蓝牙音频 / 视频远程控制规范:从基础到应用
AVRCP(Audio/Video Remote Control Profile)作为蓝牙音频 / 视频控制领域的重要规范,通过其完善的协议架构、丰富的功能分类以及对用户需求的深入考量,为我们带来了便捷、高效的音频 / 视频设备控制体验。无论是在日常生活中的音乐…...
AWS SQS跨账户访问失败排查指南
引言 在使用AWS SQS(Simple Queue Service)时,跨账户访问是常见的业务场景。例如,账户A的应用程序向队列发送消息,账户B的消费者从队列拉取消息。尽管AWS官方文档明确支持此类配置,但在实际应用中,由于权限模型的复杂性,开发者和运维人员常会遇到“策略已配置但无法接…...
算法训练(leetcode)二刷第三十八天 | 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和、392. 判断子序列
刷题记录 1143. 最长公共子序列1035. 不相交的线53. 最大子数组和动态规划优化版 392. 判断子序列 1143. 最长公共子序列 leetcode题目地址 本题和300. 最长递增子序列相似(题解)。 使用动态规划: dp数组含义:dp[i][j]表示 以…...

【JavaWeb学习Day20】
Tlias智能学习系统 员工登录 三层架构: Controller:1.接收请求参数(用户名,密码)2.调用Service方法3.响应结果 具体实现: /*** 登录*/ PostMapping("/login") public Result login(Reque…...
2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(二级)真题 + 答案
青少年软件编程(Python)等级考试试卷(二级) ↓↓↓↓↓↓ 模拟 分数:100 题数:37 一、单选题(共25题,共50分) 1. 已知字典如下 dic1 = { name: Ming, age:20, grade: A, Tel:6666666 } 以下哪个代码运行结果为20?( ) A. dic1(age) B. dic1[1] C. dic1(20) D. dic1[ag…...

一、对iic类模块分析与使用
bmp280驱动代码 说明: 1、该模块用于获取气压,温度,海拔等数据。 vcc,gnd接电源 sda ,scl 接iic通信引脚 2、该模块使用iic通信,通过iic发送请求相关类的寄存器值,芯片获取对应寄存器返回的数据…...

ROS 2机器人开发--CMakeLists.txt 文件详解
很多小白宝宝不懂CMakeLists.txt 究竟是干什么的,本文对CMakeLists.txt 文件进行详解 CMakeLists.txt 是 CMake 的核心文件,用户通过这个文件告诉 CMake 如何构建项目。这个文件通常包括设置项目名称、版本号、语言标准、编译器选项、查找依赖包、添加可…...

kan与小波,和不知所云的画图
文章目录 小波应用范围与pde小波的名字 画图图(a):数值解向量 \( u \)图(b):数值解向量 \( v \)结论图4 小波 在你提供的代码中,小波变换(Wavelet Transform)被用于 KANLinear 类中。具体来说,小波变换在 …...

使用DeepSeek实现自动化编程:类的自动生成
目录 简述 1. 通过注释生成C类 1.1 模糊生成 1.2 把控细节,让结果更精准 1.3 让DeepSeek自动生成代码 2. 验证DeepSeek自动生成的代码 2.1 安装SQLite命令行工具 2.2 验证DeepSeek代码 3. 测试代码下载 简述 在现代软件开发中,自动化编程工具如…...
算法题:快速排序
一、快速排序 1、快速排序总结 快速排序是一种高效的排序算法,基于分治法的思想。 分区操作是快速排序的核心,将数组分为两部分。 原地分区可以减少空间复杂度,提高效率。 快速排序的平均时间复杂度为 O(n log n),但在最坏情况…...

Python的那些事第三十六篇:基于 Vega 和 Vega-Lite 的数据可视化解决方案,Altair 声明式可视化库
Altair 声明式可视化库:基于 Vega 和 Vega-Lite 的数据可视化解决方案 摘要 在数据科学和分析领域,有效的数据可视化是理解数据、发现模式和传达见解的关键。Python 作为数据科学的主要编程语言之一,提供了多种数据可视化库。其中,Altair 是一个基于 Vega 和 Vega-Lite 的…...

aws(学习笔记第三十课) 练习使用transit gateway
aws(学习笔记第三十课) 使用transit gateway 学习内容: 什么是transit gateway构造两个vpc,并且使用session manager访问private subnet的ec2练习使用transit gateway 1. 什么是transit gateway Transit Gateway的概念 Transit Gateway就是VPC和OnPro…...

Phpstudy中的MySQL无法正常启动或启动后自动暂停,以及sqlilab环境搭建出现的问题解决方法
【解决方法】 无法启动的原因是Phpstudy中的MySQL与本地的mysql重名,导致无法正常启动;所以这时我们就需要将本地的MySQL进行修改名称; 或者修改phpstudy中数据库的端口号,但是我觉得还是不是很好解决这种问题 最后一个方法&#…...

【Android】安卓付款密码输入框、支付密码输入框
如图 代码部分: public class PayPasswordDialog extends AppCompatDialogFragment {private String mPayPass "";private String mTitle, mMoney;private final TextView[] mPayPassTextViewArray new TextView[6];private List<Integer> mPayP…...
Python异常处理:从入门到精通的实用指南
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

【AVL树】—— 我与C++的不解之缘(二十三)
什么是AVL树? AVL树发明者是G. M. Adelson-Velsky和E. M. Landis两个前苏联科学家,他们在1962年论文《An algorithm for the organization of information》中发表了AVL树。AVL树是最先发明的自平衡二叉搜索树,说白了就是能够自己控制平衡结构…...
用大白话解释日志处理Log4j 是什么 有什么用 怎么用
Log4j是什么? Log4j就像程序的“黑匣子”,专门用来记录软件运行时的各种信息,比如哪里报错、性能如何、用户操作轨迹等。它是Java领域最常用的日志框架之一,可以灵活控制日志内容、输出位置(控制台、文件、数据库等&a…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...