理解pom.xml中的parent标签
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: 循序渐进学SpringBoot
✨特色专栏: MySQL学习
🥭本文内容:理解pom.xml中的parent标签
📚个人知识库: Leo知识库,欢迎大家访问
1.前言☕
大家好,我是Leo哥🫣🫣🫣,今天给大家带来关于精品SpringBoot专栏,暂且就给他起名为循序渐进学SpringBoot,这里我参考了我上一个专栏:循序渐进学SpringSecurity6。有需要的朋友可以抓紧学习来哈,带你从SpringSecurity从零到实战项目。好了,我们进入正题,为什么会有SpringBoot这个专栏呢,是这样的,今年Leo哥也是正在重塑知识体系,从基础到框架,而SpringBoot又是我们框架中的核心,我觉得很有必要通过以博客的形式将我的知识系列进行输出,同时也锻炼一下自己的写作能力,如果能帮到大家那就更好啦!!!本地系列教程会从SpringBoot基础讲起,会以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。好了,话不多说让我们开始吧😎😎😎。
2.回顾
上一篇文章 我们学习了Spring Boot 项目的几种创建方式,这几种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/>
</parent>
有同学可能要问,Leo哥,这个不就是在Parent中去锁定版本嘛,没啥大不了了的嘛。
确实,但是Parent里面的门道可不止于此,我们这篇文章就一起来探索一下。
3.Parent概述
在Maven项目中的pom.xml
文件是这个项目的核心配置文件。parent
标签在这个配置文件中有着特殊的作用。简单来说,parent
标签是用来指明当前Maven项目继承自哪个父项目的。这里涉及到Maven的继承机制,我们可以从几个方面来理解这个标签的意义和作用:
3.1 继承
在Maven中,通过使用parent
标签,可以使得当前项目继承父项目的配置。这里的配置可以是依赖管理、插件配置、属性等。例如,如果很多模块都需要用到同样的版本管理或者构建配置,可以通过一个公共的父项目来管理这些共享配置,子项目通过指定父项目来继承这些配置。
3.2 聚合和继承的区别
在Maven中,有两种常见的多模块的项目结构 - 聚合(Aggregation)和继承(Inheritance)。parent
标签通常是继承的体现。如果一个项目只是简单地聚合其他模块,不一定用到parent
标签;它会用modules
标签列出所有子模块。但是,当这些模块需要共享配置时,通常会有一个父项目,各个子项目通过parent
标签来指定这个父项目,从而实现配置的继承。
3.3 parent标签的内容
parent
标签通常包含以下几个主要元素:
groupId
: 父项目的group ID。artifactId
: 父项目的artifact ID。version
: 父项目的版本号。relativePath
: 父POM的相对路径。如果不指定,默认查找../pom.xml
。
例如:
<parent><groupId>com.example</groupId><artifactId>example-parent</artifactId><version>1.0.0</version>
</parent>
这段代码表示当前项目的父项目有groupId
为com.example
,artifactId
为example-parent
,版本为1.0.0
。
3.4 版本管理
在父项目中定义的<dependencyManagement>
部分可以设定依赖的版本,这样子模块只需声明要使用的依赖,而不需要每个子模块单独指定版本号,这大大方便了版本管理。
3.5 插件管理
父项目同样可以定义<pluginManagement>
来设定插件的版本和配置,子项目也可以继承父项目中的插件配置。
4.Parent的作用
使用 Maven 是为了更好的帮项目管理包依赖,Maven 的核心就是pom.xml。当我们需要引入一个jar包时,在pom文件中加上就可以从仓库中依赖到相应的jar包。
现在有这样一个场景,有两个web项目A、B,一个java项目C,它们都需要用到同一个jar包:example.jar
。如果分别在三个项目的pom文件中定义各自对example.jar
的依赖,那么当example.jar
的版本发生变化时,三个项目的pom文件都要改,项目越多要改的地方就越多,很麻烦。这时候就需要用到parent标签, 我们创建一个parent项目,打包类型为pom,parent项目中不存放任何代码,只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对example.jar
的依赖,ABC三个子项目中只需要定义,parent标签中写上parent项目的pom坐标就可以引用到example.jar
了。
5.Parent的功能
当我们创建一个SpringBoot项目的时候,可以继承自一个 spring-boot-starter-parent
,也可以不继承自它。那么他到底有哪些功能呢
- 定义了 Java 编译版本为 1.8 。
- 使用 UTF-8 格式编码。
- 继承自
spring-boot-dependencies
,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。 - 执行打包操作的配置。
- 自动化的资源过滤。
- 自动化的插件配置。
- 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
我们下面来看一个实例:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.javatop</groupId><artifactId>Leo-springboot-tutorial</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>springboot-init</module><module>springboot-demo</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><revision>2.3.12.RELEASE</revision></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${revision}</version><type>pom</type><scope>import</scope></dependency><!--spring-boot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${revision}</version></dependency><!--SpringBootTest--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${revision}</version><scope>test</scope></dependency></dependencies></dependencyManagement></project>
这里是我们上一篇创建SpringBoot项目对应的POM文件。
可以看出来,我们并没有直接去继承 spring-boot-starter-parent
,而是通过dependencyMangement,然后再properties标签中去锁定他的版本。
这样的话,以后我们创建的子项目一旦继承了我们父项目,我们就不需要再去考虑各种版本问题了,所有的版本信息只需要在父项目的dependencyMangement进行锁定即可。
6.Parent源码
我们创建SpringBoot项目之后,我们可以在本地 Maven 仓库中看到看到这个具体的 parent 文件。
笔者这里的路径是:D:\software\maven-repository\org\springframework\boot\spring-boot-dependencies\2.3.12.RELEASE
,大家可以按需查找。
当然也可以通过我们POM中的代码点击过去。
就能看到以下源码了。
我们可以看到,它继承自 spring-boot-dependencies
,这里保存了基本的依赖信息,另外我们也可以看到项目的编码格式,JDK 的版本等信息,当然也有我们前面提到的数据过滤信息。最后,我们再根据它的 parent 中指定的 spring-boot-dependencies
位置,来看看 spring-boot-dependencies
中的定义:
<properties><activemq.version>5.15.15</activemq.version><antlr2.version>2.7.7</antlr2.version><appengine-sdk.version>1.9.89</appengine-sdk.version><artemis.version>2.12.0</artemis.version><aspectj.version>1.9.6</aspectj.version><assertj.version>3.16.1</assertj.version><atomikos.version>4.0.6</atomikos.version><awaitility.version>4.0.3</awaitility.version><bitronix.version>2.1.4</bitronix.version><build-helper-maven-plugin.version>3.1.0</build-helper-maven-plugin.version><byte-buddy.version>1.10.22</byte-buddy.version><caffeine.version>2.8.8</caffeine.version><cassandra-driver.version>4.6.1</cassandra-driver.version><classmate.version>1.5.1</classmate.version><commons-codec.version>1.14</commons-codec.version><commons-dbcp2.version>2.7.0</commons-dbcp2.version><commons-lang3.version>3.10</commons-lang3.version><commons-pool.version>1.6</commons-pool.version><commons-pool2.version>2.8.1</commons-pool2.version><couchbase-client.version>3.0.10</couchbase-client.version><db2-jdbc.version>11.5.5.0</db2-jdbc.version><dependency-management-plugin.version>1.0.11.RELEASE</dependency-management-plugin.version><derby.version>10.14.2.0</derby.version><dropwizard-metrics.version>4.1.22</dropwizard-metrics.version><ehcache.version>2.10.9.2</ehcache.version><ehcache3.version>3.8.1</ehcache3.version><elasticsearch.version>7.6.2</elasticsearch.version><embedded-mongo.version>2.2.0</embedded-mongo.version><exec-maven-plugin.version>1.6.0</exec-maven-plugin.version><flatten-maven-plugin.version>1.2.7</flatten-maven-plugin.version><flyway.version>6.4.4</flyway.version><freemarker.version>2.3.31</freemarker.version><git-commit-id-plugin.version>3.0.1</git-commit-id-plugin.version><glassfish-el.version>3.0.3</glassfish-el.version><glassfish-jaxb.version>2.3.4</glassfish-jaxb.version><groovy.version>2.5.14</groovy.version><gson.version>2.8.7</gson.version><h2.version>1.4.200</h2.version><hamcrest.version>2.2</hamcrest.version><hazelcast.version>3.12.12</hazelcast.version><hazelcast-hibernate5.version>1.3.2</hazelcast-hibernate5.version><hibernate.version>5.4.32.Final</hibernate.version><hibernate-validator.version>6.1.7.Final</hibernate-validator.version><hikaricp.version>3.4.5</hikaricp.version><hsqldb.version>2.5.2</hsqldb.version><htmlunit.version>2.40.0</htmlunit.version><httpasyncclient.version>4.1.4</httpasyncclient.version><httpclient.version>4.5.13</httpclient.version><httpcore.version>4.4.14</httpcore.version><infinispan.version>10.1.8.Final</infinispan.version><influxdb-java.version>2.18</influxdb-java.version><jackson-bom.version>2.11.4</jackson-bom.version><jakarta-activation.version>1.2.2</jakarta-activation.version><jakarta-annotation.version>1.3.5</jakarta-annotation.version><jakarta-jms.version>2.0.3</jakarta-jms.version><jakarta-json.version>1.1.6</jakarta-json.version><jakarta-json-bind.version>1.0.2</jakarta-json-bind.version><jakarta-mail.version>1.6.7</jakarta-mail.version><jakarta-persistence.version>2.2.3</jakarta-persistence.version><jakarta-servlet.version>4.0.4</jakarta-servlet.version><jakarta-servlet-jsp-jstl.version>1.2.7</jakarta-servlet-jsp-jstl.version><jakarta-transaction.version>1.3.3</jakarta-transaction.version><jakarta-validation.version>2.0.2</jakarta-validation.version><jakarta-websocket.version>1.1.2</jakarta-websocket.version><jakarta-ws-rs.version>2.1.6</jakarta-ws-rs.version><jakarta-xml-bind.version>2.3.3</jakarta-xml-bind.version><jakarta-xml-soap.version>1.4.2</jakarta-xml-soap.version><jakarta-xml-ws.version>2.3.3</jakarta-xml-ws.version><janino.version>3.1.4</janino.version><javax-activation.version>1.2.0</javax-activation.version><javax-annotation.version>1.3.2</javax-annotation.version><javax-cache.version>1.1.1</javax-cache.version><javax-jaxb.version>2.3.1</javax-jaxb.version><javax-jaxws.version>2.3.1</javax-jaxws.version><javax-jms.version>2.0.1</javax-jms.version><javax-json.version>1.1.4</javax-json.version><javax-jsonb.version>1.0</javax-jsonb.version><javax-mail.version>1.6.2</javax-mail.version><javax-money.version>1.0.3</javax-money.version><javax-persistence.version>2.2</javax-persistence.version><javax-transaction.version>1.3</javax-transaction.version><javax-validation.version>2.0.1.Final</javax-validation.version><javax-websocket.version>1.1</javax-websocket.version><jaxen.version>1.2.0</jaxen.version><jaybird.version>3.0.11</jaybird.version><jboss-logging.version>3.4.2.Final</jboss-logging.version><jboss-transaction-spi.version>7.6.1.Final</jboss-transaction-spi.version><jdom2.version>2.0.6</jdom2.version><jedis.version>3.3.0</jedis.version><jersey.version>2.30.1</jersey.version><jetty-el.version>8.5.54</jetty-el.version><jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version><jetty-reactive-httpclient.version>1.1.9</jetty-reactive-httpclient.version><jetty.version>9.4.42.v20210604</jetty.version><jmustache.version>1.15</jmustache.version><johnzon.version>1.2.13</johnzon.version><jolokia.version>1.6.2</jolokia.version><jooq.version>3.13.6</jooq.version><json-path.version>2.4.0</json-path.version><json-smart.version>2.3.1</json-smart.version><jsonassert.version>1.5.0</jsonassert.version><jstl.version>1.2</jstl.version><jtds.version>1.3.1</jtds.version><junit.version>4.13.2</junit.version><junit-jupiter.version>5.6.3</junit-jupiter.version><kafka.version>2.5.1</kafka.version><kotlin.version>1.3.72</kotlin.version><kotlin-coroutines.version>1.3.8</kotlin-coroutines.version><lettuce.version>5.3.7.RELEASE</lettuce.version><liquibase.version>3.8.9</liquibase.version><log4j2.version>2.13.3</log4j2.version><logback.version>1.2.3</logback.version><lombok.version>1.18.20</lombok.version><mariadb.version>2.6.2</mariadb.version><maven-antrun-plugin.version>1.8</maven-antrun-plugin.version><maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version><maven-clean-plugin.version>3.1.0</maven-clean-plugin.version><maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version><maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version><maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version><maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version><maven-failsafe-plugin.version>2.22.2</maven-failsafe-plugin.version><maven-help-plugin.version>3.2.0</maven-help-plugin.version><maven-install-plugin.version>2.5.2</maven-install-plugin.version><maven-invoker-plugin.version>3.2.2</maven-invoker-plugin.version><maven-jar-plugin.version>3.2.0</maven-jar-plugin.version><maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version><maven-resources-plugin.version>3.1.0</maven-resources-plugin.version><maven-shade-plugin.version>3.2.4</maven-shade-plugin.version><maven-source-plugin.version>3.2.1</maven-source-plugin.version><maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version><maven-war-plugin.version>3.2.3</maven-war-plugin.version><micrometer.version>1.5.14</micrometer.version><mimepull.version>1.9.14</mimepull.version><mockito.version>3.3.3</mockito.version><mongodb.version>4.0.6</mongodb.version><mssql-jdbc.version>7.4.1.jre8</mssql-jdbc.version><mysql.version>8.0.25</mysql.version><nekohtml.version>1.9.22</nekohtml.version><neo4j-ogm.version>3.2.24</neo4j-ogm.version><netty.version>4.1.65.Final</netty.version><netty-tcnative.version>2.0.39.Final</netty-tcnative.version><nio-multipart-parser.version>1.1.0</nio-multipart-parser.version><oauth2-oidc-sdk.version>7.1.3</oauth2-oidc-sdk.version><nimbus-jose-jwt.version>8.19</nimbus-jose-jwt.version><ojdbc.version>19.3.0.0</ojdbc.version><okhttp3.version>3.14.9</okhttp3.version><oracle-database.version>19.3.0.0</oracle-database.version><pooled-jms.version>1.1.2</pooled-jms.version><postgresql.version>42.2.20</postgresql.version><prometheus-pushgateway.version>0.9.0</prometheus-pushgateway.version><quartz.version>2.3.2</quartz.version><querydsl.version>4.3.1</querydsl.version><r2dbc-bom.version>Arabba-SR10</r2dbc-bom.version><rabbit-amqp-client.version>5.9.0</rabbit-amqp-client.version><reactive-streams.version>1.0.3</reactive-streams.version><reactor-bom.version>Dysprosium-SR20</reactor-bom.version><rest-assured.version>3.3.0</rest-assured.version><rsocket.version>1.0.5</rsocket.version><rxjava.version>1.3.8</rxjava.version><rxjava-adapter.version>1.2.1</rxjava-adapter.version><rxjava2.version>2.2.21</rxjava2.version><saaj-impl.version>1.5.3</saaj-impl.version><selenium.version>3.141.59</selenium.version><selenium-htmlunit.version>2.40.0</selenium-htmlunit.version><sendgrid.version>4.4.8</sendgrid.version><servlet-api.version>4.0.1</servlet-api.version><slf4j.version>1.7.30</slf4j.version><snakeyaml.version>1.26</snakeyaml.version><solr.version>8.5.2</solr.version><spring-amqp.version>2.2.18.RELEASE</spring-amqp.version><spring-batch.version>4.2.7.RELEASE</spring-batch.version><spring-data-releasetrain.version>Neumann-SR9</spring-data-releasetrain.version><spring-framework.version>5.2.15.RELEASE</spring-framework.version><spring-hateoas.version>1.1.5.RELEASE</spring-hateoas.version><spring-integration.version>5.3.8.RELEASE</spring-integration.version><spring-kafka.version>2.5.14.RELEASE</spring-kafka.version><spring-ldap.version>2.3.4.RELEASE</spring-ldap.version><spring-restdocs.version>2.0.5.RELEASE</spring-restdocs.version><spring-retry.version>1.2.5.RELEASE</spring-retry.version><spring-security.version>5.3.9.RELEASE</spring-security.version><spring-session-bom.version>Dragonfruit-SR3</spring-session-bom.version><spring-ws.version>3.0.10.RELEASE</spring-ws.version><sqlite-jdbc.version>3.31.1</sqlite-jdbc.version><sun-mail.version>1.6.7</sun-mail.version><thymeleaf.version>3.0.12.RELEASE</thymeleaf.version><thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version><thymeleaf-extras-java8time.version>3.0.4.RELEASE</thymeleaf-extras-java8time.version><thymeleaf-extras-springsecurity.version>3.0.4.RELEASE</thymeleaf-extras-springsecurity.version><thymeleaf-layout-dialect.version>2.4.1</thymeleaf-layout-dialect.version><tomcat.version>9.0.46</tomcat.version><unboundid-ldapsdk.version>4.0.14</unboundid-ldapsdk.version><undertow.version>2.1.7.Final</undertow.version><versions-maven-plugin.version>2.7</versions-maven-plugin.version><webjars-hal-browser.version>3325375</webjars-hal-browser.version><webjars-locator-core.version>0.45</webjars-locator-core.version><wsdl4j.version>1.6.3</wsdl4j.version><xml-maven-plugin.version>1.0.2</xml-maven-plugin.version><xmlunit2.version>2.7.0</xmlunit2.version></properties>
这就是我们为什么可以在dependencyManagement可以直接锁定版本的原因了。
7.文末推荐🍭
如果你是刚学完SSM框架,如果你想学系统的学习SpringBoot,如果你想使用SpringBoot去集成各种其他组件,那么我这份循序渐进学SpringBoot一定是首选,带你从零到深入学习SpringBoot。抓紧订阅起来吧。用知识点+案例+项目解读的学习模式由浅入深对Spring Boot框架进行学习&使用。
相关文章:

