[Maven高级]->近万字文章带你深入了解Maven

news2024/11/25 4:46:27

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:JavaEE
⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁

目录

  • ⭐1、分模块开发与设计
  • ⭐2、聚合
  • ⭐3、继承
  • ⭐4、属性
    • 4.1、自定义属性
    • 4.2、内置属性
    • 4.3、Setting属性
    • 4.4、Java系统属性
    • 4.5、环境变量属性
  • 5、版本管理
  • 6、资源配置
  • 7、多环境开发配置
  • 8、跳过测试
  • 9、⭐私服
    • 9.1、资源获取
    • 9.2、仓库分类
    • 9.3、IDEA中使用
  • 10、私服->Nexus

⭐1、分模块开发与设计

在这里插入图片描述

在Java中使用Maven进行模块化开发和设计是一种常见的做法,它有几个主要的优势和原因:
  1. 代码组织和可维护性: 将项目分割成多个模块可以更好地组织代码,使其更易于维护和理解。每个模块都有自己的职责和功能,可以独立地进行开发、测试和部署。这样的模块化结构可以减少代码的复杂性,提高开发效率。
  2. 重用性和解耦合: 模块化设计可以促使开发者更多地考虑代码的重用性和解耦合。模块之间通过明确定义的接口进行通信,而不是直接依赖于具体的实现。这样可以降低模块之间的依赖关系,使得模块可以独立地进行修改和升级,同时也方便其他项目重用这些模块。
  3. 并行开发和构建: 使用模块化开发可以使不同的开发团队并行工作,每个团队负责不同的模块。这样可以提高开发效率和项目交付速度。此外,模块化开发还使得项目的构建过程更加可控和可靠。
  4. 依赖管理: Maven作为一个强大的依赖管理工具,可以帮助开发者管理项目的依赖关系。通过将项目划分为多个模块,可以更清晰地定义和管理模块之间的依赖关系,确保项目的构建过程能够正确地解决依赖,并且能够方便地升级和切换依赖版本。

总的来说,使用Maven进行模块化开发和设计可以提高代码的组织性、可维护性和可重用性,促进团队的协作和并行开发,并且简化了依赖管理和项目构建过程。这些优势使得Maven在Java开发中被广泛使用。

⭐2、聚合

在Maven中,聚合(aggregation)是一种用于组织和管理多个相关项目的机制。聚合允许您在一个父项目中定义和管理多个子项目,以便同时构建和管理它们。
聚合通过一个称为"父"或"聚合"项目来管理多个相关的子项目。父项目通常不包含实际的代码,而是作为一个容器,用于定义和管理子项目的共享配置和依赖关系。子项目可以是独立的模块,每个模块都有自己的独立代码库和构建配置。

以下是聚合的一些主要优势和用途:

  1. 项目组织和一致性: 聚合允许您将相关的项目组织在一起,并将它们作为一个逻辑单元进行管理。这样可以更容易地维护和管理这些项目,确保它们之间的一致性,例如共享配置、版本控制和依赖管理。
  2. 一键构建: 通过聚合,您可以使用一个简单的命令来同时构建多个子项目,而不需要逐个构建每个项目。这对于大型项目或拥有多个模块的项目非常有用,可以提高构建效率和开发流程的整体速度。
  3. 跨项目依赖管理: 在聚合中,您可以定义和管理子项目之间的依赖关系。这样,您可以轻松地确保子项目之间的依赖正确解决,并且可以方便地升级和切换子项目之间的依赖版本。
  4. 统一版本管理: 聚合允许您在父项目中定义和管理子项目的版本号。这样可以确保所有子项目都使用相同的版本号,从而提高项目的可维护性和版本一致性。
  5. 模块化开发和测试: 聚合允许您将大型项目拆分为多个独立的子项目,每个子项目都可以独立开发、测试和部署。这样可以提高并行开发和测试的效率,并促进团队之间的协作。

要创建一个聚合项目,您需要创建一个包含子项目模块的父项目,并在父项目的pom.xml文件中使用元素列出子项目的模块路径。然后,您可以在父项目的根目录中运行Maven命令来构建或执行其他操作,Maven将会递归地对所有子项目进行相应的操作。

