关于Maven,你真的了解它吗?

news2024/11/25 20:31:30

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3


目录

  • 一. Maven有哪些核心概念?
    • 1.1 Maven中的POM
    • 1.2 Maven约定的目录结构
    • 1.3 Maven生命周期
    • 1.4 Maven的插件和目标
    • 1.5 Maven中的仓库
    • 1.6 Maven的坐标
  • 二. Maven的依赖管理是什么?
    • 2.1 依赖范围
    • 2.2 依赖的传递性
  • 三. 在Maven中如何统一管理依赖的版本号?
  • 四. Maven中的继承是什么?
    • 4.1 为什么需要继承?
    • 4.2 Maven的继承方式一
    • 4.3 Maven的继承方式二
  • 五. Maven 的聚合是什么?
    • 5.1 如果不使用Maven的聚合,会发生什么?
    • 5.2 使用Maven聚合的好处
    • 5.3 如何使用Maven的聚合?


一. Maven有哪些核心概念?

1.1 Maven中的POM

释义:

POM,英文全称为Project Object Model,意思是项目对象模型,就是将项目封装为对象模型,便于开发者使用Maven管理构建项目

常见POM标签:

代码示例如下

<?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">
     //设置父工程坐标    
    <parent>
        <artifactId>maven_test</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_makefriend</artifactId>
	
	//引入依赖(子工程的jar包或第三方库库)的坐标	
    <dependencies>

        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_make</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_hellofriend</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>



        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            //定义依赖范围
            <scope>test</scope>
        </dependency>

    </dependencies>


</project>

1.2 Maven约定的目录结构

详细目录结构如下所示:

在这里插入图片描述

1.3 Maven生命周期

Maven生命周期:

按照一定的顺序执行各个命令的过程

Maven生命周期包含以下三个部分组成:

  • Clean LifeCycle在进行真正的项目构建之前进行的一些清理工作。

  • Default LifeCycle项目构建的核心步骤包括编译,测试,打包,安装,部署等步骤。

在这里插入图片描述

​ 注意:

当你点击“install”时,前面会自”ccompile“依次按顺序执行到install时【红框中的步
骤】,install才 会执行安装,它不是点击”install“就会直接执行安装步骤。执行clean
时,它只会清除IDEA中maven模块 下的target目录,而不会删除安装在本地的jar包, 除非你手动删除。

  • Site LifeCycle生成项目报告,站点,发布站点

附注:

以上三个生命周期彼此之间互不干涉,相互独立。每个生命周期阶段都由一个或多个插件目标组成。通过在 pom.xml文件中绑定插件和目标到生命周期阶段上,就可以使用一条命令来自动化执行所有构建任务。

1.4 Maven的插件和目标

  • 插件:它的本质是由jar包配置文件组成,如下图所示

    例如插件maven-clean-plugin的构成如下:

    在这里插入图片描述

  • 目标每个插件都能实现多个功能,而每个功能就是一个插件目标。

    例如:compile就是插件maven-compiler-plugin的一个功能;pre-clean是插件
    maven-cean-plugin的一个目标。

1.5 Maven中的仓库

仓库的分类:

  • 本地仓库为当前计算机提供maven服务
  • 远程仓库为其他计算机也可以提供maven服务
    • 私服:架设在当前局域网环境下,为当前局域网范围内的所有Maven工程服务。
    • 中央仓库:架设在Internet.上,为全世界所有Maven工程服务。
    • 中央仓库的镜像:架设在各个大洲,为中央仓库分担流量。减轻中央仓库的压力,同时更快的响应用户请求。

仓库中存放的文件类型(以jar包为主):

  • Maven的插件
  • 第三方框架或工具的jar包
  • 自己研发的项目或模块

在这里插入图片描述

1.6 Maven的坐标

作用:

使用坐标引入jar包

坐标是如何构成?

由g-a-v构成

g --> groupld公司或组织的域名倒序+当前项目名称

a --> artifactld当前项目的模块名称

v --> version当前模块的版本

pom.xml中相关代码示例如下:

<parent>
    <artifactId>maven_demo</artifactId>
    <groupId>com.bd</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

注意:

