Maven(一)基础入门

news2024/9/21 1:43:28

目录

    • 一、Maven简介
      • 1.背景
      • 2.Maven是什么
      • 3.Maven的作用
    • 二、下载与安装
      • 1.下载
      • 2.安装
      • 3.配置环境变量
    • 三、Maven基础概念
      • 1.仓库
      • 2.坐标
      • 3.本地仓库配置
      • 4.远程仓库配置
      • 5.阿里云-镜像仓库配置
      • 6.全局 settings 与用户 settings 区别
    • 四、第一个Maven项目(手工制作)
      • 1.Maven项目结构
      • 2.Maven项目构建
        • 构建过程1:compile
        • 构建过程2:clean
        • 构建过程3:test
        • 构建过程4:package
        • 构建过程5:install
      • 3.插件创建工程
    • 五、第一个Maven项目(IDEA生成)
      • 1.创建 Maven 项目-jar
      • 2.创建 Maven 项目-war
      • 2.定制 Maven 脚本
      • 3.插件
    • 六、依赖管理
      • 1.依赖配置
      • 2.依赖传递
      • 3.依赖传递冲突问题
      • 4.可选依赖
      • 5.排除依赖
      • 6.依赖范围
      • 7.依赖范围传递性
    • 七、生命周期与插件
      • 1.构建生命周期
      • 2.插件
      • 3.打包源码插件

在这里插入图片描述

一、Maven简介

1.背景

传统项目管理状态分析:

  • jar包不统一,jar包不兼容;
  • 工程升级维护过程操作繁琐。
  • ……

在这里插入图片描述

2.Maven是什么

  • Maven 是 java 语言编写的一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
  • POM(Project Object Model):项目对象模型。

在这里插入图片描述

3.Maven的作用

  • 项目构建:提供标准的、跨平台的自动化项目构建方式。
  • 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题。
  • 统一开发结构:提供标准的、统一的项目结构。

Maven出现前,项目结构杂乱:

在这里插入图片描述

Maven出现后,创建了统一的项目结构:

在这里插入图片描述

二、下载与安装

  • 官网: http://maven.apache.org/
  • 下载地址: http://maven.apache.org/download.cgi

1.下载

下载页面可以看到目前最新的版本号,以及最后发布时间:

在这里插入图片描述

在下面可以看到 Linux、Windows 的安装包,以及相应的源码包:

在这里插入图片描述

2.安装

解压压缩包后,目录内容如下:

在这里插入图片描述

我们用笔记本打开 bin 目录下的 mvn.cmd:

在这里插入图片描述

可以看到 Maven 是需要 JAVA_HOME 和 MAVEN_HOME 两个环境变量支持的:

在这里插入图片描述

在这里插入图片描述

3.配置环境变量

我们需要提前创建好这两个环境变量,在我的电脑,点击属性 -> 高级系统设置 -> 环境变量 -> 新建,输入好我们的安装目录即可。

在这里插入图片描述

还需要将 maven 的执行命令放到 Path 里面,方便我们后期使用。

在这里插入图片描述

输入如下命令,测试环境变量配置结果:

mvn -v

正确配置后结果:

在这里插入图片描述

三、Maven基础概念

1.仓库

  • 仓库:用于存储资源,包括各种 jar 包
  • 仓库分类:
    • 本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源。
    • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源。
      • 中央仓库:Maven 团队维护,存储所有资源的仓库。
      • 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源。
  • 私服的作用:
    • 保护具有版权的资源,包括购买或自主研发的 jar 包。
      • 中央仓库中的 jar 都是开源的,不能存储具有版权的资源。
    • 一定范围内的共享资源,仅对内部开放,不对外共享。

在这里插入图片描述

