理解pom.xml中的parent标签

news2024/9/24 23:23:57

在这里插入图片描述

✅作者简介:大家好,我是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.coloradmin.cn/o/1324398.html

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

相关文章

【设计模式--结构型--适配器模式】

设计模式--结构型--适配器模式 适配器模式概述结构案例类适配器模式对象适配器模式 应用场景 适配器模式 概述 将一个类的接口转换成客户希望的另一个接口&#xff0c;使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 适配器模式分为类适配器模式和对象适配器模式…

《opencv实用探索·二十一》人脸识别

Haar级联分类器 在OpenCV中主要使用了两种特征&#xff08;即两种方法&#xff09;进行人脸检测&#xff0c;Haar特征和LBP特征。用的最多的是Haar特征人脸检测。 Haar级联分类器是一种用于目标检测的机器学习方法&#xff0c;它是一种基于机器学习的特征选择方法&#xff0c;…

如何下载知网论文、专利的PDF格式

知网的论文格式有其特有的格式&#xff1a;CAJ。将CAJ格式转化为Word或者PDF非常麻烦&#xff0c;且会出现乱码的情况&#xff0c;直接用知网官方的CAJ浏览器也不太方便。为此&#xff0c;困扰了许久。 其实&#xff0c;知网可以直接下载PDF格式&#xff0c;只需在浏览器上安装…

【halcon深度学习】create_dl_model_detection

基本介绍 create_dl_model_detection 不是一个封装的库函数&#xff0c;是一个算子。用于创建用于目标检测或实例分割任务的深度学习模型。 输入参数&#xff1a; Backbone (input_control): 指定用作背骨网络的深度学习分类器&#xff0c;充当模型的基础。用户可以选择不同的…

贝蒂快扫雷~(C语言)

✨✨欢迎大家来到贝蒂大讲堂✨✨ ​​​​&#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;贝蒂的游戏 贝蒂的主页&#xff1a;Betty‘s blog 引言&#xff1a; 扫雷相信大家小时候到玩过吧&#xff0c;那…

【python】在线代码混淆方案及注意事项

▒ 目录 ▒ &#x1f6eb; 导读开发环境 1️⃣ 在线网站pyob混淆操作步骤编写测试代码混淆转pyc缺点中文路径问题&#xff1a;python: Cant reopen .pyc file 2️⃣ 反编译python文件格式对比uncompyle6 3️⃣ 其它方案cpythonpython-obfuscatorPyInstaller【不推荐】pyminifie…

内网穿透工具frp安装使用

摘要&#xff1a;之前使用的 nps 目前没有维护更新了&#xff0c;和在使用的过程中做内网穿透的的网速应该有限制&#xff0c;不论云服务器带宽是多少&#xff0c;下载速度都比较慢。这里切换到 frp 试试&#xff0c;对安装和使用简单记录&#xff0c;其和 nps 有很大的操作配置…

机器人也能干的更好:RPA技术的优势和应用场景

RPA是什么&#xff1f; 机器人流程自动化RPA&#xff08;Robotic Process Automation&#xff09;是一种自动化技术&#xff0c;它使用软件机器人来高效完成重复且有逻辑性的工作。近年来&#xff0c;随着人工智能和自动化技术的不断发展和普及&#xff0c;RPA已经成为企业提高…

流程挖掘技术在数字化转型中的应用价值

2023年2月27日国家正式发布了《数字中国建设整体布局规划》&#xff0c;指出建设数字中国是数字时代推进中国式现代化的重要引擎&#xff0c;是构筑国家竞争新优势的有力支撑&#xff0c;为加速数字化转型发出了明确号令。 随着数字化转型的推进&#xff0c;流程挖掘技术逐渐成…

CUMT--Java复习--异常

