Maven 的生命周期详解
Maven 是目前最流行的项目管理和构建工具之一,广泛应用于 Java 开发项目中。它通过一系列约定和配置,极大地简化了项目的构建、依赖管理和生命周期管理。其中,Maven 的生命周期是其核心概念之一,贯穿了项目从构建、测试、打包到部署的整个过程。理解和掌握 Maven 的生命周期,不仅能够提高构建效率,还能帮助开发者更好地控制项目的各个阶段。
本文将全面解析 Maven 的生命周期,详细介绍每个生命周期阶段及其执行规则。通过本文的学习,读者将能够深入理解 Maven 的生命周期机制,从而更好地应用于实际项目中。
文章目录
- 1、Maven 生命周期
- 1.1、Maven 生命周期介绍
- 1.2、Maven 的三套生命周期
- 1.3、Maven 生命周期执行规则
- 2、Maven 的三套生命周期之 clean
- 2.1、clean 生命周期阶段 pre-clean
- 2.2、clean 生命周期阶段 clean*
- 2.3、clean 生命周期阶段 post-clean
- 3、Maven 的三套生命周期之 default
- 3.1、default 生命周期阶段 validate
- 3.2、default 生命周期阶段 initialize
- 3.3、default 生命周期阶段 generate-sources
- 3.4、default 生命周期阶段 process-sources
- 3.5、default 生命周期阶段 generate-resources
- 3.6、default 生命周期阶段 process-resources*
- 3.7、default 生命周期阶段 compile*
- 3.8、default 生命周期阶段 process-classes
- 3.9、default 生命周期阶段 generate-test-sources
- 3.10、default 生命周期阶段 process-test-sources
- 3.11、default 生命周期阶段 generate-test-resources
- 3.12、default 生命周期阶段 process-test-resources
- 3.13、default 生命周期阶段 test-compile*
- 3.14、default 生命周期阶段 process-test-classes
- 3.15、default 生命周期阶段 test*
- 3.16、default 生命周期阶段 prepare-package
- 3.17、default 生命周期阶段 package*
- 3.18、default 生命周期阶段 pre-integration-test
- 3.19、default 生命周期阶段 integration-test
- 3.20、default 生命周期阶段 post-integration-test
- 3.21、default 生命周期阶段 verify*
- 3.22、default 生命周期阶段 install*
- 3.23、default 生命周期阶段 deploy*
- 4、Maven 的三套生命周期之 site
- 4.1、site 生命周期阶段 pre-site
- 4.2、site 生命周期阶段 site
- 4.3、site 生命周期阶段 post-site
- 4.4、site 生命周期阶段 site-deploy
1、Maven 生命周期
1.1、Maven 生命周期介绍
在 Maven 出现之前,项目构建的生命周期已经存在,开发人员每天都在进行项目的清理、编译、测试和部署。然而,由于缺乏统一的规范,不同公司甚至不同项目之间的构建方式各不相同。
Maven 从大量项目和构建工具中汲取经验和反思,总结出了一套高度完美且易于扩展的生命周期。这一生命周期将项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有构建过程进行了抽象和统一。
需要注意的是,Maven 生命周期本身是抽象的,不能完成任何实际工作。这些实际工作(如源代码编译)是通过调用 Maven 插件中的插件目标(plugin goal)来完成的。我们可以将 Maven 生命周期理解成一个抽象父类,将插件理解成其子类,而插件目标则是子类中重写的方法。
通过这种方式,Maven 实现了构建过程的标准化和模块化,使得开发人员可以更轻松地管理和维护项目,提高了构建过程的可重复性和一致性。
1.2、Maven 的三套生命周期
Maven 的生命周期并非只有一套,而是有三套,并且这三套生命周期之间是相互独立的。每套生命周期包含许多不同的阶段,这些阶段是有顺序的,某些阶段必须在前一个阶段完成后才能进行。Maven 的三套生命周期分别为:clean(清理)、default(默认)和 site(站点)。
Clean 生命周期主要用于项目的清理工作。它包含以下几个阶段:
- pre-clean:执行清理之前的工作。
- clean:执行实际的清理工作,通常是删除项目的构建输出目录。
- post-clean:执行清理之后的工作。
例如,当用户调用 mvn clean
命令时,clean 生命周期的所有阶段都会依次执行,当前项目的 target
目录会被清空。
Default 生命周期是 Maven 最核心的生命周期,包含了项目构建的完整流程。它包括以下主要阶段:
- validate:验证项目是否正确且所有必要信息是否可用。
- compile:编译项目的源代码。
- test:使用适当的单元测试框架测试已编译的代码。
- package:将编译后的代码打包成可分发的格式(如 JAR 文件)。
- verify:运行任何检查以验证包是否有效且符合质量标准。
- install:将包安装到本地仓库,以供本地其他项目使用。
- deploy:将最终的包复制到远程仓库,以共享给其他开发人员和项目。
Site 生命周期用于生成项目的站点文档。它包含以下几个阶段:
- pre-site:执行生成站点文档之前的工作。
- site:生成项目的站点文档。
- post-site:执行生成站点文档之后的工作。
- site-deploy:将生成的站点文档发布到特定的服务器上。
1.3、Maven 生命周期执行规则
每套生命周期包含一系列的构建阶段(phase),这些阶段是有顺序的,且后面的阶段依赖于前面的阶段。用户与 Maven 最直接的交互方式就是调用这些生命周期阶段。
以 clean 生命周期为例,它包含 pre-clean、clean 以及 post-clean 三个阶段。当用户调用 pre-clean 阶段时,则只有 pre-clean 阶段执行;当用户调用 clean 阶段时,pre-clean 和 clean 阶段都会执行;而当用户调用 post-clean 阶段时,pre-clean、clean 以及 post-clean 三个阶段都会依次执行。
需要强调的是,这三套生命周期(clean、default、site)本身是相互独立的。用户可以只调用 clean 生命周期的某个阶段,也可以只调用 default 生命周期的某个阶段,而不会对其他生命周期造成任何影响。当然,用户也可以同时调用两套生命周期的某个阶段。
通过将阶段名传递给 mvn 命令,就可以调用构建阶段。例如:
mvn clean
这个命令调用的是 clean 生命周期的 clean 阶段,会清空当前项目的 target 目录。
这种设计使得 Maven 的构建过程既灵活又有序,用户可以根据需要精细地控制构建过程中的各个阶段,确保项目的构建流程高效且符合预期。
2、Maven 的三套生命周期之 clean
clean
生命周期专门用于清理项目构建过程中生成的临时文件和目录。这个生命周期包含三个阶段:pre-clean
、clean
和 post-clean
。
2.1、clean 生命周期阶段 pre-clean
pre-clean
是 clean
生命周期的第一个阶段。在此阶段,Maven 会执行任何绑定到 pre-clean
阶段的插件目标(goal)。这通常用于在清理项目构建之前执行一些清理前的准备工作,例如关闭数据库连接、停止服务器等。
PS:在 Maven 的默认行为中,pre-clean
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为。
2.2、clean 生命周期阶段 clean*
clean
是 clean
生命周期的核心阶段。在此阶段,Maven 会清理项目的构建输出,例如 target/
目录(默认情况下)。这是通过执行 maven-clean-plugin
(Maven 官方插件)的 clean
目标来实现的。
2.3、clean 生命周期阶段 post-clean
post-clean
是 clean
生命周期的最后一个阶段。在此阶段,Maven 会执行任何绑定到 post-clean
阶段的插件目标。这通常用于在清理项目构建之后执行一些清理后的工作,例如删除临时文件、日志等。
PS:在 Maven 的默认行为中,post-clean
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为。
3、Maven 的三套生命周期之 default
default
生命周期是 Maven 的核心生命周期,主要用于处理项目的构建和发布。这个生命周期包含一系列阶段,涵盖了项目从初始化到部署的整个过程。
3.1、default 生命周期阶段 validate
validate
阶段是 default
生命周期中的第一个阶段。在此阶段,Maven 会验证项目是否正确,以及所有必要的信息是否可用。这通常包括检查 POM 文件(pom.xml
)中的信息是否完整和有效,例如,确认依赖项、插件和属性都已正确声明。
PS:在 Maven 的默认行为中,validate
阶段没有绑定任何插件目标,用户可以使用 maven-enforcer-plugin
(Maven 官方插件)插件的 enforce
目标来自定义行为。
PS:在 Maven 的生命周期中,validate
阶段虽然没有绑定具体的插件目标,但 Maven 也会在此阶段检查 POM 文件的基本结构和配置的正确性。这些检查是由 Maven 核心机制自动执行的。
3.2、default 生命周期阶段 initialize
initialize
阶段是 default
生命周期中紧随 validate
阶段之后的阶段。这个阶段通常用于在构建开始之前设置或初始化一些值,例如,从配置文件或环境变量中读取值,并设置到 Maven 的属性中。
PS:在 Maven 的默认行为中,initialize
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为。
3.3、default 生命周期阶段 generate-sources
generate-sources
阶段用于生成所有需要包含在编译过程中的源代码文件。这些生成的源代码文件随后会被 Maven 编译器(如 maven-compiler-plugin
)编译。
这个阶段通常用于自动生成源代码,比如使用代码生成工具(如 JAXB、Annotation Processors 等)从配置文件、数据库模式或其他元数据生成 Java 类。
PS:在 Maven 的默认行为中,generate-sources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 build-helper-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 add-source
目标来自定义行为。
3.4、default 生命周期阶段 process-sources
process-sources
阶段用于处理项目主源代码。这通常包括对源代码文件进行过滤(如替换占位符),但它也可以执行其他类型的源代码处理任务。
在 Maven 中,这个阶段默认不会执行任何操作,除非有插件被绑定到这个阶段。
PS:在 Maven 的默认行为中,process-sources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 formatter-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 format
目标来自定义行为。
3.5、default 生命周期阶段 generate-resources
generate-resources
阶段用于生成项目主资源文件。这些资源文件(如配置文件、国际化文件等)将被包含在最终的打包文件中。
与 generate-sources
阶段类似,这个阶段通常用于自动生成资源文件。例如,你可以使用模板引擎(如 FreeMarker、Velocity 等)从模板生成配置文件。
PS:在 Maven 的默认行为中,generate-resources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 build-helper-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 add-source
目标来自定义行为。
3.6、default 生命周期阶段 process-resources*
process-resources
阶段用于复制并处理项目主资源文件到目标目录,准备打包。这通常包括对资源文件进行过滤(如替换占位符),以及将资源文件复制到正确的目录中。
Maven 使用 maven-resources-plugin
(Maven 官方插件)的 resources
目标来处理资源文件,该插件默认绑定到 process-resources
阶段。在构建过程中,Maven 会查找 src/main/resources
目录下的所有资源文件,并将它们复制到 target/classes
目录中(对于主资源)或 target/test-classes
目录中(对于测试资源)。同时,Maven 还会根据配置对资源文件进行过滤处理。
3.7、default 生命周期阶段 compile*
compile
阶段是 Maven 生命周期中的一个核心阶段,用于编译项目的主源代码。这个阶段通常使用 Java 编译器(如 javac
)将 Java 源代码文件(.java
)编译成字节码文件(.class
)。
Maven 使用 maven-compiler-plugin
(Maven 官方插件)的 compile
目标来执行编译任务,该插件默认绑定到 compile
阶段。你可以在 pom.xml
文件中配置 maven-compiler-plugin
的属性,以指定 Java 编译器选项(如源代码和目标字节码的版本、是否启用调试信息等)。
当 Maven 执行到 compile
阶段时,它会检查项目的主源代码目录(默认为 src/main/java
),并编译其中的所有 Java 文件。编译后的字节码文件将被放置在项目的构建输出目录(默认为 target/classes
)中。
3.8、default 生命周期阶段 process-classes
process-classes
阶段是 Maven 生命周期中 compile
阶段之后的一个阶段,用于处理编译后的字节码文件(.class
),如执行字节码分析、优化或转换等任务。
PS:在 Maven 的默认行为中,process-classes
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-shade-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 shade
目标来自定义行为。
3.9、default 生命周期阶段 generate-test-sources
generate-test-sources
阶段用于生成所有需要包含在测试编译过程中的测试源代码文件。这些生成的测试源代码文件随后会被 Maven 编译器(如 maven-compiler-plugin
)编译,用于执行测试。
这个阶段通常用于自动生成测试源代码,比如使用代码生成工具从数据库模式或其他元数据生成测试数据或测试类。
PS:在 Maven 的默认行为中,generate-test-sources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 build-helper-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 add-test-source
目标来自定义行为。
3.10、default 生命周期阶段 process-test-sources
process-test-sources
阶段用于处理项目测试源代码。这通常包括对测试源代码文件进行过滤(如替换占位符),但它也可以执行其他类型的测试源代码处理任务。
PS:在 Maven 的默认行为中,process-test-sources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 formatter-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 format
目标来自定义行为。
3.11、default 生命周期阶段 generate-test-resources
generate-test-resources
阶段用于生成项目测试资源文件。这些测试资源文件(如测试配置文件、测试数据等)将被包含在测试构建过程中。
与 generate-test-sources
阶段类似,这个阶段通常用于自动生成测试资源文件。例如,你可以使用模板引擎从模板生成测试配置文件。
PS:在 Maven 的默认行为中,generate-test-resources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 build-helper-maven-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 add-test-source
目标来自定义行为
3.12、default 生命周期阶段 process-test-resources
process-test-resources
阶段用于复制并处理项目测试资源文件到目标目录,准备测试构建。这通常包括对测试资源文件进行过滤(如替换占位符),以及将测试资源文件复制到正确的目录中。
Maven 使用 maven-resources-plugin
来处理测试资源文件,该插件默认绑定到 process-test-resources
阶段。在构建过程中,Maven 会查找 src/test/resources
目录下的所有测试资源文件,并将它们复制到 target/test-classes
目录中。同时,Maven 还会根据配置对测试资源文件进行过滤处理。
PS:在 Maven 的默认行为中,process-test-resources
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-resources-plugin
(Maven 官方插件)插件的 testResources
目标来自定义行为
3.13、default 生命周期阶段 test-compile*
test-compile
阶段是 Maven 生命周期中的一个阶段,用于编译项目的测试源代码。在这个阶段,Maven 会查找 src/test/java
目录下的所有测试源代码文件(通常是 .java
文件),并使用 Java 编译器(由 maven-compiler-plugin
(Maven 官方插件)插件 testCompile
目标提供)将它们编译成字节码文件(.class
)。这些编译后的测试类文件会被放置在项目的构建输出目录(默认为 target/test-classes
)中,以便在后续阶段中执行测试。
3.14、default 生命周期阶段 process-test-classes
process-test-classes
阶段是 Maven 生命周期中 test-compile
阶段之后的一个阶段,用于处理编译后的测试类文件。然而,与 process-classes
阶段类似,Maven 的默认实现并不在 process-test-classes
阶段执行任何特定的操作。这个阶段主要是为了允许用户通过绑定插件来执行自定义的构建任务,以处理编译后的测试类文件。
PS:在 Maven 的默认行为中,process-test-classes
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-shade-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 shade
目标来自定义行为
3.15、default 生命周期阶段 test*
test
阶段是 Maven 生命周期中用于执行测试的一个关键阶段。在这个阶段,Maven 会使用 maven-surefire-plugin
插件的 test
目标(或其他测试插件)来运行 target/test-classes
目录下编译后的测试类。这些测试类通常包含了一系列用于验证项目功能的测试用例。
测试的执行结果会被收集并报告给 Maven,以便你可以了解哪些测试成功执行,哪些测试失败。如果所有测试都成功执行,则 Maven 会继续执行后续的构建阶段;如果有测试失败,则 Maven 会停止构建过程,并输出相应的错误信息。
3.16、default 生命周期阶段 prepare-package
prepare-package
阶段是用于准备打包步骤,例如生成附加的文件或执行其他准备工作。
PS:prepare-package
阶段并不是 Maven 官方默认生命周期的一个标准阶段。
PS:在 Maven 的默认行为中,prepare-package
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为
3.17、default 生命周期阶段 package*
package
阶段是 Maven 生命周期中的一个核心阶段,用于将编译后的代码、资源、配置文件等打包成可发布的格式,如 JAR、WAR 或 EAR 文件。这个阶段的目标是将编译和测试通过的代码打包成可交付的构建产物。
Maven 使用特定的打包插件来执行 package
阶段的任务,例如 maven-jar-plugin
(Maven 官方插件)的 jar
目标 用于打包 JAR 文件,maven-war-plugin
(Maven 官方插件)的 war
目标用于打包 WAR 文件等。这些插件会根据项目的 pom.xml
文件中的配置来生成相应的构建产物。
在 package
阶段之前,Maven 会确保所有必要的构建阶段都已成功执行,包括 compile
、test-compile
、test
等。只有在这些阶段都成功完成后,Maven 才会进入 package
阶段,并开始打包项目。
一旦 package
阶段成功完成,Maven 会将构建产物放置在项目的 target
目录下,并准备进行后续的部署或分发操作。
3.18、default 生命周期阶段 pre-integration-test
pre-integration-test
阶段是集成测试之前的一个阶段,主要用于执行在集成测试开始之前需要完成的准备工作。这个阶段可能包括设置测试环境、准备测试数据等任务。
PS:在 Maven 的默认行为中,pre-integration-test
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为
3.19、default 生命周期阶段 integration-test
integration-test
阶段是 Maven 生命周期中用于执行集成测试的阶段。集成测试通常用于验证项目中的不同组件是否能够协同工作,以及项目与外部系统(如数据库、消息队列等)的集成是否正确。
在这个阶段,Maven 会运行项目中定义的集成测试用例,以验证系统的整体功能。集成测试用例通常比单元测试更为复杂,因为它们需要模拟或访问外部系统。
PS:在 Maven 的默认行为中,integration-test
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-failsafe-plugin
(Maven 官方插件)插件的 integration-test
目标来自定义行为
3.20、default 生命周期阶段 post-integration-test
post-integration-test
阶段是集成测试之后的一个阶段,主要用于执行在集成测试完成后需要完成的一些清理工作。这可能包括清除测试环境、恢复系统状态等任务
PS:在 Maven 的默认行为中,post-integration-test
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为
3.21、default 生命周期阶段 verify*
verify
阶段是在所有集成测试通过后执行的,用于对项目进行额外的检查以确保质量。这个阶段可以执行一些自定义的验证逻辑,比如检查代码覆盖率、检查生成的文档是否完整等。
如果 verify
阶段成功完成,那么表示项目的质量已经通过了验证,可以继续进行后续的部署和发布操作。
PS:在 Maven 的默认行为中,verify
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-verifier-plugin
(非官方插件,由 Codehaus Mojo 提供)插件的 verify
目标来自定义行为
3.22、default 生命周期阶段 install*
install
阶段将项目的构建结果安装到本地 Maven 仓库中,以供其他项目使用。这意味着,一旦某个项目完成了install
阶段,它的构建产物(如JAR、WAR文件等)就会被复制到本地 Maven 仓库的相应目录中。其他 Maven 项目可以通过依赖配置,直接从本地 Maven 仓库中获取并使用这些构建产物,从而避免了重复构建相同的依赖项。
install
阶段通常是在本地开发环境中执行的,用于将项目构建产物安装到本地仓库,以便在本地进行其他项目的依赖引用和测试。
在这个阶段中使用将 maven-install-plugin
(Maven 官方插件)的 install
目标来实现目标。
3.23、default 生命周期阶段 deploy*
deploy
阶段将项目的构建结果复制到远程仓库,以供其他开发人员或团队使用。这是项目发布到外部世界的最后一步。
在 deploy
阶段,Maven 会将项目的构建产物(如 JAR、WAR 文件等)上传到指定的远程 Maven 仓库中。这样,其他开发人员或团队就可以通过远程 Maven 仓库来获取和使用这些构建产物。
deploy
阶段通常是在持续集成/持续部署(CI/CD)环境中执行的,用于将项目构建产物发布到公共或私有的远程 Maven 仓库中,以便其他人员或团队可以访问和使用。
在这个阶段中使用将 maven-deploy-plugin
(Maven 官方插件)的 deploy
目标来实现目标。
4、Maven 的三套生命周期之 site
site
生命周期用于生成和部署项目的站点文档,使得项目文档的生成和发布变得简便高效。这个生命周期包含四个阶段:pre-site
、site
、post-site
和 site-deploy
。
4.1、site 生命周期阶段 pre-site
pre-site
阶段是site
生命周期的开始阶段,它在生成站点文档之前执行。这个阶段通常用于执行任何必要的预处理步骤,例如准备环境或检查某些条件。
PS:在 Maven 的默认行为中,pre-site
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为。
4.2、site 生命周期阶段 site
site
阶段是 site
生命周期的核心部分。在此阶段,Maven 使用maven-site-plugin
(Maven 官方插件)插件的 site
目标(或其他类似的插件)来生成项目的站点文档。这些文档可能包括项目信息、报告、API 文档等。
4.3、site 生命周期阶段 post-site
post-site
阶段在site
阶段之后执行,用于执行任何必要的后处理步骤。在此阶段可以执行自定义任务,例如复制文件、修改生成的站点内容等。
PS:在 Maven 的默认行为中,post-site
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-antrun-plugin
(Maven 官方插件)插件的 run
目标来自定义行为。
4.4、site 生命周期阶段 site-deploy
site-deploy
阶段是site
生命周期的最后阶段。在此阶段,Maven将生成的站点文档部署到某个位置,以便其他人可以访问。这通常是通过将站点内容发布到Web服务器或文件共享服务来实现的。
PS:在 Maven 的默认行为中,post-site
阶段没有绑定任何插件目标,因此并不执行任何操作,用户可以使用 maven-site-plugin
(Maven 官方插件)插件的 deploy
目标来自定义行为。
相关文章:
Maven 的生命周期详解
Maven 是目前最流行的项目管理和构建工具之一,广泛应用于 Java 开发项目中。它通过一系列约定和配置,极大地简化了项目的构建、依赖管理和生命周期管理。其中,Maven 的生命周期是其核心概念之一,贯穿了项目从构建、测试、打包到部…...