2.坐标

  • 什么是坐标?

    Maven 中的坐标用于描述仓库中资源的位置。

    https://repo1.maven.org/maven2/

  • Maven 坐标主要组成:

    • groupId: 定义当前 Maven 项目隶属组织名称(通常是域名反写,例如:org.mybatis);
    • artifactId: 定义当前 Maven 项目名称(通常是模块名称,例如 CRM、SMS);
    • version: 定义当前项目版本号。
    • packaging: 定义该项目的打包方式,取值一般有如下三种:
      • jar:该资源打成 jar 包,默认是 jar,用于打包 java 工程;
      • war:该资源打成 war 包,用于打包 web 工程;
      • pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个 pom.xml 不生成 jar 或其他包结构。

    Maven 仓库网站: https://mvnrepository.com/

  • Maven 坐标的作用

    使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的标识与下载工作交由机器完成。

在这里插入图片描述

例如:我想找 junit 4.12 的包

在这里插入图片描述

我们一般找 Maven 的相关依赖,都是去 Maven 的仓库页面上找:https://mvnrepository.com/

在这里插入图片描述

3.本地仓库配置

  • Maven 启动后,会自动保存下载的资源到本地仓库。

    • 默认位置

      <localReporsitory>${user.home}/.m2/repository</localReporsitory>
      

      默认仓库目录为登陆用户名所在目录下的 .m2 文件夹中。

    • 自定义位置

      <localRepository>D:\maven_repository</localRepository>
      

      设置仓库目录为 D:\maven_repository 文件夹中。

我们先执行一下如下命令,Maven 会自动帮我们创建一个本地仓库:

mvn

创建的本地仓库地址默认是在:C:\Users\用户名\.m2\repository

在这里插入图片描述

但是如果我们使用默认地址,这个文件夹会越来越大,把 C 盘撑爆,所以我们需要自定义仓库路径。可以在 Maven 安装路径的 conf 文件夹下的 settings.xml 中进行配置:

在这里插入图片描述

4.远程仓库配置

  • 远程仓库其实就是指定 Maven 的 jar 包是从哪来的,其实默认在 Maven 中已经做了设置了。

  • Maven 默认连接的仓库位置:

    <repositories>
    	<repository>
        	<id>central</id>
            <name>Central Repository</name>
            <url>http://repo.maven.apache.org/maven2</url>
            <layout>default</layout>
            <snapshots>
            	<enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    

具体是在哪里进行了远程仓库的配置?

先说结论:默认远程仓库是在maven-model-builde-3.9.1.jar(不同版本可能会有区别)的org/apache/maven/model路径下的pom-4.0.0.xml中指定的。

下面说一下具体是怎么找到的:

首先,我们打开 Maven 安装目录下的 lib 文件夹,使用 WinRAR 打开任意一个 jar 包后,在 WinRAR 中返回到上一级 lib 目录下,点击搜索,输入 pom*.* 进行搜索:

WinRAR下载地址: https://www.win-rar.com/start.html?L=7

在这里插入图片描述

在搜索结果中,我们可以看到有一个 pom-4.0.0.xml 的文件:

在这里插入图片描述

点击定位,就可以定位到文件的具体位置了,我们关闭搜索框,然后将文件拖拽到刚才的 lib 目录下:

在这里插入图片描述

打开后,我们可以看到这里配置了远程仓库的地址:

在这里插入图片描述

我们可以看到 url 是 https://repo.maven.apache.org/maven2,这个是国外的服务器,我们都知道国外的服务器下载东西比较慢,所以我们就需要修改默认的配置,使用国内的服务器帮我们下载。

阿里就做好了这样的一个仓库,注意这里不是修改中央仓库的位置,而是当我们访问中央仓库的时候,不再访问国外的服务器,而是访问阿里的服务器,这样速度就比较快了,国外的中央仓库依然存在。那么我们管这样的仓库,叫做镜像仓库

5.阿里云-镜像仓库配置

  • 在 settings.xml 文件中配置阿里云镜像仓库:

    <mirrors>
    	<!-- 配置具体的仓库的下载镜像 -->
        <mirror>
        	<!-- 此镜像的唯一标识符,用来区分不同的 mirror 元素 -->
            <id>nexus-aliyun</id>
            <!-- 对哪种仓库进行镜像,简单说就是替代哪个仓库 -->
            <mirrorOf>central</mirrorOf>
            <!-- 镜像名称 -->
            <name>Nexus aliyun</name>
            <!-- 镜像URL -->
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
    </mirrors>
    