理解pom.xml中的parent标签
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏&…...
element ui el-avatar 源码解析零基础逐行解析
avatar功能介绍 快捷配置头像的样式 avatar 的参数配置 属性说明参数size尺寸type string 类型 (‘large’,‘medium’,‘small’)number类型 validator 校验shape形状circle (原型) square(方形)icon传入的iconsrc传入的图片st…...

Linux下c语言实现动态库的动态调用
在Linux操作系统下,有时候需要在不重新编译程序的情况下,运行时动态地加载库,这时可以通过Linux操作系统提供的API可以实现,涉及到的API主要有dlopen、dlsym和dlclose。使用时,需要加上头文件#include <dlfcn.h>…...

为什么MCU在ADC采样时IO口有毛刺?
大家在使用MCU内部ADC进行信号采样一个静态电压时,可能在IO口上看到这样的波形。这个时候大家一般会认识是信号源有问题,但仔细观察会发现这个毛刺的频率是和ADC触发频率一样的。 那么为什么MCU在ADC采样时IO口会出现毛刺呢?这个毛刺对结果有…...

C# 将 Word 转化分享为电子期刊
目录 需求 方案分析 相关库引入 关键代码 Word 转 Pdf Pdf 转批量 Jpeg Jpeg 转为电子书 实现效果演示 小结 需求 曾经的一个项目,要求实现制作电子期刊定期发送给企业进行阅读,基本的需求如下: 1、由编辑人员使用 Microsoft Word…...
网络世界的黑暗角落:常见漏洞攻防大揭秘
网络世界的黑暗角落:常见漏洞攻防大揭秘 今天带来了网站常见的漏洞总结,大家在自己的服务器上也需要好好进行防护,密码不要过于简单.不然非常容易遭到攻击,最终达到不可挽回的损失.很多黑客想网络乞丐一样将你服务器打宕机,然后要求你进行付费.不知道大家有没有遇到…...
通信领域发展方向
5G网络技术:随着5G网络的建设和商用推广,各家运营商、厂商和研究机构都在探索5G技术的应用场景和解决方案,如网络切片、毫米波通信、多用户MIMO等。 物联网技术:物联网技术已经成为通信行业的重点发展领域,包括传感器…...