g-a-v本地仓库jar包的位置
a-vjar包的全名

在这里插入图片描述

如何寻找相应jar包的坐标?

自己一个个在网上搜索?不不,效率太低了!

我们可以到 https://mvnrepository.com 或 https://central.sonatype.com 去查找相应jar包的坐标

如何使用上述两个网站去搜索?

以 https://mvnrepository.com中搜索junit 的jar包的坐标为例

①在搜素栏输入你要找的jar包名称,然后点击”Search“,在搜索结果找 ”usages“
最多的那一栏(往往有我们需要的资源),然后点击访问它

在这里插入图片描述

②找对应版本的jar包的坐标引用资源,没有找到的话就回退第①步找下一个”usages“对应的资源栏

在这里插入图片描述

③找到对应版本的jar包名称,以然后点进去(我这里以 junit 5.9.2版本为例),复制Maven栏下的代码(坐标引用内容)

在这里插入图片描述

④将复制的代码粘贴到你要应用的模块中的pop.xml文件里的<dependencies></dependencies>标签内,IEDA会自动在镜像服务器中下载该版本的jar包资源

在这里插入图片描述

在这里插入图片描述


二. Maven的依赖管理是什么?

Maven中的依赖是什么?

在 Maven 中,依赖(Dependency)是指项目需要的外部 JAR 文件或其他库。而依赖管理就是指在 Maven 中为项目定义和管理依赖关系的过程。

为什么要进行依赖管理?

通过使用依赖管理,Maven可以管理所有需要的 JAR和其他库,并确保它们可以正确下载并与本地项目一起工作。可能会存在多个依赖项依赖同一个第三方库的不同版本的场景,这时候需要根据项目需要的版本来选择合适的依赖项版本,避免因版本冲突导致的问题。

2.1 依赖范围

依赖语法:

<scope></scope>

可以在 <scope> 元素中使用以下值:

  1. compile:默认值,表示依赖项在编译、测试和运行期间都可用。
  2. provided表示依赖项在编译和测试期间可用,但是在运行时由容器或环境提供。
  3. runtime表示依赖项在运行时可用,但不需要在编译时和测试时可用。
  4. test表示依赖项仅在测试代码和源代码(即 src/test/ 目录)中使用,而不包括主要应用程序代码和资源。
  5. system表示依赖项类似于 provided,但从本地系统文件系统中获得依赖项,而不是从 Maven 仓库下载。 需要通过<systemPath> 指定依赖项的路径。

常用compile,test,provided的作用域范围:

  • compile在main目录下、test目录下、Tomcat【服务器】下均有效。
  • test只能在test目录下有效。
  • provided在main、test目录下均有效,Tomcat【服务器】无效。

2.2 依赖的传递性

什么是依赖的传递性?

当多个项目导入依赖时,Maven会自动处理依赖项之间的关系并保证项目的顺利构建。当定义项目中的依赖项时,它会自动查找依赖项的依赖项,并将其添加到 build path 中。这就是所谓的依赖项传递性,因为它涉及到一系列相互依赖的库之间的自动传递。

例如,如果你在项目中使用 Spring 框架,而Spring Framework 本身就有多个依赖项,如 Spring Core,Spring Beans 和 Spring Context 等。但是,你不需要在 Maven 文件中分别指定所有这些依赖项 - 只需仅提供对 Spring Framework 依赖的声明即可。然后,Maven 就会自动解决 Spring Framework 以及其所有依赖项的传递性,将它们引入到项目构建路径中。

那么Maven是如何查找项目中依赖项的依赖项,进而自动引入到项目构建路径?或者说根据什么原则来处理依赖项之间的关系去构建项目?

有两条原则:

  1. 路径最短者优先【就近原则】

案例:在maven_test项目中定义三个maven模块(maven_makefriend,maven_make与maven_hellofriend),其中模块maven_hellofriend引入log4j 1.2.14的jar包,maven_make引入log4j 1.2.17的jar包,maven_makefriend模块不引入log4j 的jar包;另外,模块maven_hellofriend要依赖于模块maven_make,模块maven_makefriend依赖于模块maven_hellofriend,观察思考模块maven_makefriend会应用哪个版本的log4j
的jar包?