我们打开 settings.xml 文件,找到 <mirrors> 标签,将上面的阿里云仓库配置粘贴到里面:

在这里插入图片描述

到这儿我们就完成了镜像仓库的配置。

补充:

  • 国内建议使用阿里云的镜像(可以百度搜 阿里云maven,也可以打开下方链接)
  • 阿里云仓库链接:https://developer.aliyun.com/mvn/guide

6.全局 settings 与用户 settings 区别

  • 全局 settings 定义了当前计算机中 Maven 的共同配置。
  • 用户 settings 定义了当前用户的配置。

这里仅作了解,我们可以在仓库中再配置一个 settings.xml 文件,注意这里的 settings.xml 文件最好与 conf 中的 settings.xml 文件保持一致,不然关于不一致的内容,仓库中的 settings.xml 内容会覆盖 conf 中的 settings.xml 内容。

四、第一个Maven项目(手工制作)

1.Maven项目结构

先创建一个文件夹 java-project,再根据Maven项目结构依次创建相应层级的文件夹

在这里插入图片描述

在 java-project/src/main/java/com/demo 目录下,创建 Demo.java 文件,并写入如下内容:

package com.demo;

public class Demo {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

在 java-project/src/test/java/com/demo 目录下,创建 DemoTest.java 文件,并写入如下内容:

package com.demo;

import org.junit.Test;
import org.junit.Assert;

public class DemoTest {

    @Test
    public void testDemo() {
        Assert.assertEquals("Hello World!", "Hello World!");
    }
}

在 java-project 目录下,创建 pom.xml 文件,并写入如下内容:

<?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">
    <!--指定pom的模型版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--打包方式 web工程打包为war java工程打包为jar-->
    <packaging>jar</packaging>

    <!--组织id-->
    <groupId>com.demo</groupId>
    <!--项目id-->
    <artifactId>java-project</artifactId>
    <!--组织id  release代表完成版,SNAPSHOT代表开发版-->
    <version>1.0-SNAPSHOT</version>

    <!-- 指定 JDK 版本和编码格式 -->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!--设置当前工程的所有依赖-->
    <dependencies>
        <!--具体的依赖-->
        <dependency>
            <!--依赖的组织id-->
            <groupId>junit</groupId>
            <!--依赖的项目id-->
            <artifactId>junit</artifactId>
            <!--依赖的版本-->
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

创建完成后的Maven项目结构如下:

在这里插入图片描述

2.Maven项目构建

构建过程1:compile

在 pom.xml 文件所在目录中,打开控制台窗口,执行如下命令进行编译:

mvn compile

执行结果如下,我们可以看到编译过程中是先去我们指定的阿里云仓库去下载依赖:

在这里插入图片描述

如果是之前已经下载过依赖,再执行就会是这样:

在这里插入图片描述

我们可以看到这里使用了两个插件:maven-resources-pluginmaven-compiler-pugin

插件的存放位置可以去maven仓库中找到:

在这里插入图片描述

在这里插入图片描述

下载编译之后,我们可以在编译日志中看到编译了1个文件到 target\classes 目录中:

在这里插入图片描述

命令执行完之后,我们可以看到项目中多了 target 文件夹。

在这里插入图片描述

目前 target 文件夹中包含两个文件夹:

在这里插入图片描述

构建过程2:clean

我们可以执行如下命令,来清理编译后的内容:

mvn clean

执行结果如下:

在这里插入图片描述

我们可以看到,这里也是使用了一个 Maven 插件:maven-clean-plugin,然后执行的操作就是将 target 文件夹删除了。

构建过程3:test

我们可以执行如下命令,对项目进行测试:

mvn test

执行结果如下:

在这里插入图片描述

执行日志中,我们可以看到执行了 1 个测试,失败了 0 个。

执行之后,我们发现又创建了 target 文件夹,但是文件夹下的内容变成了 4 个:

在这里插入图片描述

其中 surefire-reports 里面包含了我们项目的测试报告:

在这里插入图片描述

其中,txt 文件记录了我们的测试日志信息:

在这里插入图片描述

xml 文件记录了我们测试的详细信息,包括测试的环境信息(如JDK版本、系统名称、时区、编码)等:

在这里插入图片描述

最后面展示了执行的测试类和测试的执行时间:

在这里插入图片描述

构建过程4:package

执行如下命令,可以对项目进行打包:

mvn package

执行结果如下:

在这里插入图片描述

我们可以看到,package 命令是先执行了 compile、test 之后才进行 package 打包。

target 目录中出现了我们打好的 jar 包:

在这里插入图片描述

构建过程5:install

执行如下命令,可以对项目进行安装:

mvn install

这个安装命令主要用于将我们的项目打包之后放到我们的本地仓库中,安装之后,我们可以在仓库中看到我们自己的包:

在这里插入图片描述

3.插件创建工程