21 3GPP中 5G NR高速列车通信标准化
文章目录 信道模型实验——物理层设计相关元素μ(与子载波间隔有关)设计参考信号(DMRS) 本文提出初始接入、移动性管理、线性小区设计等高层技术。描述3GPP采用HST场景的评估参数,阐释了HST应用的物理层技术,包括数字通信和参考信号设计,链路…...

【网络安全】-Linux操作系统—CentOS安装、配置
文章目录 准备工作下载CentOS创建启动盘确保硬件兼容 安装CentOS启动安装程序分区硬盘网络和主机名设置开始安装完成安装 初次登录和配置更新系统安装额外的软件仓库安装网络工具配置防火墙设置SELinux安装文本编辑器配置SSH服务 总结 CentOS是一个基于Red Hat Enterprise Linu…...

CCNP课程实验-OSPF-CFG
目录 实验条件网络拓朴需求 配置实现基础配置1. 配置所有设备的IP地址 实现目标1. 要求按照下列标准配置一个OSPF网络。 路由协议采用OSPF,进程ID为89 ,RID为loopback0地址。3. R4/R5/R6相连的三个站点链路OSPF网络类型配置成广播型,其中R5路…...

【Spring Security】打造安全无忧的Web应用--入门篇
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Spring Security的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Spring Security是什么 1.概…...