总的来说,聚合是Maven中一种有用的机制,它简化了多项目的管理和构建过程,并提供了更好的组织性、一致性和重用性。
在这里插入图片描述
在这里插入图片描述

⭐3、继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在Maven中,继承(inheritance)是一种机制,允许您定义一个父项目(或称为超级POM)并继承其配置和依赖关系到子项目中。这种继承关系允许子项目共享父项目的通用配置,从而简化项目的管理和维护。
继承的主要优势和用途如下:

  1. 代码重用和一致性: 继承允许您将通用的配置和依赖关系定义在父项目中,子项目可以继承这些配置而无需重复定义。这样可以提高代码重用性,并确保子项目之间的配置保持一致。
  2. 统一的构建配置: 通过继承,您可以定义一组通用的构建配置,例如编译器版本、源代码目录、测试目录等。子项目可以继承这些配置,而无需在每个子项目中重复定义。
  3. 依赖管理和版本控制: 父项目可以定义和管理所有子项目共享的依赖关系。这样可以确保所有子项目使用相同的依赖版本,并简化依赖的管理和升级过程。
  4. 插件配置和执行: 通过继承,您可以在父项目中配置和管理一组通用的构建插件。子项目可以继承这些插件配置,并根据需要进行定制。这样可以确保插件的一致性和统一的构建行为。

要创建一个继承关系,您需要在子项目的pom.xml文件中声明父项目。通常情况下,父项目的pom.xml文件位于父项目的根目录下,而子项目的pom.xml文件位于子项目的根目录下。
在子项目的pom.xml文件中,使用元素指定父项目的坐标(groupId、artifactId和version),如下所示:

<project>
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
  </parent>

  <!-- 子项目的其他配置和依赖 -->
</project>

通过这样的配置,子项目将继承父项目的配置和依赖关系。您可以在子项目中添加、覆盖或继承父项目的配置,根据需要进行定制。
总的来说,Maven的继承机制允许您在父项目中定义通用的配置和依赖关系,并使子项目能够继承和定制这些配置,从而提高项目的管理和维护效率。它促进了代码重用、一致性和依赖管理,并简化了构建和部署过程。

⭐4、属性

属性类别:

  1. 自定义属性
  2. 内置属性
  3. Setting属性
  4. Java系统属性
  5. 环境变量属性

在Maven中,存在不同类型的属性,包括自定义属性、内置属性、Setting属性、Java系统属性和环境变量属性。下面逐个介绍这些属性类别:

  1. 自定义属性: 这些属性是由您在项目的pom.xml文件中定义的。您可以使用元素在pom.xml中声明自定义属性,并在项目中的其他地方引用这些属性。
  2. 内置属性: Maven提供了一些内置的属性,可用于引用有关构建和环境的信息。例如,${project.groupId}表示项目的groupId,${project.version}表示项目的版本号。您可以在pom.xml文件中直接使用这些内置属性。
  3. Setting属性: Setting属性是在Maven的settings.xml文件中定义的。Settings.xml文件是全局配置文件,用于配置Maven的行为和设置。您可以在settings.xml中定义属性,并在项目的pom.xml或其他配置文件中引用这些属性。
  4. Java系统属性: Maven还可以引用Java虚拟机的系统属性作为属性。这些属性可以通过使用-D选项在命令行传递给Maven,也可以在settings.xml文件或其他Maven配置文件中设置。
  5. 环境变量属性: Maven还可以引用操作系统环境变量作为属性。您可以在Maven配置文件中使用${env.变量名}的形式引用环境变量的值。

