理解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>

这段代码表示当前项目的父项目有groupIdcom.exampleartifactIdexample-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 ,也可以不继承自它。那么他到底有哪些功能呢

  1. 定义了 Java 编译版本为 1.8 。
  2. 使用 UTF-8 格式编码。
  3. 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
  4. 执行打包操作的配置。
  5. 自动化的资源过滤。
  6. 自动化的插件配置。
  7. 针对 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文件。

image-20231220185004957

可以看出来,我们并没有直接去继承 spring-boot-starter-parent,而是通过dependencyMangement,然后再properties标签中去锁定他的版本。

image-20231220185043276

这样的话,以后我们创建的子项目一旦继承了我们父项目,我们就不需要再去考虑各种版本问题了,所有的版本信息只需要在父项目的dependencyMangement进行锁定即可。

image-20231220185333721

6.Parent源码

我们创建SpringBoot项目之后,我们可以在本地 Maven 仓库中看到看到这个具体的 parent 文件。

笔者这里的路径是:D:\software\maven-repository\org\springframework\boot\spring-boot-dependencies\2.3.12.RELEASE,大家可以按需查找。

当然也可以通过我们POM中的代码点击过去。

image-20231220185700852

就能看到以下源码了。

image-20231220185725610

我们可以看到,它继承自 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框架进行学习&使用。

公众号封面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TI毫米波雷达】上电时序、串口回环BUG及SOP模式不正常工作的解决方案(LP87524电源PMIC芯片的BUCK供电时序配置)

【TI毫米波雷达】雷达上电时序及SOP模式不正常工作的解决方案&#xff08;LP87524电源PMIC芯片的BUCK供电时序配置&#xff09; 文章目录 上电时序上电以后的雷达串口回环问题延迟上电时序LP87524电源PMIC芯片的BUCK供电时序LP87524电源PMIC芯片的BUCK默认供电输出附录&#x…

w3af安装(处理python2和3,pip2和3混乱的问题)

git clone --depth 1 https://github.com/andresriancho/w3af.git cd w3af ./w3af_gui报错 打开w3af_gui看一下 要求必须是python2 但我的/usr/bin/env中的python是python3 我们将/usr/bin/env中的python换成python2 which python2 #/usr/bin/python2rm /usr/bin/pythonsud…

探索数据宇宙之飞船 -- python进阶函数numpy

导读&#xff1a;NumPy以其强大的多维数组对象和广泛的数学函数库著称。这些特性使得NumPy成为不仅在学术研究&#xff0c;也在工业界广泛应用的工具。无论是机器学习算法的开发、数据分析、还是复杂的数学模型的构建&#xff0c;NumPy都扮演着举足轻重的角色。 目录 Numpy简…

node.js mongoose aggregate

目录 官方文档 简述 Aggregate的原型方法 aggregate进行操作 官方文档 Mongoose v8.0.3: Aggregate 简述 在 Mongoose 中&#xff0c;Aggregate 是用于执行 MongoDB 聚合操作的类。MongoDB 聚合操作是一种强大的数据处理工具&#xff0c;可以用于对集合中的文档进行变换和…

星融元中标华夏银行项目,助力金融数据中心可视网建设工作

近日&#xff0c;星融元成功入围华夏银行国产品牌网络流量汇聚分流器&#xff08;TAP&#xff09;设备供应商&#xff0c;在助力头部金融机构构建数据中心可视网络的建设工作中&#xff0c;星融元又一次获得全国性股份制银行客户的青睐。 华夏银行作为全国性股份制商业银行积极…

2-负载均衡、反向代理

负载均衡、反向代理 upstream server即上游服务器&#xff0c;指Nginx负载均衡到的处理业务的服务器&#xff0c;也可以称之为real server,即真实处理业务的服务器。 对于负载均衡我们要关心的几个方面如下&#xff1a; 上游服务器配置&#xff1a;使用upstream server配置上…

ansible的脚本------playbook剧本

playbook组成部分&#xff1a; 1.task 任务&#xff1a;包含要在目标主机上执行的操作&#xff0c;使用模块定义这些操作。每个都是一个模块的调用。2.variables 变量&#xff1a;存储和传递数据。变量可以自定义&#xff0c;可以在playbook当中定义为全局变量&#xff0c;也可…

Navicat16的下载与安装

Navicat16的下载与安装 1、官网下载地址&#xff1a;https://www.navicat.com.cn/download/navicat-premium 当然有的朋友在官网下载比较慢&#xff0c;我也为大家准备好了百度网盘链接 链接&#xff1a;https://pan.baidu.com/s/1dUcTSHr3761Oayh0-WfolA?pwdwfpl 提取码&am…