【每日一题】【12.20】2828.判别首字母缩略词
🔥博客主页: A_SHOWY🎥系列专栏:力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 1.题目链接 2828. 判别首字母缩略词https://leetcode.cn/problems/check-if-a-string-is-an-acronym-of-words/ 2.题目描述 今天…...

LabVIEW开发振动数据分析系统
LabVIEW开发振动数据分析系统 自动测试系统基于LabVIEW平台设计,采用了多种高级硬件设备。系统的硬件组成包括PCB振动加速度传感器,这是一种集成了传统压电加速度传感器和电荷放大器的先进设备,能够直接与采集仪器连接。此外,系统…...

去掉乘法运算的加法移位神经网络架构
[CVPR 2020] AdderNet: Do We Really Need Multiplications in Deep Learning? 代码:https://github.com/huawei-noah/AdderNet/tree/master 核心贡献 用filter与input feature之间的L1-范数距离作为“卷积层”的输出为了提升模型性能,提出全精度梯度…...

【TB作品】51单片机,具有报时报温功能的电子钟
2.具有报时报温功能的电子钟 一、功能要求: 1.显示室温。 2.具有实时时间显示。 3.具有实时年月日显示和校对功能。 4.具有整点语音播报时间和温度功能。 5.定闹功能,闹钟音乐可选。 6.操作简单、界面友好。 二、设计建议: 1.单片机自选(C51、STM32或其他单片机)。 2.时钟日历芯…...