这些属性类别提供了不同级别和范围的属性定义和引用方式,使得配置更加灵活和可定制。您可以根据需求选择适当的属性类别来定义和使用属性。无论是项目特定的配置还是全局配置,这些属性类别都允许您引用和管理各种类型的属性值,以满足项目的需求。
在Maven中,属性(properties)是一种可以在pom.xml文件中定义的可重用的值。属性允许您在项目的各个地方引用相同的值,从而提高配置的灵活性和可维护性。
属性的一些重要特点和用途如下:

  1. 配置重用和简化: 使用属性可以将重复的值定义为一个属性,并在需要的地方引用。这样可以简化配置,并确保多个地方使用相同的值,从而减少错误和维护成本。
  2. 灵活的配置: 属性可以根据不同的环境或需求进行定制。您可以根据需要在不同的配置文件中定义不同的属性值,从而使项目的配置更加灵活和可适应多种情况。
  3. 版本控制和管理: 属性在定义依赖版本时特别有用。通过定义属性来表示依赖的版本号,可以轻松地在项目的不同模块中使用相同的版本,从而提高版本的一致性和可维护性。
  4. 命令行参数传递: Maven允许您通过命令行参数传递属性值。这样可以在构建时动态地修改属性值,从而适应不同的构建需求。

4.1、自定义属性

在这里插入图片描述

4.2、内置属性

在这里插入图片描述

4.3、Setting属性

在这里插入图片描述

4.4、Java系统属性

在这里插入图片描述

4.5、环境变量属性

在这里插入图片描述

5、版本管理

版本管理在软件开发中是一个关键的概念,它用于跟踪和管理软件的不同版本。在Maven中,版本管理是通过定义和控制项目的版本号来实现的。
版本号通常遵循一种特定的格式,例如主版本号.次版本号.修订号。常见的版本号格式是“MAJOR.MINOR.PATCH”。以下是版本号的一般含义:
  ● 主版本号(MAJOR):当进行重大功能更改或不兼容的API更改时增加。这意味着新版本可能无法与先前版本兼容。
 ● 次版本号(MINOR):当添加新功能或进行向后兼容的修改时增加。这意味着新版本与先前版本兼容。
 ● 修订号(PATCH):当进行错误修复或进行非破坏性的补丁更新时增加。

使用版本管理的好处如下:

  1. 清晰的版本控制: 版本号可以提供对软件发行版本的明确标识,使得开发人员和用户能够轻松地识别和区分不同版本。
  2. 功能追踪和计划管理: 通过版本号的增加,可以清晰地追踪项目的功能增量和进度,并支持制定计划和路线图。
  3. 错误修复和维护: 版本管理允许开发团队在发现错误或漏洞时,为特定版本提供修复和补丁更新,以确保软件的稳定性和安全性。
  4. 依赖管理: 版本管理对于管理项目的依赖关系非常重要。通过明确定义依赖的版本号,可以确保项目使用特定版本的库或框架,并避免因版本冲突而引起的问题。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

6、资源配置

在Maven中,资源配置用于将项目所需的非Java源文件(例如配置文件、模板、图像等)包含在构建过程中,并将其复制到生成的构建目录中。资源配置允许您在项目中管理和使用这些非代码资源。
Maven使用约定优于配置的原则来处理资源文件。按照默认约定,项目的资源文件应该位于src/main/resources目录下。这些资源文件将与项目的Java源代码一起打包到最终的构建输出中。

资源配置的一些重要特点和用途如下:

  1. 资源过滤: Maven允许您在资源文件中使用属性占位符,并在构建过程中根据配置的属性值进行替换。这样可以根据不同的环境或需求,动态地修改资源文件的内容。资源过滤可以在pom.xml或使用专门的资源过滤配置文件(例如filters)进行配置。
  2. 资源目录结构: 默认情况下,资源文件应位于src/main/resources目录中,并按照相应的包结构组织。例如,资源文件com/example/config.properties将位于src/main/resources/com/example目录下。
  3. 资源过滤器: Maven提供了资源过滤器(resource filtering)的机制,可以对资源文件进行动态过滤和处理。资源过滤器可以应用于特定文件类型,例如properties文件或XML文件,并根据配置的属性值进行替换。
  4. 资源插件: Maven提供了一些资源插件,可以进一步处理资源文件。例如,Maven插件可以将资源文件压缩、加密、合并等。通过使用适当的资源插件,您可以根据项目的需求进行资源文件的额外处理。
    在这里插入图片描述
    在这里插入图片描述

7、多环境开发配置