在这里插入图片描述

①模块maven_make引入log4j 1.2.17的jar包并install至Maven的本地仓库中 代码示例如下:

<?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">
    <parent>
        <artifactId>maven_test</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_make</artifactId>
    <dependencies>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>



        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

②在模块maven_hellofriend引入log4j 1.2.14的jar包以及模块maven_make的jar包

代码示例如下:

<?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">
    <parent>
        <artifactId>maven_test</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_hellofriend</artifactId>
    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.14</version>
        </dependency>
		
		//引入模块maven_make的jar包
        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_make</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


    </dependencies>

③ 模块maven_makefriend依赖于模块maven_hellofriend,在pop.xml中引入其jar包

<?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">
    <parent>
        <artifactId>maven_test</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_makefriend</artifactId>

    <dependencies>
		//引入模块maven_hellofriend的jar包
        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_hellofriend</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>


</project>

在这里插入图片描述

  1. 先声明者优先

案例:根据上述案例场景,其他代码不变,假如模块maven_makefriend在pop.xml中同时引入模块maven_make与maven_hellofriend的jar包,那它会用哪个版本的log4j的jar包?

模块maven_makefriend在pop.xml中同时引入模块maven_make与maven_hellofriend的jar包

代码示例如下:

<?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">
    <parent>
        <artifactId>maven_test</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>maven_makefriend</artifactId>

    <dependencies>
		//同时引入模块maven_make与maven_hellofriend的jar包
        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_make</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        
        <dependency>
            <groupId>com.bd</groupId>
            <artifactId>maven_hellofriend</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>



        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

    </dependencies>


</project>

在这里插入图片描述


三. 在Maven中如何统一管理依赖的版本号?

语法:

示例代码如下

<properties>
    <spring-version>5.3.17</spring-version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring-version]</version>
    </dependency>
</dependencies>

ps:

这样做的好处是只需要修改一处,即<properties></properties>内的版本号,就可以修改多处的值,即<dependencies></dependencies>内所有应用
${spring-version} 的值。在外面定义版本号,里面使用,然后统一管理,统一修改相关jar包的版本号,进而提高编码效率。


四. Maven中的继承是什么?

4.1 为什么需要继承?

原因:

如果有多个子工程都使用同一个jar包,则可以将该jar包提取到父工程中,使用【继承原理】在子工程中使用,类似于Java中的子类继承父类

注意:

父工程的打包方式【jar/war/pom】,必须是pom方式

4.2 Maven的继承方式一

用法:

只需要在父工程中的pop.xml中引入指定jar包的坐标,那么它所有的子工程都默认强制引入父工程中的所有jar包

案例:在父工程maven_demo内创建两个子工程(day01_mavenTest与day01_mavenTest1)与一个工程day01_mavenHello,在父工程内的pop.xml里引入两个jar包(junit
4.12和junit-jupiter-api 5.9.2),其他工程内pop.xml不做任何jar包的坐标引入,演示观察继承效果

示例代码如下:

在父工程的pop.xml 引入两个jar包的坐标(junit 4.12和junit-jupiter-api 5.9.2)

//父工程的pop.xml 引入两个jar包的坐标(junit  4.12和junit-jupiter-api 5.9.2)
<?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>com.bd</groupId>
    <artifactId>maven_demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>day01_mavenTest</module>
        <module>day01_mavenTest1</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>


</project>

在这里插入图片描述

有一个问题?

假设在上述案例场景中,子工程day01_mavenTest1的pop.xml内想要引入junit 4.11的jar包坐标,那么它的依赖目录下会应用从父工程继承的junit 4.12 的jar包,还是在pop.xml中准备引入的junit 4.11的jar包?

答案:子工程day01_mavenTest1的依赖中会应用pop.xml中准备引入的junit 4.11的jar包,原因是根据依赖的传递性规则中最短路径者优先【就近原则】。

如下所示:

在这里插入图片描述

4.3 Maven的继承方式二

在该继承方式中,子工程可以自由选择应用从父工程继承的jar包资源

用法:

①在父工程中的pop.xml将导入的jar包放入<dependencyManagement></dependencyManagement>内。