  • 创建工程:

    mvn archetype:generate \
    	-DgroupId={project-packaging} \
    	-DartifactId={project-name} \
    	-Dversion={project-version} \
    	-DarchetypeArtifactId=maven-archetype-quickstart \
    	-DinteractiveMode=false
    
  • 创建java工程

    mvn archetype:generate -DgroupId=com.demo -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
    
  • 创建web工程

    mvn archetype:generate -DgroupId=com.demo -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
    

其实对比之下,maven创建web项目的时候,只是多了一个web目录。

在这里插入图片描述

五、第一个Maven项目(IDEA生成)

1.创建 Maven 项目-jar

打开 IDEA,依次点击 File -> New -> Project...

在这里插入图片描述

选择 New Project,填写好项目名称,选择 Maven工程,填写好所属组织名和项目ID,点击Create

在这里插入图片描述

这样 IDEA 就会自动帮我们创建好一个 Maven 项目了。

在这里插入图片描述

2.创建 Maven 项目-war

同样的我们可以选择Maven Archetype,从模板中选择web模板进行创建。

在这里插入图片描述

创建后项目如下:

在这里插入图片描述

2.定制 Maven 脚本

我们可以点击右上角运行的下拉框,选择Edit Configurations... 进行配置。

在这里插入图片描述

点击+,选择 Maven

在这里插入图片描述

输入我们想要定制的构建过程,点击 OK。

在这里插入图片描述

我们就可以在右上角看到我们自己定制的 Maven 命令了,直接运行就相当于执行了相应的maven命令。

在这里插入图片描述

3.插件

  • Tomcat 7 运行插件

    <build>
    	<plugins>
        	<plugin>
            	<groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                	<port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

我们可以去 Maven Repository 搜一下 tomcat maven ,在里面找一个 org.apache.tomcat.maven 的包:

Maven Repository地址:https://mvnrepository.com/

在这里插入图片描述

点进去之后的第一个包就是我们需要的 tomcat 插件:

在这里插入图片描述

我们选择2.1的版本,复制相应的坐标:

在这里插入图片描述

注意,这里需要使用war包才能启动tomcat7,我们可以使用刚才创建好的web-project项目,复制后,如下所示:

在这里插入图片描述

IDEA右边的Maven窗口我们也可以看到新增了 tomcat7 的插件:

在这里插入图片描述

我们打开 tomcat7 插件,双击 tomcat7:run,就可以运行 tomcat了。

在这里插入图片描述

我们可以看到tomcat7插件已经启动成功了,8080端口:

在这里插入图片描述

访问地址:http://localhost:8080/web-project

在这里插入图片描述

如果我们想定制端口和访问路径,可以进行如下配置:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <port>80</port>
        <path>/</path>
    </configuration>
</plugin>

六、依赖管理

1.依赖配置

  • 依赖: 指当前项目运行所需的 jar,一个项目可以设置多个依赖。

  • 格式:

    <!-- 设置当前项目所依赖的所有jar -->
    <dependencies>
        <!-- 设置具体的依赖 -->
    	<dependency>
        	<!-- 依赖所属组织id -->
            <groupId>junit</groupId>
            <!-- 依赖所属项目id -->
            <artifactId>junit</artifactId>
            <!-- 依赖版本号 -->
            <version>4.12</version>
        </dependency>
    </dependencies>
    

2.依赖传递

  • 依赖具有传递性
    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
    • 简介依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。

在这里插入图片描述

3.依赖传递冲突问题

  • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高。
  • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的。
  • 特殊优先:当同级资源配置了相同资源的不同版本,后配置的覆盖先配置的。

在这里插入图片描述

4.可选依赖

  • 可选依赖指对外隐藏当前所依赖的资源——不透明。

    <dependency>
    	<groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <optional>true</optional>
    </dependency>
    

5.排除依赖

  • 排除依赖指主动断开依赖的资源,被排除的资源无序指定版本——不需要。

    <dependency>
    	<groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <exclusions>
        	<exclusion>
            	<groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

6.依赖范围

  • 依赖的 jar 默认情况可以在任何地方使用,可以通过 scope 标签设定其作用范围。
  • 作用范围:
    • 主程序范围有效(main文件夹范围内)
    • 测试程序范围有效(test文件夹范围内)
    • 是否参与打包(package指令范围内)

在这里插入图片描述

7.依赖范围传递性

  • 带有依赖范围的资源在进行传递时,作用范围将受到影响。

在这里插入图片描述

(表中为空的部分表示依赖会消失掉。)

七、生命周期与插件

1.构建生命周期

  • Maven 构建生命周期描述的是一次构建过程经历了多少个事件。
  • Maven 对项目构建的生命周期划分为 3 套:
    • clean:清理工作;
    • default:核心工作,例如:编译,测试,打包,部署等。
    • site:产生报告,发布站点等。

在这里插入图片描述

clean 生命周期

在这里插入图片描述

default 生命周期

执行生命周期中的任何一步(例如:compile),这一步之前的所有操作都需要进行一遍。

在这里插入图片描述

site 生命周期

在这里插入图片描述

2.插件

  • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能。

  • 默认maven在各个生命周期上绑定有预设的功能。

  • 通过插件可以自定义其他功能。

    Maven 官网插件地址: https://maven.apache.org/plugins/index.html

打开 Maven 官网插件页面:

在这里插入图片描述

我们可以看到,官网根据插件的类型进行了不同的分类:

  • Core plugins:核心插件,包括 clean、compiler、deploy等;
  • Packaging types/tools:打包插件,包括 jar、war、ejb、source等;
  • Reporting plugins:报告插件,包括 javadoc等;
  • Tools:工具插件,包括 antrun、artifact等。

3.打包源码插件

<build>
	<plugins>
    	<plugin>
        	<groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>2.2.1</version>
            <executions>
            	<execution>
                	<goals>
                        <!-- 打主程序的源码包 -->
                        <goal>jar</goal>
                    </goals>
                    <!-- 在生成测试资源文件时执行 -->
                    <phase>generate-test-resources</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我们在插件页面选择 Packaging types/tools 类型中的 source,点击进入。

在这里插入图片描述

我们可以看到,这里介绍了 source 插件的详细内容,其中包含了 5 种 Goals,这里我们主要说其中两种:

  • jar:对主程序的源码打包;
  • test-jar:对测试程序的源码打包。

在这里插入图片描述

我们之前讲过构建生命周期/阶段(Build lifecycle & phases),和我们插件中用到的 <phase> 标签是一个含义,这里指的是在哪个阶段执行插件。

在这里插入图片描述

这里 <phase> 中的 generate-test-resources 指的就是我们之前提到的 default 构建生命周期中的一个阶段。

在这里插入图片描述

在项目中增加完 source 的插件配置后,我们可以在IDEA右侧看到相应的插件已经加载好了:

在这里插入图片描述

由于目前<phase>指定是在生成测试资源文件时执行,所以这里我们对项目进行 clean test

在这里插入图片描述

执行结束后,我们可以看到 target 文件夹下多了一个 source 源码包:

在这里插入图片描述

参考地址:

1.Maven技术快速入门,https://blog.csdn.net/Augenstern_QXL/article/details/118443858

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

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

相关文章

【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透」

转载自远程内网穿透的文章&#xff1a;【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透」 1.前言 Python作为热度比较高的编程语言&#xff0c;其语法简单且语句清晰&#xff0c;而且python有良好的兼容性&#xff0c;可以轻松的和其他编程语言&#xff08;(比如…

Qt/QML编程学习之心得:ALSA音频开发(六)

Linux内核中对音频播放和捕获的最初支持是由开放声音系统(OSS)提供的。OSS API是为音频而设计的带有16位双通道回放和捕获的卡,以及随后的API通过open()、close()、read()和write()系统调用的标准POSIX。OSS的主要问题是,虽然基于文件的API实际上易于应用程序开发人…

电磁阀“位”与“通”的详细解说(示意图)

电磁阀是用电磁控制的工业设备&#xff0c;是用来控制流体的自动化基础元件&#xff0c;属于执行器。 而气动电磁阀是其中的一种&#xff0c;是通过控制阀体的移动来档住或漏出不同的排油的孔&#xff0c;而进油孔是常开的&#xff0c;液压油就会进入不同的排油管&#xff0c;…

物联网定位技术|实验报告|实验一 Wi-Fi指纹定位

目录 实验1 Wi-Fi指纹定位 1. 实验目标 2. 实验背景 3. 实验原理 3.1 WIFI基础知识 3.2室内定位方法建模 3.3指纹定位算法 ①离线/训练阶段 ②在线/定位阶段 4. 关键代码 5. 实验结果 6. 室内定位误差分析 6.1 非视距传播 6.2 多径传播 6.3 阴影效应 7. 实验总结 物联网定位技…

ESP32学习三-环境搭建(ESP-IDF V5.0,Ubuntu20.4)

一、准备事项 Ubuntu 20.04。具体安装可以参考如下链接。使用VMware安装Ubuntu虚拟机和VMware Tools_t_guest的博客-CSDN博客 二、安装ESP-IDF 1&#xff09;、确认python3版本 输入python3 --version来确认python3的版本。因为要安装ESP-IDF 5.0版本&#xff0c;python3的版本…

Docker Compose与Docker Swarm的简介和区别

Docker Compose与Docker Swarm的简介和区别 背景Compose 简介Swarm 简介Compose 和 Swarm区别 背景 之前公司很多都是单体的spring boot服务&#xff0c;使用Docker的时候&#xff0c;只需要定义Dockerfile 文件&#xff0c;然后打成镜像把容器启动起来就ok了。但是现在的微服…

低成本,全流程!基于PaddleDepth和Paddle3D的三维视觉技术应用方案

现实生活中的很多应用场景都需要涉及到三维信息。针对三维视觉技术应用场景复杂多样、三维感知任务众多、流程复杂等问题&#xff0c;飞桨为开发者提供了低成本的深度信息搜集方案 PaddleDepth 以及面向自动驾驶三维感知的全流程开发套件 Paddle3D 。 三维视觉技术应用场景 3D …

01——计算机系统基础

计算机系统基础知识 计算机系统基础一、计算机系统的基本组成1 计算机硬件系统 二、计算机的类型三、计算机的组成和工作原理1 计算机的组成2 总线的基本概念2.1 总线的定义与分类 3 系统总线3.1 系统总线的概念3.2 常见的系统总线 4 外总线5 中央处理单元&#xff08;CPU&…

【刷题】搜索——BFS:八数码【A*模板】

A*简介 某点u的距离f(u)定义如下&#xff1a; f ( u ) g ( u ) h ( u ) f(u) g(u) h(u) f(u)g(u)h(u) g(u)&#xff1a;起点到u走的距离 h(u)&#xff1a;u到终点估计的距离&#xff0c;保证 0 ≤ h ( u ) ≤ h ′ ( u ) 0 \leq h(u) \leq h(u) 0≤h(u)≤h′(u)。其中h’…

健康体检信息系统源码,个人体检、团队体检、体检报告、统计分析

健康体检管理系统源码 PEIS源码 数据对接 体检人员管理系统&#xff0c;系统有演示&#xff0c;文档齐全。 一套专业的体检管理系统源码&#xff0c;该系统涵盖个人体检、团队体检、关爱体检等多种体检类型&#xff0c;提供体检登记管理、体检结果管理、体检报告打印及发放…

阿里云服务器搭建网站流程by宝塔Linux面板

阿里云服务器安装宝塔面板教程&#xff0c;云服务器吧以阿里云Linux系统云服务器安装宝塔Linux面板为例&#xff0c;先配置云服务器安全组开放宝塔所需端口8888、888、80、443、20和21端口&#xff0c;然后执行安装宝塔面板命令脚本&#xff0c;最后登录宝塔后台安装LNMP&#…

尝试图像锐化

#图像锐化 拉普拉斯&#xff1a; 导数f(x,y)f(x1,y)f(x−1,y)f(x,y1)f(x,y−1)−4f(x,y) 可以扩展到8邻域&#xff1a; ​ Mat Sharpen(Mat input, int percent, int type) { Mat result; Mat s input.clone(); Mat kernel; switch (type) { case 0: kernel (Mat_(3, 3)…

4个令人惊艳的ChatGPT项目,开源了

自从 ChatGPT、Stable Diffusion 发布以来&#xff0c;各种相关开源项目百花齐放&#xff0c;着实让人应接不暇。今天&#xff0c;将着重挑选几个优质的开源项目&#xff0c;对我们的日常工作、学习生活&#xff0c;都会有很大的帮助。 一、Visual ChatGPT 这个是微软开源的项…

代码随想录_二叉树_leetcode700、98

leetcode700.二叉搜索树中的搜索 700. 二叉搜索树中的搜索 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&…

乘客出租出行需求短时预测

CLAB模型是一种空间-时间环境下基于深度学习的乘客流量预测模型&#xff0c;可有效挖掘出租车乘客出行的时空相关性&#xff0c;考虑历史数据流入量对出行需求的影响&#xff0c;从而提高预测准确性。 数据挖掘维度&#xff1a; 1.时间维度&#xff1a;预测的是短时预测&#x…

关于ONgDB我问了ChatGPT这些问题!

关于ONgDB我问了ChatGPT这些问题&#xff01; 关于ONgDB我问了ChatGPT这些问题&#xff01;提问 ChatGPTONgDB和Neo4j的区别是什么&#xff1f;ONgDB可以适配哪些版本的Neo4j软件包&#xff1f;ONgDB可以适配哪个版本的Neo4j Python驱动软件包&#xff1f;ONgDB 1.x版本的特点是…

Oracle系列之八:SQL查询

SQL查询 1. 基本查询2. 连接查询3. SQL语句解析4. Oracle Hint Oracle它提供了一个强大的SQL引擎&#xff0c;使得用户可以通过SQL语言来管理和操作数据库。 1. 基本查询 以CAP&#xff08;顾客-代理-产品&#xff09;数据库为例&#xff0c;表结构如下&#xff1a; CUSTOME…

第四章 单例模式

文章目录 前言一、单例模式的介绍二、单例模式的 8 种实现方式&#xff08;懒汉式要注意线程安全问题&#xff09;1、饿汉式&#xff08;静态常量&#xff09;优缺点&#xff1a;可能会造成内存的浪费&#xff0c;但也只能浪费内存 2、饿汉式&#xff08;静态代码块&#xff09…

( “树” 之 BST) 538. 把二叉搜索树转换为累加树 ——【Leetcode每日一题】

二叉查找树&#xff08;BST&#xff09;&#xff1a;根节点大于等于左子树所有节点&#xff0c;小于等于右子树所有节点。 二叉查找树中序遍历有序。 538. 把二叉搜索树转换为累加树 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加…

( “树” 之 DFS) 337. 打家劫舍 III ——【Leetcode每日一题】

337. 打家劫舍 III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。…