在软件开发中,多环境开发配置是一种常见的实践,它允许在不同的环境中(如开发、测试和生产)使用不同的配置。这样可以确保在不同环境中正确地配置和运行应用程序,以满足各自环境的需求。

在Maven中,可以使用不同的配置文件和属性来实现多环境开发配置。
下面是一种常见的做法:

  1. 创建环境特定的配置文件: 针对每个环境,创建一个特定的配置文件,用于存储该环境的相关配置。例如,可以创建一个名为application-dev.properties的文件用于开发环境配置,application-test.properties用于测试环境配置,application-prod.properties用于生产环境配置等。
  2. 使用不同的配置文件: 在Maven的资源配置中,根据当前环境,使用相应的配置文件。这可以通过在pom.xml中设置不同的资源目录或使用Maven Profiles来实现。
      ○ 方法一:使用不同的资源目录。在Maven项目中,为每个环境创建不同的资源目录(例如src/main/resources/dev,src/main/resources/test,src/main/resources/prod),并将相应的配置文件放置在各自的目录中。然后,在构建过程中,根据不同的环境选择相应的资源目录。
      ○ 方法二:使用Maven Profiles。在pom.xml中定义多个Profile,每个Profile对应一个环境,并在Profile中设置相应的资源配置和属性。通过在构建时选择特定的Profile,可以加载相应的配置文件和属性。
  3. 配置环境相关属性: 在配置文件中,可以定义与该环境相关的属性。这些属性可以在应用程序中使用,以根据当前环境动态调整应用程序的行为。例如,可以在配置文件中设置数据库连接字符串、日志级别、服务URL等环境相关的属性。
  4. 属性过滤和替换: 在配置文件中,可以使用Maven的资源过滤功能,通过属性占位符引用属性,并在构建过程中根据环境相关的属性值进行替换。这样可以根据不同的环境自动调整配置文件的内容。

通过以上步骤,您可以根据不同的环境设置和使用特定的配置文件和属性,从而实现多环境开发配置。这样可以确保应用程序在不同环境中以适当的方式运行,并且可以在切换环境时轻松地进行配置调整。这对于开发、测试和生产环境之间的无缝切换和部署是非常有帮助的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、跳过测试

跳过测试的应用场景可以包括以下几种情况:

  1. 快速构建和开发迭代: 在开发过程中,如果您只对代码的编译和构建结果感兴趣,而不需要运行所有的单元测试,可以跳过测试以加快构建速度。这对于频繁的代码更改和快速迭代非常有用。
  2. 集成和部署流程: 在持续集成和自动化部署流程中,为了加快构建和部署的速度,跳过测试可以是一种常见的做法。在这种情况下,测试通常在集成环境中进行,而不是在构建过程中。
  3. 依赖关系的变化: 当您的项目依赖的外部库或服务发生变化时,有时测试可能会因为环境或依赖关系的变化而失败。在这种情况下,为了快速构建并检查其他方面的兼容性,可以暂时跳过测试。
  4. 资源受限环境: 在一些资源受限的环境中,如内存或处理能力有限的系统,测试执行可能会对性能产生较大影响。为了确保构建和部署的顺利进行,可以选择跳过测试。

需要注意的是,尽管跳过测试可以加快构建速度并在特定场景下提高效率,但测试是确保软件质量和稳定性的关键部分。因此,在生产环境部署之前,应始终确保进行适当的测试,并尽量覆盖各种测试类型(单元测试、集成测试、端到端测试等)以验证应用程序的正确性和可靠性。跳过测试应谨慎使用,并在合适的时机进行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、⭐私服

私服(Repository Manager)是一种用于管理和托管软件包和依赖项的服务器。在软件开发中,私服起到了集中管理、缓存和分发依赖项的作用,提供了更高效、可靠和可控的依赖管理解决方案。