示例代码如下:

//在父工程中的pop.xml里导入junit 4.12 的jar包,不过是放在
//dependencyManagement</dependencyManagement><dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

②在子工程中的pop.xml中引入父工程的相关jar包,要这样写(如下所示)

示例代码如下:

<parent>
    <artifactId>maven_demo</artifactId>
    <groupId>com.atguigu</groupId>
    <version>1.0-SNAPSHOT</version>
    //加入下面的代码,要写父工程pop.xml的相对路径
    <relativePath>../pom.xml</relativePath>
</parent>
//注意不能加要引入jar包的版本号
 <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
</dependencies>

注意: 绝对不能添加指定导入的jar包的版本号

案例:在父工程maven_demo内创建两个子工程(day01_mavenTest与day01_mavenTest1)与一个工程day01_mavenHello,在父工程内的pop.xml里引入两个jar包(junit
4.12和junit-jupiter-api 5.9.2),使用上述语法引入,子工程day01_mavenTest内的pop.xml使用继承方式二的语法引入父工程junit 4.12 的jar包的坐标引,演示观察继承效果

①父工程maven_demo内pop.xml中导入相关jar包

示例代码如下:

<?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>com.bd</groupId>
    <artifactId>maven_demo</artifactId>
    //规定父工程的打包方式必须是pom
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>day01_mavenTest</module>
        <module>day01_mavenTest1</module>
    </modules>

    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.9.2</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    </dependencyManagement>
</project>

②子工程day01_mavenTest的pop.xml内指定引入夫父工程中junit 4.12 的jar包

示例代码如下:

<?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">

    <parent>
        <artifactId>maven_demo</artifactId>
        <groupId>com.bd</groupId>
        <version>1.0-SNAPSHOT</version>
        <!--  以相对路径引入父工程pop.xml      -->
        <relativePath>../pom.xml</relativePath>
    </parent>

    <modelVersion>4.0.0</modelVersion>

    <artifactId>day01_mavenTest</artifactId>

    <!--  指定导入父工程中的junit 4.12 的jar包  -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

</project>

在这里插入图片描述


五. Maven 的聚合是什么?

释义:

在 Maven 中,聚合(Aggregation)是将多个项目组织在一起构建的一种特殊方式。这可以使多个项目成为单个构建,在一个命令下执行所有构建步骤。

聚合通常用于处理具有相同构建要求的多个项目。例如,大型应用程序可能由多个模块组成,每个模块都需要编译、测试、打包和部署成独立的库或组件。在这种情况下,可以将所有模块配置为使用 Maven 聚合进行构建,并使用一个父级 pom.xml 文件来定义它们之间的关系。

5.1 如果不使用Maven的聚合,会发生什么?

如果不使用聚合功能,在项目中就不能管理多个子模块,也不能一次性构建整个代码库。此外,没有聚合,每个模块都需要单独编译、测试和部署,增加了工作量和复杂度。因此,使用Maven的聚合功能可以极大的简化项目的管理并提高开发的效率。

5.2 使用Maven聚合的好处

好处:

只要将子工程聚合到父工程中,就可以实现效果(安装或清除父工程时,子工程会进行同步操作)。换而言之,就是在点击父工程的install 或 clean,安装父工程的同时,它的子工程也会同时安装,clean时 一起 clean。

5.3 如何使用Maven的聚合?

Maven 使用 <modules> 元素管理所有相关的子工程(子模块)。该元素包含一系列 <module> 子元素,其中每个子元素指定要聚合的 Maven 项目的目录名称

语法:

代码示例如下

<modules>
    <module>day01_mavenTest</module>
    <module>day01_mavenTest1</module>
</modules>

<modules> 元素下包含了两个子元素,即 day01_mavenTest、day01_mavenTest1。这意味着 该pop.xml所在的Maven项目 将聚合这两个项目,并在一个命令下一起执行它们的构建。

注意是在要将某一个Maven项目作为聚合的“容器”,它负责聚合容纳其他要聚合的Maven项目,是身为“聚合容器”的Maven项目下的pop.xml里写,类似Java中的抽象类与接口的概念