【稳定检索/投稿优惠】2024年生物技术与食品科学国际会议(ICBFS 2024)
2024 International Conference on Biotechnology and Food Science 2024年生物技术与食品科学国际会议 【会议信息】 会议简称:ICBFS 2024 大会时间:点击查看 截稿时间:点击查看 大会地点:中国厦门 会议官网:www.icb…...
iOS Category
原理: 【iOS】——分类、扩展和关联对象_ios 为什么分类不能加成员变量-CSDN博客 面试题: 1.Category和Extension区别? 在 Objective-C 中,Category 和 Extension 是两种用于向现有类添加新功能的机制,但它们各有特…...

5.Sentinel入门与使用
5.Sentinel入门与使用 1.什么是 Sentinel?Sentinel 主要有以下几个功能: 2.为什么需要 Sentinel?3.Sentinel 基本概念3.1 什么是流量控制?3.1.1 常见流量控制算法3.1.2 Sentinel 流量控制流控效果介绍如下: 3.2 什么是熔断?熔断策略 3.3 Sentinel 组成(资源和规…...

上位机图像处理和嵌入式模块部署(h750 mcu和图像处理)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们说过,h750和之前的103、407相比较,本身cpu频率比较高,flash大小一般,但是ram比较大&#x…...

信创服务器操作系统的适配迁移分析
浅谈信创服务器操作系统的适配迁移 01 服务器操作系统迁移适配流程复杂 随着CentOS停服临近和红帽RHEL源码权限受限,服务器操作系统安全漏洞风险加剧。国内众多企业面临CentOS、REHL等系统升级替换的挑战。同时,出于安全、功能升级和合规需求࿰…...
在Ubuntu 20.04上安装和配置MySQL 8:详细指南和远程访问设置
目录 一、MySQL 8的特点和优势 二、在Ubuntu 20.04上安装MySQL 8 三、初始化MySQL 四、配置MySQL远程访问 五、 创建远程访问用户 六. 配置防火墙 七、 测试远程访问 总结 MySQL是一种开源的关系型数据库管理系统,被广泛应用于各种应用程序和网站中。MySQL …...

Vue43-单文件组件
一、脚手架的作用 单文件组件:xxx.vue,浏览器不能直接运行!!! 脚手架去调用webpack等第三方工具。 二、vue文件的命名规则 建议用下面的两种方式。(首字母大写!!!&#x…...

如何快速使用向量检索服务DashVector?
免费体验阿里云高性能向量检索服务:https://www.aliyun.com/product/ai/dashvector 本文将介绍如何快速上手使用向量检索服务DashVector。 前提条件 已创建Cluster:创建Cluster。 已获得API-KEY:API-KEY管理。 已安装最新版SDK:…...
Linux 用户和用户组 创建用户 创建组
介绍 一个组有多个用户,可以给组分配权限,那么该组的使用用户都有该组的权限,就不用一个个分配,而且很好管理。 创建用户组 groupadd 组名删除用户组 groupdel test查看用户所属组 id [用户名]修改用户组 把abc用户添加到m…...

Character Animator 2024 mac/win版:赋予角色生命,动画更传神
Character Animator 2024是一款强大的角色动画制作软件,以其创新的功能和卓越的性能,为动画师、游戏开发者以及设计师们带来了全新的创作体验。 Character Animator 2024 mac/win版获取 这款软件采用了先进的骨骼绑定技术,使得角色动画的制作…...
短剧app广告变现模式开发
短剧app搭建是一个涉及多个方面的复杂过程,下面将介绍主要的步骤和考虑因素: 明确目标和定位:在开始搭建之前,首先要明确你的目标受众是谁,以及短剧app的主要定位是什么。这有助于在后续的开发过程中更有针对性地进行…...
如何选择适合的编程语言入门?
推荐学习网站:offernow.cn 如何选择最适合自己的编程语言呢?接下来,我给大家分享一些实用的建议,希望能帮到你们。 一、明确目标和兴趣 考虑你的兴趣和未来方向是选择编程语言的首要因素。如果你对网页开发感兴趣,可以…...
Spring Boot入门教程
Spring Boot入门教程可以按照以下步骤进行,以确保清晰和有条理地学习: 1. Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建以及开发过程。它使用了特定的方式来进行配置,使开发人员不再…...

芝麻文件重命名 一键批量重命名 支持批量修改图片 文档 文件夹名称
芝麻文件重命名是一款专业的文件批量重命名软件,它提供了丰富的功能和灵活的命名规则,可以大大提高文件管理的效率。以下是关于芝麻文件重命名的详细介绍: 一、软件特点 支持批量重命名:芝麻文件重命名支持文件和文件夹的批量重命…...
docker守护进程配置代理
一:配置 Docker 守护进程使用代理 1.创建或编辑 Docker 配置文件目录 2.创建或编辑代理配置文件 3.重新加载系统守护进程并重启 Docker 4.验证代理设置 5.使用 docker pull 拉取镜像,验证代理设置 步骤 1:创建或编辑 Docker 配置文件目录 Doc…...

使用Minikube部署Kubernetes环境
使用Minikube部署Kubernetes环境 1. Minikube简介 Minikube是一个轻量级的Kubernetes实现,它在本地运行一个Kubernetes集群,可以是单节点或者集群环境,主要用于开发和测试。Minikube支持Kubernetes的所有主要功能,包括Dashboard…...

蚂蚁集团:2023年科研投入211.9亿元
6月13日,蚂蚁集团发布2023年可持续发展报告。报告显示,2023年蚂蚁集团科研投入达到211.9亿元,再创历史新高,蚂蚁科技投入的重点是人工智能和数据要素技术。 蚂蚁集团董事长兼CEO井贤栋在报告致辞中说,面向未来&#x…...

pikachu靶场之XSS漏洞测试
一、环境配置 1.pikachu官网下载 下载地址:https://github.com/zhuifengshaonianhanlu/pikachu 2.百度网盘(里面含有pikachu跟phpstudy) 链接:pikachu下载 密码:abcd 配置:pikachu下载及安装-图文详解…...

python快速入门之Flask框架
文章目录 一、pip安装二、接口开发三、测试 一、pip安装 pip install flask 二、接口开发 from flask import Flaskapp Flask(__name__)app.route("/test") def index():return "test"if __name__ __main__:app.run()三、测试 http://127.0.0.1:5000…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...