以下是私服的一些主要功能和优势:

  1. 依赖项管理: 私服可以用于集中管理项目所需的依赖项。它允许您将依赖项上传到私服中,并在项目构建过程中从私服中获取依赖项,而不是从公共中央仓库或其他远程仓库下载。这样可以避免对外部仓库的依赖,提高构建速度和稳定性。
  2. 缓存远程仓库: 私服可以缓存远程仓库中的依赖项,减少构建过程中对远程仓库的依赖和网络传输。当项目中的多个开发者或构建服务器使用相同的依赖项时,私服可以从缓存中快速提供这些依赖项,节省构建时间和带宽。
  3. 本地部署和定制: 私服允许您在本地环境中部署并定制软件包。您可以将自己开发的库、框架或第三方依赖项上传到私服,使其在团队或组织内部共享和使用。私服还提供了配置和管理选项,使您能够根据特定需求进行定制,例如设置访问权限、限制下载速度等。
  4. 镜像和分发管理: 私服可以作为中央仓库的镜像,提供更快的下载速度和更可靠的访问。您可以配置私服以同步和缓存中央仓库的内容,并为团队内部提供更好的性能和稳定性。私服还可以用于分发内部构建的软件包和工件,使其可供其他团队或项目使用。
  5. 企业级支持和安全性: 私服通常提供了企业级支持和安全性功能。它们支持用户认证、访问控制、审计日志和安全连接等功能,以确保私有的软件包和依赖项受到保护,并符合组织的安全和合规要求。

一些流行的私服管理工具包括Apache Archiva、Sonatype Nexus和JFrog Artifactory等。这些工具提供了友好的用户界面和丰富的功能,使您能够轻松地设置和管理私服。

总而言之,私服是一个用于管理和托管软件包和依赖项的服务器,它提供了依赖项管理、缓存远程仓库、本地部署和定制、镜像和分发管理以及企业级支持和安全性等功能。私服的使用可以提高构建效率、减少对外部仓库的依赖,并为团队或组织提供更好的依赖管理和软件分发解决方案。
在这里插入图片描述

9.1、资源获取

在这里插入图片描述

9.2、仓库分类

  1. 宿主仓库(Hosted Repository): 宿主仓库是私服中用于保存自主研发或第三方非开源项目的仓库。这些项目的资源无法从中央仓库或其他公共仓库获取,因此需要在私服的宿主仓库中进行保存和管理。宿主仓库是存储具体项目的实际资源的地方。
  2. 代理仓库(Proxy Repository): 代理仓库用于代理远程仓库,例如中央仓库或其他公共仓库。通过配置代理仓库,私服可以缓存远程仓库中的资源,并为团队提供更快的访问速度和可靠性。当项目需要依赖某个远程资源时,私服会首先检查代理仓库中是否已经存在该资源,如果存在则直接提供下载,如果不存在则从远程仓库下载并缓存到代理仓库。
  3. 仓库组(Repository Group): 仓库组是将多个仓库组合在一起形成一个逻辑单元的方式。通过配置仓库组,可以将多个宿主仓库、代理仓库或其他仓库类型组合在一起,形成一个统一的访问点。团队可以通过仓库组来简化配置,只需关注仓库组的地址,而不需要直接指定底层的仓库地址。仓库组本身不保存资源,它只是一个逻辑集合。
    在这里插入图片描述

总结来说,私服中常见的仓库分类包括宿主仓库、代理仓库和仓库组。宿主仓库用于保存自主研发或第三方非开源项目的资源,代理仓库用于代理远程仓库,而仓库组则是将多个仓库组合在一起以简化配置和提供统一访问点。

9.3、IDEA中使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、私服->Nexus

Nexus是一个流行的私服管理工具,用于管理和托管软件包和依赖项。它由Sonatype开发,是一个功能强大、易于使用的仓库管理器,被广泛用于软件开发和构建过程中。
下载地址:https://help.sonatype.com/repomanager3/product-information/download