案例:演示Maven聚合的功能(点击”install“功能 安装父工程时,则同时安装它子工程)

安装之前:

在这里插入图片描述

安装之后:

在这里插入图片描述

在这里插入图片描述

注意:

Maven会按照依赖顺序自动安装子工程

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

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

相关文章

【面试】MySQL事务的12连问

文章目录 前言1. 什么是数据库事务&#xff1f;2. 事务的四大特性3. 事务的隔离级别有哪些&#xff1f;MySQL的默认隔离级别是什么&#xff1f;4. Mysql为什么选择RR作为默认隔离级别&#xff1f;5. 很多大厂为什么选择RC数据库隔离级别&#xff1f;6. 并发场景&#xff0c;数据…

经典回归算法

回归的概念 回归方程&#xff1a; 写成矩阵&#xff1a; 核心问题&#xff0c;构建预测函数z来映射特征矩阵x和标签y的线性关系 预测的目标值&#xff0c;有连续值也有离散值 连续值&#xff0c;就直接预测输出就行离散值&#xff0c;需要在输出端加一个变换函数例如。Si…

入参校验产品化 schema

与规则引擎不同,规则面向技术, 传入data, 返回 所有异常字段和原因. 面向技术, 先有对象,再有规则, 如何通过交互来编写schema是个难题? 和json-schema区别: 思路上就是反过来的, 面相产品, schema可视化编辑器, 是面向结构设计. 现有模型,才有数据, 才可以编程. 基于配置…

Docker安装运行Nginx容器(纯步骤)

Docker安装Nginx容器并运行 本文章只有步骤&#xff0c;没有原理解释&#xff0c;只做平时学习提示。提前说明&#xff1a;由于nginx里的配置文件比较多&#xff0c;所以本文章不对此配置文件解释而且会有一些小问题&#xff0c;这个你酌情操作&#xff0c;但不影响你nginx容器…

化工厂5G+北斗RTK室外人员定位系统解决方案

化工厂的安全管理工作非常重要&#xff0c;为了确保员工的安全和提高生产效率&#xff0c;建议引入人员定位技术。下面给大家介绍化工厂5G北斗RTK室外人员定位系统解决方案。关于化工厂室内人员定位方案&#xff0c;可以参考我之前写的文章&#xff1a;化工厂5G蓝牙LoRa室内人员…

声网 Token 鉴权机制,以及常见的问题

Token鉴权是什么&#xff1f; Token也称为动态密钥&#xff0c;是在加入频道时用于校验用户权限的一组字符串&#xff1b;鉴权是指在用户访问你的系统前&#xff0c;对其进行身份校验。用户在使用声网服务&#xff0c;如加入音视频通话或登录信令系统时&#xff0c;声网会使用…

广州华锐互动:工厂园区数字孪生系统让企业管理更加高效便捷

随着信息技术的快速发展&#xff0c;企业管理越来越倾向于数字化和智能化&#xff0c;而数字孪生技术在这一领域中扮演着重要角色。 工厂园区数字孪生系统是一种基于数字孪生技术的智能化系统&#xff0c;可以模拟工厂生产过程&#xff0c;将真实场景数字化&#xff0c;并进行…

高阶数据结构 ——— 并查集

文章目录 并查集并查集的原理并查集的实现并查集的初始化查找元素所在的集合合并两个元素所在的集合获取并查集中集合的个数并查集的路径压缩元素的编号问题 并查集的题目省份的数量等式方程的可满足性 并查集 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的…

如何合理使用 Jetpack 组件开发 Android 项目?

Jetpack 是 Android 官方推出的一套开发库&#xff0c;其中包含众多的组件&#xff0c;可以让 Android 开发者更快更高效地开发应用程序。Jetpack 组件分为四大部分&#xff1a;架构、行为、UI 和基础组件。 下面详细阐述如何合理使用 Jetpack 组件开发 Android 项目。 1. 熟练…

openQA----基于openSUSE部署openQA

【原文链接】openQA----基于openSUSE部署openQA &#xff08;1&#xff09;下载 openqa-bootstrap 脚本并执行 cd /opt/ curl -s https://raw.githubusercontent.com/os-autoinst/openQA/master/script/openqa-bootstrap | bash -x&#xff08;2&#xff09;配置apache proxy…