了解C++工作机制
基于hello.cpp对C的运行进行一个初步认识,并介绍国外C大佬Cherno常用的项目结构和调试Tips C是如何工作的 C工作流程1.实用工程(project)结构(1)Microsoft Visual Studio2022新建项目后,自动生成的原始文件…...

力扣题目学习笔记(OC + Swift) 14. 最长公共前缀
14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 方法一 竖向扫描法 个人感觉纵向扫描方式比较直观,符合人类理解方式,从前往后遍历所有字符串的每一列,比较相同列上的…...

WinSW设置应用程序开机启动
前言 由于使用windows自动的自启方法,不管是将程序启动服务放到开机自启文件夹中,还是创建任务计划程序,都没有很好的实现程序的开机自启效果,而WinSW很好的解决了这个问题。 下载 WinSW下载地址 注意:不同版本&#…...

Leetcode—96.不同的二叉搜索树【中等】
2023每日刷题(六十四) Leetcode—96.不同的二叉搜索树 算法思想 实现代码 class Solution { public:int numTrees(int n) {vector<int> G(n 1, 0);G[0] 1;G[1] 1;for(int i 2; i < n; i) {for(int j 1; j < i; j) {G[i] G[j - 1] * …...
正则表达式零宽断言
正则表达式零宽断言 工具类,正则表达式匹配文本内容正则表达式语法例子例子01零宽断言?< 不包含左边值? 不包含右边值例子 常用正则表达式校验数字的表达式校验字符的表达式 工具类,正则表达式匹配文本内容 /*** 正则表达式工具类*/ public class…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
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"…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...