以下是Nexus的一些主要特点和功能:

  1. 仓库管理: Nexus支持多种类型的仓库,包括Maven、npm、Docker和Raw(原始)仓库。它提供了仓库的创建、配置和管理功能,允许您集中管理和组织软件包、组件和工件。
  2. 依赖项管理: Nexus可以作为Maven项目的中央仓库,用于存储和分发项目的依赖项。它可以缓存远程仓库中的依赖项,减少构建过程中对远程仓库的依赖和网络传输。Nexus还支持依赖项的搜索、浏览和版本管理。
  3. 企业级功能: Nexus提供了许多企业级功能,如用户认证、访问控制、角色管理和审计日志等。它可以与现有的企业身份验证和授权系统集成,以确保私有的软件包和依赖项受到保护,并满足组织的安全和合规要求。
  4. 代理和镜像: Nexus支持代理和镜像功能,可以将外部仓库的内容缓存到本地,并提供更快的下载速度和更可靠的访问。您可以配置Nexus以同步和缓存中央仓库的内容,并为团队内部提供更好的性能和稳定性。
  5. 构建和部署支持: Nexus提供了构建和部署的支持,可以用于存储和分发构建产物、工件和发布版本。它支持发布流程的自动化,并可以与持续集成和持续部署工具集成,以实现无缝的构建和部署过程。
  6. 用户界面和管理工具: Nexus提供了易于使用和直观的Web用户界面,用于管理和配置仓库、权限和设置。它还提供了REST API和CLI(命令行界面)工具,以便于自动化和批量操作。

Nexus有两个主要版本:Nexus Repository OSS(开源版)和Nexus Repository Pro(专业版)。开源版是免费提供的,并提供了许多核心功能。专业版则提供了更多高级功能、技术支持和企业级特性。

总而言之,Nexus是一个功能强大的私服管理工具,可用于管理和托管软件包和依赖项。它提供了仓库管理、依赖项管理、企业级功能、代理和镜像、构建和部署支持等一系列功能,为团队和组织提供了高效的依赖管理和软件分发解决方案。
在这里插入图片描述

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

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

相关文章

已经安装高版本CUDA的条件下bitsandbytes发现低版本的CUDA SETUP: Detected CUDA version 100解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Zabbix 配置钉钉报警

如有错误&#xff0c;敬请谅解&#xff01; 此文章仅为本人学习笔记&#xff0c;仅供参考&#xff0c;如有冒犯&#xff0c;请联系作者删除&#xff01;&#xff01; 1. 创建服务群【手机钉钉】|【电脑钉钉】- 右上角【】-【发起群聊】-【选人建群】/选择不同的群类型创建&…

数据库信息速递 甲骨文与微软合作,在Azure上推出数据库服务

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Linux搭建配置jdk开发环境

因为ZooKeeper、Hadoop和Spark等大数据应用的运行需要Java环境的支持&#xff0c;所以需要我们来安装配置一下jdk环境。 安装步骤如下&#xff1a; 下载JDK 访问Oracle官网下载Linux x64操作系统的JDK安装包jdk-8u161-linux-x64.tar.gz。 上传JDK安装包 通过SecureCRT远程连接…

chatgpt赋能python:Python的数据存储:理解Python的内存管理机制

Python的数据存储&#xff1a;理解Python的内存管理机制 Python是一种高级编程语言&#xff0c;广泛用于开发Web应用程序、机器学习和数据科学等。作为一门动态语言&#xff0c;Python的内存管理机制是其优点之一。这篇文章将探讨Python如何内部存储数据&#xff0c;介绍Pytho…

pytorch ddp 范例

pytorch ddp 范例&#xff1a; ################ ## main.py文件 import argparse from tqdm import tqdm import torch import torchvision import torch.nn as nn import torch.nn.functional as F # 新增&#xff1a; import torch.distributed as dist from torch.nn.paral…

从零开始手搓一个STM32与机智云的小项目——GPIO的输入输出

文章目录 前言GPIO简介GPIO的命名与数量GPIO的功能STM32F1 GPIO的寄存器 库函数开发搭建库函数的工程查看原理图WACK_UP输入按键继电器输出138控制流水灯 代码编写库函数简介GPIO输出模式控制继电器通过138控制ledGPIO实现按键输入的操作编写逻辑代码 实物效果 总结 前言 上一…

Redis学习总结(二)

AOF 为什么是在执行完命令之后记录日志&#xff1f; 关系型数据库&#xff08;如 MySQL&#xff09;通常都是执行命令之前记录日志&#xff08;方便故障恢复&#xff09;&#xff0c;而 Redis AOF 持久化机制是在执行完命令之后再记录日志。AOF 记录日志过程为什么是在执行完命…