Nature Commun|ATAC-seq探究复发性小儿B系急性淋巴细胞白血病的染色质可及性图谱

表观基因组学分析是解释非编码基因组功能的重要方法之一。表观基因组学特征作为肿瘤细胞的基本特征&#xff0c;对发病机制、临床行为和治疗具有影响。在所有表观基因组标记中&#xff0c;组蛋白修饰和 DNA 甲基化已得到最广泛的研究&#xff0c;以深入了解表观基因组失调。 染…

车辆违规实线变道检测系统:融合Gold-YOLO改进YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着城市化进程的加快和交通工具的普及&#xff0c;道路交通安全问题日益凸显。其中&#xff0c;车辆违规实线变道是导致交通事故的重要原因之一。在道路上&…

【办公软件】C# NPOI 操作Excel 案例

文章目录 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集2、引用NPOI程序集3、设置表格样式4、excel加载图片5、导出excel 1、加入NPOI 程序集&#xff0c;使用nuget添加程序集 2、引用NPOI程序集 private IWorkbook ExportExcel(PrintQuotationOrderViewModel model){//…

虾皮电商 电商平台:东南亚最大的跨境电商平台

虾皮电商&#xff08;Shopee&#xff09;是新加坡的一家跨境电商平台&#xff0c;隶属于Sea Group公司。虾皮电商以其强大的社交功能和便捷的物流服务而闻名&#xff0c;为卖家和买家提供了出色的交易体验。本文将介绍虾皮电商的发展历程、优势以及为卖家提供的一站式解决方案。…

JVM征服面试篇-亿及流量系统设计(学习笔记)

一、如何拆解亿级流量系统-百万级结算系统如何设置JVM 1.先确认如下问题&#xff1a; 2.第一步&#xff1a;确定业务背景和核心流程 3.第二步&#xff1a;确认系统的压力在哪里 3.第三步&#xff1a;确定QPS 4.第四步&#xff1a;确定单笔订单耗时&#xff0c;寻找性能瓶颈 5.…

金蝶报表二开

本案例描述&#xff1a; 折旧明细报表中加入字段&#xff1a;存放地点、成本中心部门、使用人组织三个字段。 参考社区案例&#xff1a;报表二次开发添加自定义字段的指导方案 步骤&#xff1a; 1、加入报表插件 继承原报表的类。重写BuilderReportSqlAndTempTable、GetRe…

MyBatis 运行原理

MyBatis框架在操作数据库时&#xff0c;大体经过了8个步骤&#xff1a; 1.读取 MyBatis 配置文件&#xff1a;mybatis-config.xml 为 MyBatis 的全局配置文件&#xff0c;配置了 MyBatis 的运行环境等信息&#xff0c;例如数据库连接信息。 2.加载映射文件&#xff1a;映射文…

JDBC编程(主要针对其流程)

JDBC编程 注&#xff1a;在本篇博客中&#xff0c;使用的数据库是mysql&#xff01;&#xff01;&#xff01; 一、JDBC编程六步 1、注册驱动 这步就是在告诉Java程序&#xff0c;即将要连接的为哪个品牌的数据库&#xff0c; 这里有两种方法 ① //就是使用一个了多态&am…

Dokit 开源库:简化 Android 应用开发的利器

Dokit 开源库&#xff1a;简化 Android 应用开发的利器 一、Dokit 简介二、Dokit 功能三、Dokit 使用3.1 DoKit Android 最新版本3.2 DoKit Android 接入步骤 四、总结 在 Android 应用开发过程中&#xff0c;我们经常需要处理调试、性能优化和用户体验等方面的问题。然而&…

stm32学习总结:4、Proteus8+STM32CubeMX+MDK仿真串口收发

stm32学习总结&#xff1a;4、Proteus8STM32CubeMXMDK仿真串口收发 文章目录 stm32学习总结&#xff1a;4、Proteus8STM32CubeMXMDK仿真串口收发一、前言二、资料收集三、STM32CubeMX配置串口1、配置开启USART12、设置usart中断优先级3、配置外设独立生成.c和.h 四、MDK串口收发…

期货股市联动(期股联动助推资本市场上扬)

期股联动——期货股市助推资本市场上扬 随着我国资本市场的不断发展&#xff0c;期货和股票这两个市场也在逐渐紧密地联系起来。期货和股票的相互作用是一种“期股联动”&#xff0c;它能够促进资本市场的上扬。 期货与股票市场 期货市场是一种标准化的场外交易市场&#xf…

【jvm从入门到实战】(十) 实战篇-内存调优

内存溢出和内存泄漏&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的。少量的内存泄漏可以容忍&#x…