目录 一、异常 1、概述 2、异常处理机制 二、捕获异常 &#xff08;1&#xff09;try...catch语句 &#xff08;2&#xff09;try...catch..finally语句 &#xff08;3&#xff09;自动关闭资源的try语句 &#xff08;4&#xff09;其他 三、抛出异常 &#xff08;1&…

ICC2:illegal dimension route

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 illegal dimension route DRC的违例常出现的先进工艺里&#xff0c;部分层次在水平方向和竖直方向有宽度梯度的要求。如下示例: 意思就是竖直方向&#xff08;yLegalDim&#x…

yolov5障碍物识别-雪糕筒识别(代码+教程)

简介 这是一个检测交通锥并识别颜色的项目。我使用 yolov5 来训练和检测视锥细胞。此外&#xff0c;我使用 k 均值来确定主色&#xff0c;以对锥体颜色进行分类。目前&#xff0c;支持的颜色为红色、黄色、绿色和蓝色。其他颜色被归类为未知。 数据集和注释 我使用了一个自收…

会声会影2024永久汉化中文版本百度网盘下载

会声会影2024破解版免费下载是经过修改的视频剪辑软件&#xff0c;它能够免费为您提供很多功能。会声会影2024免费下载提供超过 1500 种独特的效果&#xff0c;可让您提升自我。会声会影破解版是用于是制作独一无二的视频的最强大、功能最全的软件。 它是一个简单而快速的视频编…

漏洞复现-log4j2原理分析及CVE-2021-44228

log4j2原理分析及漏洞复现 0x01 log4j2简介 Log4j2 是一个用于 Java 应用程序的成熟且功能强大的日志记录框架。它是 Log4j 的升级版本&#xff0c;相比于 Log4j&#xff0c;Log4j2 在性能、可靠性和灵活性方面都有显著的改进。 Log4j2 特点 高性能&#xff1a;Log4j2 使用异步…

JVM垃圾收集器三色标记算法

垃圾收集算法 分代收集理论 当前虚拟机的垃圾收集都采用分代收集算法&#xff0c;这种算法没有什么新的思想&#xff0c;只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 比…

【华为OD机试真题2023CD卷 JAVAJS】加密算法

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 加密算法 知识点DFS搜索 题目描述: 有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下: 1. 明文为一段数字串由0~9组成 2. 密码本为数字0~9组成的二维数组 3. 需要…

将Abp默认事件总线改造为分布式事件总线

文章目录 原理创建分布式事件总线实现自动订阅和事件转发 使用启动Redis服务配置传递Abp默认事件传递自定义事件 项目地址 原理 本地事件总线是通过Ioc容器来实现的。 IEventBus接口定义了事件总线的基本功能&#xff0c;如注册事件、取消注册事件、触发事件等。 Abp.Events…

关键字:void关键字

在编程中&#xff0c;void 是一个关键字&#xff0c;用于表示函数没有返回值。具体来说&#xff0c;void 关键字的作用如下&#xff1a; 函数声明&#xff1a;在函数声明中使用 void 关键字可以指定函数没有返回值。例如&#xff1a; 这表示 func() 函数不返回任何值。 函数…

英国版咸鱼「Depop」,小众二手跨境电商平台如何入驻?

对标美国二手闲鱼平台Mercia,PoshMark、东南亚Etsy&#xff0c;Depop是英国的一个面向创意人群的二手时尚市场&#xff0c;类似于Instagram&#xff0c;但更专注于买卖二手服装、配饰和艺术品。 近一年来,受通胀和高利率影响,英国的经济几乎一直处于停滞状态&#xff0c;零售市…

亚信安慧AntDB数据库——助力5G计费核心替换,全面自主可控

数字经济时代&#xff0c;5G以更快、更丰富、更智能的连接方式服务于各行各业。AntDB数据库&#xff0c;源于亚信科技&#xff0c;自2008年起成功落地全国24个省份的中国移动、中国电信、中国联通和中国广电等运营商项目&#xff0c;为数字化服务和信息化基础建设提供支持。 在…