如何让GPT不再胡说八道

相信我们大部分人在使用GPT的时候&#xff0c;会发现GPT经常在胡言乱语、回复错误的答案等情况&#xff0c;甚至有的内容牛头不对马嘴&#xff0c;直接开始编造&#xff0c;例如下面案例&#xff1a; 我&#xff1a; 周树人是谁 GPT&#xff1a;周树人 (1897年-1975年) &…

独立开发变现周刊(第90期):自学开发了一个36万美元/年的ChatGPT应用

分享独立开发、产品变现相关内容&#xff0c;每周五发布。 目录 1、ChatGPT-Midjourney: 开源 ChatGPTMidjourney 网页应用2、PLExtension: 一个图床上传浏览器扩展3、EasySpider: 一个可视化爬虫软件4、BibiGPT: 音视频 AI 一键总结 & 对话5、自学的程序员开发了一个36万美…

【i阿极送书——第四期】《ChatGPT时代:ChatGPT全能应用一本通》

系列文章目录 作者&#xff1a;i阿极 作者简介&#xff1a;数据分析领域优质创作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1;评论&#x1f4d2;…

MongoDB集群和安全

目录 副本集-Replica Sets简介副本集的三个角色副本集架构目标副本集的创建主节点副本节点仲裁节点初始化配置副本集和主节点查看副本集的配置内容查看副本集状态添加副本从节点添加仲裁从节点副本集的数据读写操作 主节点的选举原则完整的连接字符串 分片集群-Sharded Cluster…

spring杂记

1、springboot是如何解析yml配置文件中的 tomcat配置&#xff0c;并将其赋值给 tomcat的 重要类 ServerProperties。该类为解析yml文件中的server配置 下面我们主要看看是怎样将 端口号 port 赋值给tomcat的 找到port属性&#xff0c;点击getter方法 发现调用该方法的地方为 …

在弹出框内三个元素做水平显示

最终效果图要求是这样&#xff1a; js代码&#xff1a; // 显示弹出窗口 function showPopup(node) {var popup document.createElement(div);popup.className popup;var inputContainer1 document.createElement(div);/* inputContainer1.className input-container1; */…

Upscayl:开源AI图像放大增强工具 | AIGC实践

连续写了两篇比较理论的文章——一篇行业思考&#xff0c;一篇技术讨论——可能劝退了很多不明真相的人民群众&#xff0c;一看后台数据&#xff0c;好么…… 马上周末了&#xff0c;今天分享一篇轻松小文&#xff0c;介绍一款开源免费、成熟度高、操作简单、效果显著的开源AI图…

记录--开始使用Vue 3时应避免的10个错误

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 Vue 3 稳定已经有一段时间了。许多代码库正在生产中使用它&#xff0c;其他人最终也必须进行迁移。我有机会与它一起工作&#xff0c;并记录了我的错误&#xff0c;这可能是你想避免的。 1.使用响应式…

.Net8罕见的技术:MSIL的机器码简析

前言 一般的只有最终的汇编代码才有机器码表示&#xff0c;然一个偶然的机会发现&#xff0c;MSIL(Microsoft intermediate language)作为一个中间语言表示&#xff0c;居然也有机器码&#xff0c;其实这也难怪&#xff0c;计算机里面万物都是二进制&#xff0c;本篇来看下,以下…

【GitHub探索】用python写web前端之reactpy探索

你有想象过用python来写web前端这种操作么&#xff1f;近期在github-trending上就有这样的一个项目reactpy&#xff0c;可以满足你在python上写web前端的欲望。为此&#xff0c;笔者也决定踩踩坑&#xff0c;看看这个项目的形式到底如何&#xff0c;能不能很方便地实际投产。 …

对比 document.URL 和 location.href

对比 document.URL 和 location.href document.URL 和 location.href 的不同点 document.URL只读 , location.href读写 给 document.URL 赋值, document.URL的值不会改变 给 location.href 赋值, location.href 的值改变了, 并且页面也改变了, 效果和 location.assign()一样…

解数独--难的一批

1题目 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数…