Nestjs全网最佳翻译-概况-守卫-Guards

守卫 带上装饰器 Injectable() 并实现了 CanActivate 接口的类&#xff0c;就是守卫。 守护只做一件事情。他们根据运行时的某些条件&#xff08;如权限、角色、ACL等&#xff09;来决定一个给定的请求是否会被路由处理程序处理。这通常被称为授权。在传统的Express应用程序中…

浅析AI视频智能检测技术在城市管理中的场景应用

随着中国的城市建设和发展日益加快&#xff0c;城镇化过程中重建设、轻管理模式带来不少管理难点&#xff0c;传统城管模式存在违法问题多样、缺乏源头治理、业务协同难、取证手段单一等&#xff0c;人员不足问题进一步加剧管理难度。随着移动互联网、物联网、云计算、大数据、…

Vue3 全局实例上挂载属性方法

导语 在大多数开发需求中&#xff0c;我们有时需要将某个数据&#xff0c;或者某个函数方法&#xff0c;挂载到&#xff0c;全局实例身上&#xff0c;以便于&#xff0c;在项目全局的任何位置都能够调用其方法&#xff0c;或读取其数据。 在Vue2 中&#xff0c;我们是在 main.j…

【Unity URP】Rendering Debugger和可视化MipMap方案

写在前面 最近开始学习Unity性能优化&#xff0c;是结合了《Unity游戏优化》这本书和教程《Unity性能优化》第叁节——静态资源优化(3)——纹理的基础概念一起学习。在学习纹理优化部分时候遇到了问题&#xff0c;固定管线下Unity的Scene窗口有一个可视化Mipmap的渲染模式&…

ChatGPT实现数据结构转换

数据结构转换 在应用系统开发和维护中&#xff0c;经常会有配置数据或客户数据需要在不同的序列化结构中相互转换的需求。不同编程语言之前&#xff0c;对数据结构的偏好也不一样&#xff0c;比如 JavaScript 一般使用 JSON、Java 一般使用 XML、Ruby 一般使用 YAML、Golang 一…

搞懂 API , API 这些特点要记住

API 是现代软件开发和应用程序中的必要组成部分&#xff0c;它为企业和开发者提供了极大的便利和工作效率。不过&#xff0c;API 也有其不足之处。下面将在这篇文章中详细探讨 API 的优点和缺点。 优点&#xff1a; 简化数据访问和交互 API 消除了传统的数据集成方法&#x…

使用chatGPT开发获取格点天气数据

1. 格点天气 1.1. 格点天气 以经纬度为基准的全球高精度、公里级、格点化天气预报产品&#xff0c;包括任意经纬度的实时天气和天气预报。其中&#xff0c;任意坐标的高精度天气&#xff0c;精确到3-5公里范围&#xff0c;包括&#xff1a;温度、湿度、大气压、天气状况、风力…

nvidia-smi命令解析

桌面端 服务器端 Fan:风扇转速&#xff08;0%-100%&#xff09;&#xff0c;N/A表示没有风扇 Temp&#xff1a;GPU温度&#xff08;GPU温度过高会导致GPU频率下降&#xff09; Perf&#xff1a;性能状态&#xff0c;从P0&#xff08;最大性能&#xff09;到P12&#xff08;最…

zookeeper 安装下载与集群

一、单机部署 1、安装包下载 https://archive.apache.org/dist/zookeeper 2、上传并解压 tar -zvxf zookeeper-3.4.14.tar.gz3、配置环境变量 my_env.sh是自己创建的环境变量文件&#xff0c;你也可以自己创建 vim /etc/profile.d/my_env.sh#ZOOKEEPER_HOME export ZOOKE…

什么是分布式任务调度?怎样实现任务调度

通常任务调度的程序是集成在应用中的&#xff0c;比如&#xff1a;优惠卷服务中包括了定时发放优惠卷的的调度程序&#xff0c;结算服务中包括了定期生成报表的任务调度程序&#xff0c;由于采用分布式架构&#xff0c;一个服务往往会部署多个冗余实例来运行我们的业务&#xf…