【SpringBoot教程】搭建SpringBoot项目之编写pom.xml


🌈个人首页: 神马都会亿点点的毛毛张

👏今天毛毛张分享的内容主要是Maven 中 pom 文件🆕,涵盖基本概念、标签属性、配置等内容
文章目录
- 1.前言🥭
- 2.项目基本信息🍒
- 2.1 标签说明
- 2.2 案例演示
- 3.依赖管理`<dependencies>`🍎
- 3.1 依赖的基本概念
- 3.2 依赖属性:`groupId`、`artifactId`、`version`
- 3.3 依赖声明`<dependencies>`和`<dependency>`
- 3.4 依赖版本管理`<dependencyManagement>`
- 3.5 依赖范围`<scope>`和`<systemPath>`
- 3.6 总结
- 3.6.1 **依赖管理原则**
- 3.6.2 `<exclusions>`与依赖冲突
- 3.6.3 Maven依赖调节原则
- 4.项目属性`<properties>`🍇
- 4.1 标签说明
- 4.2 示例
- 5.插件管理🥝
- 5.1 插件管理`<pluginManagement>`
- 5.2 插件标签`<plugins>`和`<plugin>`
- 5.3 插件执行配置标签`<executions>`和`<execution>`
- 5.4 配置属性说明
- 5.4.1 `<configuration>` 标签
- 5.4.2 `source` 和 `target` 的含义
- 5.4.3 其他常见插件配置
- 5.5 插件的典型应用
- 5.5.1 指定jdk版本
- 5.5.2 打完整Maven的jar包(Maven默认方法)
- 5.5.3 Spring Boot定制化打包
- 6.仓库配置🥥
- 6.1 配置依赖仓库`<repositories>`
- 6.2 配置插件仓库`<pluginRepositories>`
- 7.构建配置🍉
- 7.1 整体构建配置`<build>`
- 7.2 多环境配置`<profiles>`和`<profile>`
- 8. 继承和聚合🍏
- 8.1 聚合标签`<modules>`与`<module>`
- 8.2 继承标签`<parent>`
- 9.POM标签大全详解🫐
- 参考文献
1.前言🥭
-
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。
-
POM 中可以指定以下配置:项目依赖、插件、执行目标、项目构建、项目版本等等
-
今天毛毛张分享的是一篇关于
pom.xml
文件中标签以及属性的介绍文章,里面介绍的很多标签,但是毛毛张的目的并不是为了教大家怎么写,而是分类介绍一下这些标签及属性的含义,帮助大家理解,在做项目的时候我们很少直接去凭借自己的记忆去写,都是去复制粘贴自己之前的pom.xml
文件,久而久之就熟悉了。更多的信息可以参考POM文件官网:POM文件官网详细介绍 -
毛毛张今天围绕着沉默王二的技术派这个项目里面的
pom.xml
文件的案例来向大家介绍一下pom.xml
中一些常见的标签以及属性
2.项目基本信息🍒
2.1 标签说明
- project: 工程的根标签。
- modelVersion: 模型版本需要设置为
4.0
。 - groupId: 组织或公司标识,例如
com.company.project
。它在一个组织或者项目中通常是唯一的。例如,一个银行组织com.companyname.project-group
拥有所有与银行相关的项目。- 格式规则:
com.{公司/BU}.业务线.[子业务线]
,最多 4 级。- 说明:
{公司/BU}
例如:alibaba
、taobao
、tmall
、aliexpress
等 BU 一级;子业务线可选。 - 正例:
com.taobao.tddl
、com.alibaba.sourcing.multilang
、com.atguigu.java
- 格式规则:
- artifactId: 项目名称,例如
my-app
。这是工程的标识,通常是工程的名称。groupId
和artifactId
一起定义了 artifact 在仓库中的位置。- 格式规则:
产品线名-模块名
。语义不重复不遗漏,先到仓库中心去查证一下。- 正例:
tc-client
、uic-api
、tair-tool
、bookstore
- 格式规则:
- **version: 项目版本,例如
1.0.0
。这是工程的版本号,在 artifact 的仓库中,用来区分不同的版本。例如:com.company.bank:consumer-banking:1.0
**和com.company.bank:consumer-banking:1.1
。- 版本号格式推荐:
主版本号.次版本号.修订号
(例如1.0.0
)- 主版本号:当进行了不兼容的 API 修改,或者增加了能改变产品方向的新功能时增加。
- 次版本号:当进行了向下兼容的功能性新增(新增类、接口等)时增加。
- 修订号:修复 bug,没有修改方法签名的功能加强,保持 API 兼容性时增加。
- 示例:
- 初始版本 →
1.0.0
- 修改 bug →
1.0.1
- 功能调整 →
1.1.0
- 初始版本 →
- 版本号格式推荐:
- packaging: 项目打包类型,主要有以下三种类型
jar
(默认值):代表普通的 Java 工程,打包后是.jar
文件。war
:代表 Java 的 Web 工程,打包后是.war
文件。pom
:代表不会打包,用于继承的父工程。
- properties: 定义项目属性,便于统一管理和复用(在下面详细介绍)
- name: 项目名称,用于展示,可不选
- description: 项目描述,可不选
- url: 项目主页或相关网址,可不选
- developers 和 contributors: 列出项目的开发者和贡献者信息,可不选
- Maven 的 GAVP 属性:
- GAVP 是指 groupId、artifactId、version、packaging 四个属性的缩写,其中前三个是必要的,packaging 为可选项。这四个属性主要为每个项目在 Maven 仓库中做一个标识,类似于人的“姓-名”。有了具体标识,方便 Maven 软件对项目进行管理和互相引用!
- 规则总结:
- groupID:
com.{公司/BU}.业务线.[子业务线]
,最多 4 级。 - artifactID:
产品线名-模块名
,语义不重复不遗漏。 - version:
主版本号.次版本号.修订号
,如1.0.0
。 - packaging:
jar
(默认)、war
、pom
等,根据项目类型选择。
- groupID:
- 所有 POM 文件都需要包含
project
元素和这三个必需字段:groupId
、artifactId
、version
。
2.2 案例演示
<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.zzx</groupId> <!-- 组织标识 --><artifactId>springboot-mybatis-demo</artifactId> <!-- 项目名称 --><version>0.0.1-SNAPSHOT</version> <!-- 项目版本 --><!-- 以上标签必要 --><packaging>jar</packaging> <!-- 打包方式 --><name>springboot-mybatis-demo</name> <!-- 项目名称 --><description>springboot-mybatis-demo</description> <!-- 项目描述 --><!--- 以下标签非必要 --><name>神马都会亿点点的毛毛张</name><description>这是一个示例 Maven 项目</description><url>http://www.company.com/my-app</url><developers><developer><id>mmzhang</id><name>毛毛张</name><email>1849975199@qq.com</email><roles><role>Developer</role></roles></developer></developers><contributors><contributor><name>zzx</name><email>1849975199@qq.com</email><roles><role>Contributor</role></roles></contributor></contributors>
</project>
3.依赖管理<dependencies>
🍎
3.1 依赖的基本概念
Maven 中的依赖管理包括依赖的声明、范围、版本等。依赖描述了项目所需要的外部库或模块,Maven 会根据这些信息自动下载并管理这些依赖。
3.2 依赖属性:groupId
、artifactId
、version
- 每个 Maven 依赖都包含三个核心属性,Maven 会根据这些属性定位依赖,并从本地或远程仓库中下载
groupId
:表示依赖所属的组。artifactId
:表示依赖的具体名称。version
:表示依赖的版本号。
- 示例:
<!-- 唯一定位到依赖插件 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.10</version>
3.3 依赖声明<dependencies>
和<dependency>
- 在 Maven 项目中,
<dependencies>
标签用于声明所有外部库和模块的依赖。每个依赖由一个<dependency>
标签表示。每个<dependency>
标签包含以下几个重要部分:groupId
:库的组织 ID。artifactId
:库的名称。version
:库的版本。scope
(可选):指定依赖的作用范围(将在下面详细讲解)<optional>
(可选):通过在<dependency>
中添加<optional>true</optional>
,可以标记该依赖为可选依赖。可选依赖不会被传递给其他项目,且不会强制要求在子项目中存在。<exclusions>
:排除依赖。有时,一个依赖会引入不需要的间接依赖,可以通过<exclusions>
排除它们。
- 示例:
<dependencies><!-- 依赖示例:Spring Core --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.9</version><optional>true</optional></dependency><!-- 依赖示例:JUnit 测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></exclusion></exclusions></dependency> </dependencies>
3.4 依赖版本管理<dependencyManagement>
- 在父 POM 中使用
dependencyManagement
标签统一管理版本,子项目通过引用时可以自动继承父项目的版本,而不需要重复指定。 - 示例:
<dependencyManagement><dependencies><!-- 管理 Spring 版本 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.9</version></dependency><!-- 管理 Jackson 版本 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</version></dependency></dependencies> </dependencyManagement><dependencies><!-- 使用父 POM 中管理的依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency> </dependencies>
3.5 依赖范围<scope>
和<systemPath>
- Maven 支持不同的依赖范围,影响依赖的生命周期和是否包含在构建中,
<scope>
标签用于管理依赖的部署和使用范围,帮助确定依赖项在不同环境中的有效性,可以直观地管理依赖。scope
有五种常见属性值:- compile(默认值):在所有范围内都生效,表示依赖项在编译、测试和运行时都需要存在。
- test:只在测试阶段有效,例如JUnit。不会影响编译阶段,仅在测试时使用。
- runtime:只在运行和测试时有效,例如JDBC驱动。编译时不需要此依赖,只有在运行或测试时才会用到。
- provided:在编译和测试时有效,例如
servlet-api
和jsp-api
。编译时需要这些依赖,但在运行时由容器提供(如Tomcat)。不能使用compile
,避免与容器提供的版本冲突。 system
:由系统 CLASSPATH 指定,编译时依赖,但不会打包,需要配合<systemPath>
使用。system
依赖可以引入系统中的非 Maven 管理的第三方 JAR 文件,通常是将 JAR 放在项目的lib
目录下并通过相对路径引用。
- 示例:
<!-- 使用 system 引入系统 JAR --> <dependency><groupId>com.sun</groupId><artifactId>tools</artifactId><version>${java.version}</version><scope>system</scope><optional>true</optional><systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency><!-- 引入项目内 JAR --> <dependency><groupId>jsr</groupId><artifactId>jsr</artifactId><version>3.5</version><scope>system</scope><optional>true</optional><systemPath>${basedir}/lib/jsr305.jar</systemPath> </dependency><!-- 配置插件将 system JAR 打包 --> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.10</version><executions><execution><id>copy-dependencies</id><phase>compile</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory><includeScope>system</includeScope><excludeGroupIds>com.sun</excludeGroupIds></configuration></execution></executions> </plugin>
3.6 总结
3.6.1 依赖管理原则
- 显式依赖:如果项目中的Java源码直接引用了某个依赖库中的类,该依赖必须在编译阶段生效,否则编译时会报错。
- 运行时依赖:有些依赖可能没有在编译阶段直接引用,但在运行时被间接使用(例如项目的某个模块依赖)。这种依赖只能在运行阶段发现,因此需要确保其在运行时有效。
- 测试依赖:像JUnit、Tomcat、
servlet-api
等依赖,仅在本地开发和测试时需要,但在打包时不需要。因此,可以在打包时忽略这些依赖。
3.6.2 <exclusions>
与依赖冲突
<exclusions>
用于排除传递依赖中的冲突,解决jar
包版本冲突的问题。传递依赖意味着项目A依赖B,B依赖C等,A项目会引入B的所有依赖,包括B的依赖(C、D、E等)。例如:项目A依赖B(版本1.1),项目C也依赖B(版本1.2)。如果项目同时依赖A和B,就会引入两个版本的B,可能导致冲突。为了解决这种冲突,使用<exclusions>
可以显式排除某个传递依赖,避免加载多个版本。
3.6.3 Maven依赖调节原则
-
路径近者优先:如果依赖的类有多个版本,Maven会选择路径较近的版本。例如,路径A→B→C→X(版本1.1)和路径D→E→X(版本1.2),Maven会选择版本1.2,因为路径D→E更近。
-
第一声明者优先:如果路径相等,Maven会选择先声明的版本。例如,路径A→B→X(版本1.1)和路径C→D→X(版本1.2),Maven会选择版本1.1,因为它是第一个声明的。
-
通过合理使用
scope
和exclusions
,可以有效地管理和避免依赖冲突,提高项目构建的稳定性与可靠性。
4.项目属性<properties>
🍇
4.1 标签说明
- 在前面介绍过依赖的管理,接下来就介绍一个和依赖管理相关的标签
<properties>
- 在 Maven 项目中,
<properties>
标签用于配置全局属性,可以通过这种方式简化配置,特别是在多个地方需要重复使用相同的属性时。通过在<properties>
标签中定义属性,可以避免在多个依赖或配置中硬编码这些值,便于集中管理和修改。 - 通过
<properties>
配置的属性是全局可用的,且可以被子模块的pom.xml
继承和使用。这种方式使得项目中相同的配置可以在一个地方集中管理,提高了维护性。 - 引用配置的属性:在
<dependencies>
中,可以通过${}
引用在<properties>
中定义的属性值
4.2 示例
<properties><!-- 版本号作为属性配置 --><java.version>1.8</java.version><spring.version>5.0.2.RELEASE</spring.version> <!-- RELEASE 表示最新的发布版本 -->
</properties>
<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!-- 项目编码 --><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties><!-- 使用 ${} 引用 properties 中定义的属性 -->
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><!-- 使用配置的属性引用版本号 --><version>${spring.version}</version> </dependency>
</dependencies>
5.插件管理🥝
- Maven 插件是 Maven 构建生命周期的一部分,用于在不同阶段执行特定的任务,如编译代码、打包、测试等。插件的配置通过
POM
文件中的<plugins>
部分进行管理。插件配置包括插件的标识、版本、执行阶段和具体的参数配置。
5.1 插件管理<pluginManagement>
- pluginManagement:在父 POM 文件中统一管理插件的版本和配置,子项目可以继承这些设置。子项目仅需在
<build><plugins>
部分引用插件,而无需再次指定插件版本或其他配置。 - 示例:
<pluginManagement><plugins><!-- 统一管理插件版本 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin></plugins> </pluginManagement><build><plugins><!-- 使用 pluginManagement 中定义的编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin></plugins> </build>
5.2 插件标签<plugins>
和<plugin>
- Maven 插件通常包含以下标签和属性:
<plugins>
:定义插件的容器,所有插件的配置都在此标签内。<plugin>
:用于定义一个插件的配置,包括插件标识、版本、执行阶段等。每个<plugin>
标签代表一个插件的配置。包含以下属性:<groupId>
:插件的组织标识符,通常是 Maven 组织或相关开源项目的标识。<artifactId>
:插件的唯一标识符,表示插件的名字。<version>
:插件的版本号,指明该插件的具体版本。<configuration>
:插件的配置,通常用于传递插件需要的参数。<executions>
:插件执行的配置,标签定义了插件的执行规则,决定插件在构建过程中何时执行。可以包含多个<execution>
标签。每个<execution>
标签指定插件在哪个阶段执行、执行的目标以及需要的配置。<dependencies>
:插件依赖的其他插件。
<configuration>
:用于配置插件的具体执行内容,包含插件执行时需要的参数。每个插件有自己独特的配置选项,这些配置项由插件开发者定义。- 示例:毛毛张在这里通过一个常见的插件Lombok依赖和插件的配置来作为演示的示例
<!-- Java 版本配置 --> <properties><java.version>17</java.version> <!-- 项目使用的 Java 版本 --> </properties><!-- 依赖项配置 --> <dependencies><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><scope>provided</scope> <!-- 可选:标记为 provided --></dependency> </dependencies><!-- 构建配置 --> <build><plugins><!-- Maven 编译插件,用于处理注解处理器(如 Lombok) --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version> <!-- 指定插件版本 --><configuration><source>${java.version}</source> <!-- Java 源代码版本 --><target>${java.version}</target> <!-- Java 字节码版本 --><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version> <!-- 确保版本匹配 --></path></annotationProcessorPaths></configuration></plugin><!-- 依赖插件配置 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.1</version><executions><execution><id>copy-dependencies</id><phase>package</phase> <!-- 指定执行阶段 --><goals><goal>copy-dependencies</goal> <!-- 目标任务 --></goals><configuration><outputDirectory>${project.build.directory}/libs</outputDirectory> <!-- 配置输出目录 --></configuration></execution></executions></plugin></plugins> </build>
- 示例解释:
- Java 版本:通过
<properties>
设置 Java 版本为 17,确保项目在编译时使用这个版本。 - Lombok 依赖:引入了 Lombok 作为编译时依赖,使用
provided
作用域,意味着它仅在编译时使用,不会包含在最终的 JAR 文件中。 - Maven 编译插件:配置了
maven-compiler-plugin
插件,确保使用指定的 Java 版本(17)进行编译,并支持 Lombok 注解处理器。 - 依赖插件:使用
maven-dependency-plugin
插件在package
阶段将所有依赖复制到libs
目录,方便后续使用或发布。
- Java 版本:通过
5.3 插件执行配置标签<executions>
和<execution>
<execution>
标签:该 标签包含插件执行时的具体信息,通常有以下子标签:<id>
:执行标识符,指定该执行的唯一标识。<phase>
:插件执行的生命周期阶段,例如compile
、test
、package
等。<goals>
:指定插件执行的目标,通常是插件所提供的功能。<configuration>
:该执行的具体配置,定义该目标任务在执行时的参数。
- 插件的执行阶段通过
<phase>
属性指定,Maven构建生命周期的常见阶段包括:validate
:验证项目是否正确,所有需要的参数和文件是否存在。compile
:编译源代码。test
:运行测试。package
:打包应用程序。install
:将打包好的应用程序安装到本地仓库。deploy
:将应用程序发布到远程仓库。
- 插件目标通过
goals
标签配置,每个插件可以有多个目标任务,每个目标定义插件的具体功能,goals相当于该插件中的一个功能,该功能将在phase绑定的生命周期阶段执行。有些插件可能包含多个目标,goals 标签中可以配置多个 goal 标签,表示一个生命周期环节可以对应当前插件的多个目标。
5.4 配置属性说明
5.4.1 <configuration>
标签
<configuration>
标签用于传递给插件的具体参数,这些参数控制插件的行为。例如,maven-compiler-plugin
插件的配置包含了source
和target
属性,用来指定源代码和字节码的兼容版本
5.4.2 source
和 target
的含义
source
:指定源码兼容性版本,表示源码需要遵循的 JDK 版本。例如,source
设置为1.8
表示代码将使用 Java 1.8 编写target
:指定编译后的.class
字节码版本,表示编译生成的.class
文件能够在指定版本的 JVM 上运行。例如,target
设置为1.8
表示编译后的字节码将兼容 JDK 1.8
5.4.3 其他常见插件配置
- 输出目录:如
outputDirectory
,定义插件输出文件的路径。 - 依赖项:如
dependencies
,指定插件所依赖的其他插件或库。
5.5 插件的典型应用
5.5.1 指定jdk版本
-
提出问题 Maven使用的默认Java编译器版本是Java 1.5。为了使Maven使用Java编译器的较新版本编译Java代码,需要在项目的POM文件(pom.xml)中显式指定Java编译器。 从Java 8 和更早版本开始,有两种方法可以在Maven POM文件中设置Java编译器版本:
-
通过Maven Java编译器属性:
<properties><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.source>1.8</maven.compiler.source> </properties>
-
通过Maven Java编译器插件:
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins> </build>
5.5.2 打完整Maven的jar包(Maven默认方法)
- 需求:在进行 Maven 打包时,项目需要满足以下要求:
- 打一个压缩包,其中包含应用程序的 JAR 包、依赖的 JAR 包以及说明文档。
- 打包的 JAR 包能够执行不同类中的
main
函数。 - 源码 JAR 包与依赖的第三方 JAR 包分开。
- 项目中的执行脚本也一起打包并进行分类。
document
目录下的readme.txt
放在压缩包的根目录下,其他文档仍然放在document
目录下。- 打包时排除不必要的目录和文件。
- 解决方案:可以使用 Maven 的
maven-jar-plugin
插件来打可执行的 JAR 包,并对打包过程进行定制。 - 示例:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>2.4</version><!-- 对 JAR 包进行配置 --><configuration><!-- 配置归档器 --><archive><!-- 不包含 pom.xml 和 pom.properties --><addMavenDescriptor>false</addMavenDescriptor><!-- Manifest 特定配置 --><manifest><!-- 是否将第三方 JAR 包放入 Manifest 的 classpath 中 --><addClasspath>true</addClasspath><!-- classpath 前缀,放置第三方 JAR 到 lib 目录 --><classpathPrefix>lib/</classpathPrefix></manifest></archive><!-- 过滤不需要包含在 JAR 中的文件 --><excludes><!-- 排除不需要的文件夹 --><exclude>**/assembly/</exclude></excludes></configuration> </plugin>
- 运行方式:打包后,可以使用以下命令执行 JAR 包中的
main
方法:java -classpath dong.jar [main类的完全路径]
5.5.3 Spring Boot定制化打包
- 默认情况下,Maven 使用
maven-jar-plugin
插件来打包 JAR 包,但普通的 JAR 包无法通过java -jar
命令直接运行。为了解决这一问题,Spring Boot 提供了专门的 Maven 插件spring-boot-maven-plugin
,用于定制 Spring Boot 应用的打包行为,使得打包后的 JAR 包可以直接使用java -jar
命令启动运行。 - 使用
spring-boot-maven-plugin
打包 Spring Boot 项目<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.5</version></plugin></plugins> </build>
- 默认打包与 Spring Boot 打包的区别
- 默认打包:只生成普通的 JAR 包,不包含项目依赖的 JAR 包,无法直接执行。
- Spring Boot 打包:生成的 JAR 包包含所有依赖的 JAR 文件,所有依赖包都打包到
BOOT-INF/lib
目录下。可以通过java -jar
命令直接执行,无需手动指定main
类。
6.仓库配置🥥
- 在 Maven 项目中,仓库配置用于定义项目的依赖库和插件的存储位置。主要分为两种类型:
<repositories>
和<pluginRepositories>
。<repositories>
用于配置项目的依赖仓库,支持对发布版本(<releases>
)和快照版本(<snapshots>
)的独立控制。<pluginRepositories>
用于配置插件的仓库,通常用于存放公司内部或自定义的 Maven 插件。
- 配置仓库时,可以指定是否启用发布版本(
<releases>
)或快照版本(<snapshots>
)的下载,灵活管理项目依赖和插件的来源。
6.1 配置依赖仓库<repositories>
<repositories>
标签用于定义项目依赖的仓库位置,可以包含多个<repository>
子标签- 每个
<repository>
定义一个具体的仓库,项目会从这些仓库中获取依赖。每个仓库包含以下属性:<id>
: 仓库的唯一标识符<url>
: 仓库的地址<releases>
和<snapshots>
: 配置是否启用发布版本和快照版本的下载
- 示例:这是沉默王二的技术派的项目的依赖仓库配置
<repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>aliyun-maven</id><name>aliyun-maven</name><url>https://maven.aliyun.com/nexus/content/groups/public/</url><snapshots><enabled>false</enabled></snapshots></repository> </repositories>
- 示例解释:
- Spring Milestones 仓库
- 仓库内容:由 Spring 团队维护,存放 Spring 框架及相关项目的里程碑版本和开发版本。主要包含接近发布但尚不完全稳定的版本,如 Spring Boot、Spring Cloud 等的里程碑版本。
- 配置作用:访问 Spring 项目的最新特性和修复,提前体验尚未发布的版本,适用于开发和测试。
- Aliyun Maven 仓库
- 仓库内容:阿里云提供的公共 Maven 仓库,作为 Maven 中央仓库的国内镜像,包含常用的 Java 库和工具,如 Spring、MySQL Connector、Apache Commons 等。
- 配置作用:加速国内开发者对常见 Java 库的访问,解决访问 Maven 中央仓库时的网络速度问题。
- Spring Milestones 仓库
6.2 配置插件仓库<pluginRepositories>
<pluginRepositories>
标签用于定义存储 Maven 插件的仓库位置,通常用于存放自定义或公司内部的 Maven 插件- 与
<repositories>
类似,<pluginRepositories>
可以包含多个<pluginRepository>
子标签。每个仓库包含以下属性:<id>
: 插件仓库的唯一标识符<url>
: 插件仓库的地址
- 示例:
<pluginRepositories><!-- Maven 官方中央插件仓库 --><pluginRepository><id>central</id><url>https://repo.maven.apache.org/maven2</url></pluginRepository><!-- 公司内部插件仓库 --><pluginRepository><id>company-plugin-repo</id><url>http://plugins.company.com/maven2</url></pluginRepository> </pluginRepositories>
- 示例解释:
central
:- URL:
https://repo.maven.apache.org/maven2
这是 Maven 官方的中央仓库 URL,包含了大量常用的构建插件,例如maven-compiler-plugin
和maven-jar-plugin
等。 - 用途: 配置中央仓库,确保 Maven 在构建过程中能够从官方仓库获取常见的构建插件。
- URL:
company-plugin-repo
:- URL:
http://plugins.company.com/maven2
这是公司自定义的插件仓库 URL,假设公司开发了自己特定的 Maven 插件(如特定的构建或发布插件)。 - 用途: 如果项目需要使用公司开发的私有插件,Maven 会尝试从这个自定义仓库获取插件。如果插件在中央仓库中没有找到,Maven 将尝试访问此私有仓库。
- URL:
7.构建配置🍉
7.1 整体构建配置<build>
-
示例:
<build><sourceDirectory>src/main/java</sourceDirectory><outputDirectory>target/classes</outputDirectory><finalName>my-app</finalName><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin><!-- 打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><mainClass>com.company.project.MainApp</mainClass></manifest></archive></configuration></plugin></plugins><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources><testResources><testResource><directory>src/test/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></testResource></testResources> </build>
-
基本目录设定:
- sourceDirectory:明确了源代码所在的目录,默认值为
src/main/java
,这是项目中 Java 源代码存放的基础位置,编译器会从这里读取代码进行编译操作。 - outputDirectory:定义了编译后输出的目录,默认是
target/classes
,编译生成的字节码文件等会存放在此目录下,后续打包等操作会基于这个目录里的内容进行。 - finalName:指定了最终打包的名称(不包含扩展名),比如示例中设置为
my-app
,它决定了生成的可执行文件或者包最终呈现的主名称。
- sourceDirectory:明确了源代码所在的目录,默认值为
-
插件配置(plugins):
- 编译插件(maven-compiler-plugin):
- 其
groupId
、artifactId
和version
确定了具体使用的编译插件版本为3.8.1
。 - 通过
<configuration>
标签内的<source>
和<target>
配置项,可指定编译时使用的 Java 版本等编译相关的参数,并且这里使用了${maven.compiler.source}
和${maven.compiler.target}
这样的变量形式,方便在外部进行灵活配置。
- 其
- 打包插件(maven-jar-plugin):
- 同样通过
groupId
、artifactId
和version
明确了使用的打包插件版本是3.2.0
。 - 在
<configuration>
里的<archive>
及<manifest>
相关配置,如设置<addClasspath>true</addClasspath>
表示将类路径添加到清单文件中,<mainClass>
指定了项目的主类(如com.company.project.MainApp
),这样在打包后的可执行文件运行时能准确找到入口类启动项目。
- 同样通过
- 编译插件(maven-compiler-plugin):
-
资源文件配置(resources 和 testResources):
- resources:针对项目的主资源文件,
<directory>
指定资源文件所在目录为src/main/resources
,而<includes>
标签里通过<include>
定义了具体包含哪些类型的资源文件(示例中包含.properties
和.xml
文件),用于在项目构建、打包等过程中对这些资源文件进行正确处理。 - testResources:与
resources
类似,不过它是针对测试相关资源文件的配置,其目录设定为src/test/resources
,包含规则同样是指定了.properties
和.xml
文件,确保测试时对应的资源能被正确加载。
- resources:针对项目的主资源文件,
7.2 多环境配置<profiles>
和<profile>
-
基本概念与作用:
- profiles:用于应对 spring boot 项目在不同部署环境(开发、测试、线上等)的需求,因为不同环境往往需要加载不同的配置文件,通过它可以方便地进行构建配置的切换。
- profile:是每个具体构建配置文件的定义,里面涵盖了如属性(properties)、依赖(dependencies)、插件(plugins)等多方面的配置内容,使得每个环境可以有各自独立且合适的项目配置。
- activation:定义激活条件,可以通过命令行参数
-P
激活某个配置文件,或者通过条件自动激活。
-
示例1:这是沉默王二的技术派中的多环境配置
<profiles><!-- 本地开发 --><profile><id>dev</id><properties><env>dev</env></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!-- 测试 --><profile><id>test</id><properties><env>test</env></properties></profile><!-- 预发 --><profile><id>pre</id><properties><env>pre</env></properties></profile><!-- 生产 --><profile><id>prod</id><properties><env>prod</env></properties></profile> </profiles><build><resources><resource><directory>src/main/resources</directory></resource><resource><directory>src/main/resources-env/${env}</directory><filtering>true</filtering></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins> </build>
-
示例2:
<profiles><!-- 本地环境 --><profile><id>local</id><activation><!-- 默认激活此配置 --><activeByDefault>true</activeByDefault></activation><properties><!-- 环境配置 --><environment>local</environment><env>dev</env></properties><dependencies><!-- 使用常见的数据库连接池 HikariCP --><dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.0</version><scope>runtime</scope></dependency></dependencies></profile><!-- 开发环境 --><profile><id>dev</id><activation><!-- 不默认激活,需要显式选择 --><activeByDefault>false</activeByDefault></activation><properties><environment>dev</environment><env>dev</env></properties><dependencies><!-- 使用常见的 MySQL 数据库连接器 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version><scope>runtime</scope></dependency></dependencies></profile><!-- 生产环境 --><profile><id>prod</id><activation><!-- 不默认激活,需要显式选择 --><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment><env>prod</env></properties><dependencies><!-- 使用常见的 MySQL 数据库连接器 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version><scope>runtime</scope></dependency></dependencies></profile> </profiles>
8. 继承和聚合🍏
8.1 聚合标签<modules>
与<module>
- 聚合标签用于将多个子模块整合在一起,进行统一构建,避免逐一构建。为了使用聚合,必须有一个父工程,并在父工程的 POM 文件中使用
<modules>
标签来配置包含的子模块的路径。<modules>
: 列出当前聚合项目包含的所有子模块。<module>
: 用于指定子模块的相对路径或目录名。
- 在继承的父 POM 文件中,
<modules>
用来定义聚合项目的子模块。确保子模块目录存在,并且每个子模块都有自己的 POM 文件。 - 下面是技术派项目中父工程的配置文件:
<modules><module>paicoding-ui</module><module>paicoding-web</module><module>paicoding-core</module><module>paicoding-service</module><module>paicoding-api</module> </modules>
8.2 继承标签<parent>
- 继承标签用于指定当前项目的父 POM。通过继承父 POM,可以共享父项目的配置,避免重复配置。
<parent>
: 指定当前项目的父 POM 文件。<relativePath>
: 父 POM 文件的相对路径,默认是../pom.xml
。
- 示例:
<parent><groupId>com.company.project</groupId><artifactId>parent-pom</artifactId><version>1.0.0</version><relativePath>../parent-pom/pom.xml</relativePath> </parent>
<relativePath>../parent-pom/pom.xml</relativePath>
是相对于当前 POM 文件的父 POM 文件的相对路径。../parent-pom/pom.xml
表示父 POM 文件位于当前 POM 文件所在目录的上一级目录下的parent-pom
文件夹中,且该文件名为pom.xml
。..
表示当前目录的上级目录。parent-pom/pom.xml
表示父 POM 文件所在的相对路径。

🌈欢迎和毛毛张一起探讨和交流!
联系方式点击下方个人名片
9.POM标签大全详解🫐
<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.0http://maven.apache.org/maven-v4_0_0.xsd"><!--父项目的坐标。如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。 坐标包括group ID,artifact ID和 version。 --><parent><!--被继承的父项目的构件标识符 --><artifactId /><!--被继承的父项目的全球唯一标识符 --><groupId /><!--被继承的父项目的版本 --><version /><!-- 父项目的pom.xml文件的相对路径。相对路径允许你选择一个不同的路径。默认值是../pom.xml。Maven首先在构建当前项目的地方寻找父项 目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。 --><relativePath /></parent><!--声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。 --><modelVersion>4.0.0</modelVersion><!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。并且构建时生成的路径也是由此生成, 如com.mycompany.app生成的相对路径为:/com/mycompany/app --><groupId>asia.banseon</groupId><!-- 构件的标识符,它和group ID一起唯一标识一个构件。换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个 特定的group ID下,artifact ID也必须是唯一的。构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源 码,二进制发布和WARs等。 --><artifactId>banseon-maven2</artifactId><!--项目产生的构件类型,例如jar、war、ear、pom。插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型 --><packaging>jar</packaging><!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号 --><version>1.0-SNAPSHOT</version><!--项目的名称, Maven产生的文档用 --><name>banseon-maven</name><!--项目主页的URL, Maven产生的文档用 --><url>http://www.baidu.com/banseon</url><!-- 项目的详细描述, Maven 产生的文档用。 当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标 签), 不鼓励使用纯文本描述。如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。 --><description>A maven project to study maven.</description><!--描述了这个项目构建环境中的前提条件。 --><prerequisites><!--构建该项目或使用该插件所需要的Maven的最低版本 --><maven /></prerequisites><!--项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL,本例为 jira --><issueManagement><!--问题管理系统(例如jira)的名字, --><system>jira</system><!--该项目使用的问题管理系统的URL --><url>http://jira.baidu.com/banseon</url></issueManagement><!--项目持续集成信息 --><ciManagement><!--持续集成系统的名字,例如continuum --><system /><!--该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。 --><url /><!--构建完成时,需要通知的开发者/用户的配置项。包括被通知者信息和通知条件(错误,失败,成功,警告) --><notifiers><!--配置一种方式,当构建中断时,以该方式通知用户/开发者 --><notifier><!--传送通知的途径 --><type /><!--发生错误时是否通知 --><sendOnError /><!--构建失败时是否通知 --><sendOnFailure /><!--构建成功时是否通知 --><sendOnSuccess /><!--发生警告时是否通知 --><sendOnWarning /><!--不赞成使用。通知发送到哪里 --><address /><!--扩展配置项 --><configuration /></notifier></notifiers></ciManagement><!--项目创建年份,4位数字。当产生版权信息时需要使用这个值。 --><inceptionYear /><!--项目相关邮件列表信息 --><mailingLists><!--该元素描述了项目相关的所有邮件列表。自动产生的网站引用这些信息。 --><mailingList><!--邮件的名称 --><name>Demo</name><!--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 --><post>banseon@126.com</post><!--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 --><subscribe>banseon@126.com</subscribe><!--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建 --><unsubscribe>banseon@126.com</unsubscribe><!--你可以浏览邮件信息的URL --><archive>http:/hi.baidu.com/banseon/demo/dev/</archive></mailingList></mailingLists><!--项目开发者列表 --><developers><!--某个项目开发者的信息 --><developer><!--SCM里项目开发者的唯一标识符 --><id>HELLO WORLD</id><!--项目开发者的全名 --><name>banseon</name><!--项目开发者的email --><email>banseon@126.com</email><!--项目开发者的主页的URL --><url /><!--项目开发者在项目中扮演的角色,角色元素描述了各种角色 --><roles><role>Project Manager</role><role>Architect</role></roles><!--项目开发者所属组织 --><organization>demo</organization><!--项目开发者所属组织的URL --><organizationUrl>http://hi.baidu.com/banseon</organizationUrl><!--项目开发者属性,如即时消息如何处理等 --><properties><dept>No</dept></properties><!--项目开发者所在时区, -11到12范围内的整数。 --><timezone>-5</timezone></developer></developers><!--项目的其他贡献者列表 --><contributors><!--项目的其他贡献者。参见developers/developer元素 --><contributor><name /><email /><url /><organization /><organizationUrl /><roles /><timezone /><properties /></contributor></contributors><!--该元素描述了项目所有License列表。 应该只列出该项目的license列表,不要列出依赖项目的 license列表。如果列出多个license,用户可以选择它们中的一个而不是接受所有license。 --><licenses><!--描述了项目的license,用于生成项目的web站点的license页面,其他一些报表和validation也会用到该元素。 --><license><!--license用于法律上的名称 --><name>Apache 2</name><!--官方的license正文页面的URL --><url>http://www.baidu.com/banseon/LICENSE-2.0.txt</url><!--项目分发的主要方式: repo,可以从Maven库下载 manual, 用户必须手动下载和安装依赖 --><distribution>repo</distribution><!--关于license的补充信息 --><comments>A business-friendly OSS license</comments></license></licenses><!--SCM(Source Control Management)标签允许你配置你的代码库,供Maven web站点和其它插件使用。 --><scm><!--SCM的URL,该URL描述了版本库和如何连接到版本库。欲知详情,请看SCMs提供的URL格式和列表。该连接只读。 --><connection>scm:svn:http://svn.baidu.com/banseon/maven/banseon/banseon-maven2-trunk(dao-trunk)</connection><!--给开发者使用的,类似connection元素。即该连接不仅仅只读 --><developerConnection>scm:svn:http://svn.baidu.com/banseon/maven/banseon/dao-trunk</developerConnection><!--当前代码的标签,在开发阶段默认为HEAD --><tag /><!--指向项目的可浏览SCM库(例如ViewVC或者Fisheye)的URL。 --><url>http://svn.baidu.com/banseon</url></scm><!--描述项目所属组织的各种属性。Maven产生的文档用 --><organization><!--组织的全名 --><name>demo</name><!--组织主页的URL --><url>http://www.baidu.com/banseon</url></organization><!--构建项目需要的信息 --><build><!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --><sourceDirectory /><!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。 --><scriptSourceDirectory /><!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 --><testSourceDirectory /><!--被编译过的应用程序class文件存放的目录。 --><outputDirectory /><!--被编译过的测试class文件存放的目录。 --><testOutputDirectory /><!--使用来自该项目的一系列构建扩展 --><extensions><!--描述使用到的构建扩展。 --><extension><!--构建扩展的groupId --><groupId /><!--构建扩展的artifactId --><artifactId /><!--构建扩展的版本 --><version /></extension></extensions><!--当项目没有规定目标(Maven2 叫做阶段)时的默认值 --><defaultGoal /><!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。 --><resources><!--这个元素描述了项目相关或测试相关的所有资源路径 --><resource><!-- 描述了资源的目标路径。该路径相对target/classes目录(例如${project.build.outputDirectory})。举个例 子,如果你想资源在特定的包里(org.apache.maven.messages),你就必须该元素设置为org/apache/maven /messages。然而,如果你只是想把资源放到源码目录结构里,就不需要该配置。 --><targetPath /><!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 --><filtering /><!--描述存放资源的目录,该路径相对POM路径 --><directory /><!--包含的模式列表,例如**/*.xml. --><includes /><!--排除的模式列表,例如**/*.xml --><excludes /></resource></resources><!--这个元素描述了单元测试相关的所有资源路径,例如和单元测试相关的属性文件。 --><testResources><!--这个元素描述了测试相关的所有资源路径,参见build/resources/resource元素的说明 --><testResource><targetPath /><filtering /><directory /><includes /><excludes /></testResource></testResources><!--构建产生的所有文件存放的目录 --><directory /><!--产生的构件的文件名,默认值是${artifactId}-${version}。 --><finalName /><!--当filtering开关打开时,使用到的过滤器属性文件列表 --><filters /><!--子项目可以引用的默认插件信息。该插件配置项直到被引用时才会被解析或绑定到生命周期。给定插件的任何本地配置都会覆盖这里的配置 --><pluginManagement><!--使用的插件列表 。 --><plugins><!--plugin元素包含描述插件所需要的信息。 --><plugin><!--插件在仓库里的group ID --><groupId /><!--插件在仓库里的artifact ID --><artifactId /><!--被使用的插件的版本(或版本范围) --><version /><!--是否从该插件下载Maven扩展(例如打包和类型处理器),由于性能原因,只有在真需要下载时,该元素才被设置成enabled。 --><extensions /><!--在构建生命周期中执行一组目标的配置。每个目标可能有不同的配置。 --><executions><!--execution元素包含了插件执行需要的信息 --><execution><!--执行目标的标识符,用于标识构建过程中的目标,或者匹配继承过程中需要合并的执行目标 --><id /><!--绑定了目标的构建生命周期阶段,如果省略,目标会被绑定到源数据里配置的默认阶段 --><phase /><!--配置的执行目标 --><goals /><!--配置是否被传播到子POM --><inherited /><!--作为DOM对象的配置 --><configuration /></execution></executions><!--项目引入插件所需要的额外依赖 --><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies><!--任何配置是否被传播到子项目 --><inherited /><!--作为DOM对象的配置 --><configuration /></plugin></plugins></pluginManagement><!--使用的插件列表 --><plugins><!--参见build/pluginManagement/plugins/plugin元素 --><plugin><groupId /><artifactId /><version /><extensions /><executions><execution><id /><phase /><goals /><inherited /><configuration /></execution></executions><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies><goals /><inherited /><configuration /></plugin></plugins></build><!--在列的项目构建profile,如果被激活,会修改构建处理 --><profiles><!--根据环境参数或命令行参数激活某个构建处理 --><profile><!--构建配置的唯一标识符。即用于命令行激活,也用于在继承时合并具有相同标识符的profile。 --><id /><!--自动触发profile的条件逻辑。Activation是profile的开启钥匙。profile的力量来自于它 能够在某些特定的环境中自动使用某些特定的值;这些环境通过activation元素指定。activation元素并不是激活profile的唯一方式。 --><activation><!--profile默认是否激活的标志 --><activeByDefault /><!--当匹配的jdk被检测到,profile被激活。例如,1.4激活JDK1.4,1.4.0_2,而!1.4激活所有版本不是以1.4开头的JDK。 --><jdk /><!--当匹配的操作系统属性被检测到,profile被激活。os元素可以定义一些操作系统相关的属性。 --><os><!--激活profile的操作系统的名字 --><name>Windows XP</name><!--激活profile的操作系统所属家族(如 'windows') --><family>Windows</family><!--激活profile的操作系统体系结构 --><arch>x86</arch><!--激活profile的操作系统版本 --><version>5.1.2600</version></os><!--如果Maven检测到某一个属性(其值可以在POM中通过${名称}引用),其拥有对应的名称和值,Profile就会被激活。如果值 字段是空的,那么存在属性名称字段就会激活profile,否则按区分大小写方式匹配属性值字段 --><property><!--激活profile的属性的名称 --><name>mavenVersion</name><!--激活profile的属性的值 --><value>2.0.3</value></property><!--提供一个文件名,通过检测该文件的存在或不存在来激活profile。missing检查文件是否存在,如果不存在则激活 profile。另一方面,exists则会检查文件是否存在,如果存在则激活profile。 --><file><!--如果指定的文件存在,则激活profile。 --><exists>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</exists><!--如果指定的文件不存在,则激活profile。 --><missing>/usr/local/hudson/hudson-home/jobs/maven-guide-zh-to-production/workspace/</missing></file></activation><!--构建项目所需要的信息。参见build元素 --><build><defaultGoal /><resources><resource><targetPath /><filtering /><directory /><includes /><excludes /></resource></resources><testResources><testResource><targetPath /><filtering /><directory /><includes /><excludes /></testResource></testResources><directory /><finalName /><filters /><pluginManagement><plugins><!--参见build/pluginManagement/plugins/plugin元素 --><plugin><groupId /><artifactId /><version /><extensions /><executions><execution><id /><phase /><goals /><inherited /><configuration /></execution></executions><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies><goals /><inherited /><configuration /></plugin></plugins></pluginManagement><plugins><!--参见build/pluginManagement/plugins/plugin元素 --><plugin><groupId /><artifactId /><version /><extensions /><executions><execution><id /><phase /><goals /><inherited /><configuration /></execution></executions><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies><goals /><inherited /><configuration /></plugin></plugins></build><!--模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 --><modules /><!--发现依赖和扩展的远程仓库列表。 --><repositories><!--参见repositories/repository元素 --><repository><releases><enabled /><updatePolicy /><checksumPolicy /></releases><snapshots><enabled /><updatePolicy /><checksumPolicy /></snapshots><id /><name /><url /><layout /></repository></repositories><!--发现插件的远程仓库列表,这些插件用于构建和报表 --><pluginRepositories><!--包含需要连接到远程插件仓库的信息.参见repositories/repository元素 --><pluginRepository><releases><enabled /><updatePolicy /><checksumPolicy /></releases><snapshots><enabled /><updatePolicy /><checksumPolicy /></snapshots><id /><name /><url /><layout /></pluginRepository></pluginRepositories><!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 --><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies><!--不赞成使用. 现在Maven忽略该元素. --><reports /><!--该元素包括使用报表插件产生报表的规范。当用户执行"mvn site",这些报表就会运行。 在页面导航栏能看到所有报表的链接。参见reporting元素 --><reporting>......</reporting><!--参见dependencyManagement元素 --><dependencyManagement><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies></dependencyManagement><!--参见distributionManagement元素 --><distributionManagement>......</distributionManagement><!--参见properties元素 --><properties /></profile></profiles><!--模块(有时称作子项目) 被构建成项目的一部分。列出的每个模块元素是指向该模块的目录的相对路径 --><modules /><!--发现依赖和扩展的远程仓库列表。 --><repositories><!--包含需要连接到远程仓库的信息 --><repository><!--如何处理远程仓库里发布版本的下载 --><releases><!--true或者false表示该仓库是否为下载某种类型构件(发布版,快照版)开启。 --><enabled /><!--该元素指定更新发生的频率。Maven会比较本地POM和远程POM的时间戳。这里的选项是:always(一直),daily(默认,每日),interval:X(这里X是以分钟为单位的时间间隔),或者never(从不)。 --><updatePolicy /><!--当Maven验证构件校验文件失败时该怎么做:ignore(忽略),fail(失败),或者warn(警告)。 --><checksumPolicy /></releases><!-- 如何处理远程仓库里快照版本的下载。有了releases和snapshots这两组配置,POM就可以在每个单独的仓库中,为每种类型的构件采取不同的 策略。例如,可能有人会决定只为开发目的开启对快照版本下载的支持。参见repositories/repository/releases元素 --><snapshots><enabled /><updatePolicy /><checksumPolicy /></snapshots><!--远程仓库唯一标识符。可以用来匹配在settings.xml文件里配置的远程仓库 --><id>banseon-repository-proxy</id><!--远程仓库名称 --><name>banseon-repository-proxy</name><!--远程仓库URL,按protocol://hostname/path形式 --><url>http://192.168.1.169:9999/repository/</url><!-- 用于定位和排序构件的仓库布局类型-可以是default(默认)或者legacy(遗留)。Maven 2为其仓库提供了一个默认的布局;然 而,Maven 1.x有一种不同的布局。我们可以使用该元素指定布局是default(默认)还是legacy(遗留)。 --><layout>default</layout></repository></repositories><!--发现插件的远程仓库列表,这些插件用于构建和报表 --><pluginRepositories><!--包含需要连接到远程插件仓库的信息.参见repositories/repository元素 --><pluginRepository>......</pluginRepository></pluginRepositories><!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 --><dependencies><dependency><!--依赖的group ID --><groupId>org.apache.maven</groupId><!--依赖的artifact ID --><artifactId>maven-artifact</artifactId><!--依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。 --><version>3.8.1</version><!-- 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应, 尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在 plugin里定义新的类型。所以前面的类型的例子不完整。 --><type>jar</type><!-- 依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成 JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 --><classifier></classifier><!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 - compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath - runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得 - systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 --><scope>test</scope><!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 --><systemPath></systemPath><!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 --><exclusions><exclusion><artifactId>spring-core</artifactId><groupId>org.springframework</groupId></exclusion></exclusions><!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 --><optional>true</optional></dependency></dependencies><!--不赞成使用. 现在Maven忽略该元素. --><reports></reports><!--该元素描述使用报表插件产生报表的规范。当用户执行"mvn site",这些报表就会运行。 在页面导航栏能看到所有报表的链接。 --><reporting><!--true,则,网站不包括默认的报表。这包括"项目信息"菜单中的报表。 --><excludeDefaults /><!--所有产生的报表存放到哪里。默认值是${project.build.directory}/site。 --><outputDirectory /><!--使用的报表插件和他们的配置。 --><plugins><!--plugin元素包含描述报表插件需要的信息 --><plugin><!--报表插件在仓库里的group ID --><groupId /><!--报表插件在仓库里的artifact ID --><artifactId /><!--被使用的报表插件的版本(或版本范围) --><version /><!--任何配置是否被传播到子项目 --><inherited /><!--报表插件的配置 --><configuration /><!--一组报表的多重规范,每个规范可能有不同的配置。一个规范(报表集)对应一个执行目标 。例如,有1,2,3,4,5,6,7,8,9个报表。1,2,5构成A报表集,对应一个执行目标。2,5,8构成B报表集,对应另一个执行目标 --><reportSets><!--表示报表的一个集合,以及产生该集合的配置 --><reportSet><!--报表集合的唯一标识符,POM继承时用到 --><id /><!--产生报表集合时,被使用的报表的配置 --><configuration /><!--配置是否被继承到子POMs --><inherited /><!--这个集合里使用到哪些报表 --><reports /></reportSet></reportSets></plugin></plugins></reporting><!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。 --><dependencyManagement><dependencies><!--参见dependencies/dependency元素 --><dependency>......</dependency></dependencies></dependencyManagement><!--项目分发信息,在执行mvn deploy后表示要发布的位置。有了这些信息就可以把网站部署到远程服务器或者把构件部署到远程仓库。 --><distributionManagement><!--部署项目产生的构件到远程仓库需要的信息 --><repository><!--是分配给快照一个唯一的版本号(由时间戳和构建流水号)?还是每次都使用相同的版本号?参见repositories/repository元素 --><uniqueVersion /><id>banseon-maven2</id><name>banseon maven2</name><url>file://${basedir}/target/deploy</url><layout /></repository><!--构件的快照部署到哪里?如果没有配置该元素,默认部署到repository元素配置的仓库,参见distributionManagement/repository元素 --><snapshotRepository><uniqueVersion /><id>banseon-maven2</id><name>Banseon-maven2 Snapshot Repository</name><url>scp://svn.baidu.com/banseon:/usr/local/maven-snapshot</url><layout /></snapshotRepository><!--部署项目的网站需要的信息 --><site><!--部署位置的唯一标识符,用来匹配站点和settings.xml文件里的配置 --><id>banseon-site</id><!--部署位置的名称 --><name>business api website</name><!--部署位置的URL,按protocol://hostname/path形式 --><url>scp://svn.baidu.com/banseon:/var/www/localhost/banseon-web</url></site><!--项目下载页面的URL。如果没有该元素,用户应该参考主页。使用该元素的原因是:帮助定位那些不在仓库里的构件(由于license限制)。 --><downloadUrl /><!--如果构件有了新的group ID和artifact ID(构件移到了新的位置),这里列出构件的重定位信息。 --><relocation><!--构件新的group ID --><groupId /><!--构件新的artifact ID --><artifactId /><!--构件新的版本号 --><version /><!--显示给用户的,关于移动的额外信息,例如原因。 --><message /></relocation><!-- 给出该构件在远程仓库的状态。不得在本地项目中设置该元素,因为这是工具自动更新的。有效的值有:none(默认),converted(仓库管理员从 Maven 1 POM转换过来),partner(直接从伙伴Maven 2仓库同步过来),deployed(从Maven 2实例部 署),verified(被核实时正确的和最终的)。 --><status /></distributionManagement><!--以值替代名称,Properties可以在整个POM中使用,也可以作为触发条件(见settings.xml配置文件里activation元素的说明)。格式是<name>value</name>。 --><properties />
</project>
参考文献
- https://www.cnblogs.com/zjdxr-up/p/15225540.html
- https://blog.csdn.net/LHS__BRU_745/article/details/141927009
- https://blog.csdn.net/IT__learning/article/details/119823322
- https://juejin.cn/post/7123850000244686885#heading-23
- https://www.runoob.com/maven/maven-pom.html
相关文章:
【SpringBoot教程】搭建SpringBoot项目之编写pom.xml
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 👏今天毛毛张分享的内容主要是Maven 中 pom 文件🆕,涵盖基本概念、标签属性、配置等内容 文章目录 1.前言🥭2.项目基本…...
送给一年编程道路的自己
回望过去一年在编程道路上的成长与收获,是一个很有意义的过程。总结自己这一年的编程经历,不仅可以帮助你更清晰地了解自己的进步和不足,还能为未来的发展指引方向。以下是一些可能的收获,供你参考: 1. 技能提升 语言…...
libvirt学习
文章目录 libvirt 简介节点、Hypervisor和域libvirt 安装和配置libvirt的XML配置文件libvirt APIMain libvirt APIsError handlingSpecial specific APIs 建立到Hypervisor的连接libvirt API使用编译libvirt工具virshvirt-clonevirt-dfvirt-imagevirt-installvirt-topvirt-what…...
第二十五天 项目实践:图像分类
项目实践:图像分类 一、数据集准备 在图像分类任务中,数据集的选择和准备是至关重要的。一个高质量的数据集可以显著提高模型的训练效果和泛化能力。 数据集选择 ImageNet:这是一个广泛应用于训练卷积神经网络(CNN)模…...
学技术学英文:Tomcat的线程模型调优
导读: tomcat 线程调优关键需要理解下面这几个参数: 1. maxConnections 描述:指定服务器能够同时接受和处理的最大连接数。也就是说,服务器在任何时候都能处理的最大并发连接数。作用:限制服务器在任何给定时间点能…...
软考高项(二十)高级项目管理 ★重点集萃★
👑 个人主页 👑 :😜😜😜Fish_Vast😜😜😜 🐝 个人格言 🐝 :🧐🧐🧐说到做到,言出必行&am…...
Android 系统 `android.app.Fragment` 类的深度定制与常见问题解析
Android 系统 android.app.Fragment 类的深度定制与常见问题解析 目录 引言Fragment 概述Fragment 的生命周期Fragment 的系统层深度定制 4.1 Fragment 的创建与初始化4.2 Fragment 的布局与视图4.3 Fragment 的通信机制4.4 Fragment 的动画与过渡4.5 Fragment 的状态保存与恢…...
[Qt] Qt介绍 | 搭建SDK
目录 1. Qt 简介 什么是 Qt? 1.1 引入 1.2 GUI 1.3 Qt 介绍 2. Qt 发展史 3. Qt 支持的平台 4. Qt 版本信息 5. Qt 的优点 6. Qt 应用场景 7. Qt 成功案例 8. Qt 发展前景及就业分析 二. Qt 开发环境搭建 1. 开发工具概述 2.Qt SDK 安装 3.使用 1. …...
工作中常用Vim的命令
Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】 目录 0. ctags -R 1.认识 Vim的几种工作模式 2.高频使用命令 2.1 修改文件 2.2 关于行号 2.3 删除多行,删除部分 2.4 复制粘贴 2.5 光标移动 2.…...
【广州计算机学会、广州互联网协会联合主办 | ACM独立出版 | 高录用】第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)
第四届大数据、信息与计算机网络国际学术会议(BDICN 2025)定于2025年01月10-12日在中国广州举行。会议旨在为从事“大数据”、“计算机网络”与“信息”研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术,了解学术发…...
CSS系列(43)-- Anchor Positioning详解
前端技术探索系列:CSS Anchor Positioning详解 🎯 致读者:探索智能定位的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Anchor Positioning,这个强大的元素定位特性。 基础概念 🚀 锚点设…...
测试带宽上行方法
测试宽带上行速度的软件有多种,以下是一些常见的选择: Speedtest 平台支持:iOS、Android、Windows、MacOS等 特点:全球知名的网络测速软件,测试结果准确,支持多平台。用户可以选择最近的服务器进行测试&am…...
pugixml XML配置文件 的增删改查
<?xml version"1.0" encoding"UTF-8"?> <SXConfiguration><LocalSetting><VMSLoginServer><exitServerName>2</exitServerName><server><name>2</name><ip>152.131.121.131</ip><…...
自动化办公-将 Excel 的 Sheet 页拆分成单独的 Excel 文件
在日常的数据处理工作中,很多时候我们会遇到一个包含多个工作表(Sheet)的 Excel 文件,可能需要将每个工作表分别保存为独立的 Excel 文件。手动进行这种操作非常繁琐且易出错,但借助 Python 中的 pandas 库,…...
安全漏洞合集
一,X-Content-Type-Options响应头降低XSS攻击的风险 在Nginx配置文件中,可以使用add_header指令来添加自定义的HTTP响应头。 (通常是nginx.conf或站点特定的配置文件)添加以下指令来设置X-Content-Type-Options响应头:…...
python 堆排序(Heap Sort)
堆排序(Heap Sort) 堆排序是一种基于二叉堆数据结构的排序算法。它的基本思想是:将待排序的数组构建成一个最大堆(或最小堆),然后依次将堆顶元素(最大值或最小值)与堆的最后一个元素…...
word中文献引用[]符号的上下标格式修改
word中文献引用[]符号的上下标格式修改 百度网址 1、查找打开使用通配符,输入[[][0-9]{1,2}[]],即可匹配所有的字[1],[12]这些字符,然后鼠标点击替换为的空白处,再点击特殊格式–>“字体”,选中上标,最…...
地心地固坐标系
地心地固坐标系(ECEF, Earth-Centered, Earth-Fixed) 是一种三维坐标系,常用于表示地球表面或地球内部的点的位置。它的特点是坐标系的原点位于地球的质心,并且坐标轴固定在地球表面,并随地球自转而旋转。 ECEF 坐标系…...
3.CSS字体属性
3.1字体系列 CSS使用font-family属性定义文本的字体系列。 p{font-family:"微软雅黑"} div{font-family:Arial,"Microsoft Yahei",微软雅黑} 3.2字体大小 css使用font-size属性定义字体大小 p{ font-size:20px; } px(像素)大小是我们网页的最常用的单…...
使用PyTorch实现的二分类模型示例,综合了CNN、LSTM和Attention技术
以下是一个使用PyTorch实现的二分类模型示例,综合了CNN、LSTM和Attention技术,并尝试满足你提出的各项需求: 1. 数据预处理 扩充输入数据维度 假设你的原始数据是二维的(例如图像或序列数据),可以通过一些变换来扩充维度。例如,对于图像数据,可以进行翻转、旋转、缩放…...
[Wi-Fi]802.11u Vs hotspot2.0
介绍 802.11u 和 Hotspot 2.0 是两个相关但不同的技术标准,它们都旨在改善无线网络的用户体验,特别是在公共 Wi-Fi 环境中。 802.11u 定义:802.11u 是 IEEE 802.11 标准的一个扩展,专注于增强无线网络的互操作性和用户体验。功能…...
VisualStudio 2019 升级遇到的问题及解决
事件起因 今天计划想研究下.net core(后面版本直接称为 .net ),发现 .net sdk 5.0 最新版本安装不成功。解决之后,真是手欠,看着Visual Studio 2019 有更新了,就直接点击了,这时才发现问题大了。。。 安装…...
Java - 日志体系_Simple Logging Facade for Java (SLF4J)日志门面_SLF4J集成logback 及 原理分析
文章目录 Pre官网集成步骤POM依赖使用第一步:编写 Logback 的配置文件第二步:在代码中使用 SLF4J 原理分析1. 获取对应的 ILoggerFactory2. 根据 ILoggerFactory 获取 Logger 实例3. 日志记录过程 小结 Pre Java - 日志体系_Apache Commons Logging&…...
机器学习-方案设计题(在线医疗诊断项目)
在一个在线医疗诊断项目中,我们希望利用机器学习算法来预测患者是否患有某种疾病。请设计一个方案,包括数据收集、预处理、特征选择、模型选择和评估等步骤来完成这个任务。 1.数据收集数据来源 电子病历系统:收集患者的基本信息&…...
基于Sentinel的服务保护方案的三种方式(请求限流、线程隔离、服务熔断)超详细讲解
目录 1、三种方式介绍 1.1请求限流 1.2 线程隔离方案 1.3 服务熔断 2、基于sentinel实现 2.1 启动sentinel 2.2 基于springboot整合sentinel 2.2.1请求限流 2.2.2请求隔离 2.2.2.1 OpenFeign整合Sentinel 2.2.3 服务熔断 2.2.3.1 编写降级代码 2.2.3.2 服务熔断 1、…...
[开源]C++代码分享
一,声明 被人水平有限,开源只是为了分享。勿喷!!!还请大佬指点。 二,代码 // --------------------------------------------------------- 头文件 ----------------------------------------------- #in…...
vulnhub ica1
搭建靶机跟之前一样 不过这个要修改一下网卡;下面链接有教程 vulnhub jangow靶机-CSDN博客 1.扫描靶机IP arp-scan -l 192.168.47.135 2.信息收集 nmap -sS 192.168.47.135 访问网站 这个是一个web应用,框架是qdpm 9.2 在kali上搜索一下发现有两个漏洞&#x…...
Linux(Centos 7.6)基础命令/常用命令说明
1.目录相关命令 命令命令说明pwd用于显示/打印当前目录位置。ls/ll 列出当前目录下的文件或者目录,ll是ls -l的别名,ls仅显示名称,ll会显示详细的目录文件信息。 cd目录切换,常见用法有,cd /切换到根目录,…...
Solon 加入 GitCode:助力国产 Java 应用开发新飞跃
在当今数字化快速发展的时代,Java 应用开发框架不断演进,开发者们始终在寻找更快、更小、更简单的解决方案。近期,Solon 正式加入 GitCode,为广大 Java 开发者带来全新的开发体验,尤其是在国产应用开发进程中ÿ…...
Browser Use:AI智能体自动化操作浏览器的开源工具
Browser Use:AI智能体自动化操作浏览器的开源工具 Browser Use 简介1. 安装所需依赖2. 生成openai密钥3. 编写代码4. 运行代码5. 部署与优化5.1 部署AI代理5.2 优化与扩展总结Browser Use 简介 browser-use是一个Python库,它能够帮助我们将AI代理与浏览器自动化操作结合起来;…...
ArcGIS中怎么进行水文分析?(思路介绍)
最近有人咨询,ArcGIS中怎么进行水文分析,大致的说一下河网提取的思路哈 解决思路:dem填洼→计算水流方向→计算水流累积矩阵→形成河网 dem填洼 计算水流方向 计算水流累积矩阵 用栅格计算器,设阈值(自己多次尝试&…...
2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
概述 在国家政策的强力扶持下,2024年中国新能源汽车市场迎来了新的发展机遇。本文将基于《中国新能源汽车用车报告(2024年)》的数据,对新能源汽车的市场发展和用车趋势概述。 新能源汽车市场发展 政策推动:国家和地…...
KubeOS
title: 探秘 KubeOS:云原生操作系统的创新先锋 date: ‘2024-12-31’ category: blog tags: KubeOS云原生操作系统容器编排 sig: CloudNative archives: ‘2024-12’ author:way_back summary: KubeOS 作为一款专为云原生应用打造的操作系统,深度集成了…...
html文件通过script标签引入外部js文件,但没正确加载的原因
移动端H5应用,html文件通过script标签引入外部js文件,但没正确加载,在移动设备上难以排查。通过PC浏览器打开,发现js被阻止了:blocked:mixed-content。 原因在于: “blocked:mixed - content” 是浏览器的…...
[创业之路-225]:《华为闭环战略管理》-4-华为的商业智慧:在价值链中探索取舍之道与企业边界
目录 一、在价值链中探索取舍之道与企业边界 价值链的深刻洞察 取舍之道:有所为,有所不为 垂直整合与横向整合的平衡 企业边界与活动边界的界定 采购与外包的智慧运用 结语 二、企业外部价值流:上游、中游、下游、终端 上游…...
让 Agent 具备语音交互能力:技术突破与应用前景(16/30)
让 Agent 具备语音交互能力:技术突破与应用前景 一、引言 在当今数字化时代,人机交互方式正经历着深刻的变革。从早期的命令行界面到图形用户界面,再到如今日益普及的语音交互,人们对于与机器沟通的便捷性和自然性有了更高的追求…...
代理IP助力VR行业革新,小派科技引领技术潮流
随着VR行业的新一轮技术升级,更高分辨率、更宽视场角以及更舒适的佩戴体验已成为各大厂商竞争的核心。在这一浪潮中,小派科技凭借其最新发布的视网膜级VR头显——Crystal Super,成功吸引了市场的目光。而在这场技术革新的背后,代理…...
C#Halcon图像处理畸变校正之曲面校正
图像校正场景一般有两种,其一由镜头本身或安装角度引起,其二是被拍摄物品本身引起 理论处理流程 我的处理处理流程 1,加载网格校正图像 2,确定符合条件的网格区域 3,显示网格鞍点 4,显示网格线 5ÿ…...
JSON结构快捷转XML结构API集成指南
JSON结构快捷转XML结构API集成指南 引言 在当今的软件开发世界中,数据交换格式的选择对于系统的互操作性和效率至关重要。JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种广泛使用的数据表…...
Coroutine 基础四 —— CoroutineScope 与 CoroutineContext
1、定位 CoroutineContext,协程上下文。协程用到的所有信息都属于协程上下文,根据功能不同,划分成了不同的分类。管理流程用的是 Job,管理线程用的是 ContinuationInterceptor,等等。 CoroutineScope 的定位有两点&a…...
科技云报到:洞见2025年科技潮流,技术大融合开启“智算时代”
科技云报到原创。 随着2024年逐渐接近尾声,人们不禁开始展望即将到来的2025年。这一年,被众多科技界人士视为开启新纪元的关键节点。站在新的起点上,我们将亲眼目睹未来科技如何改变我们的世界。从人工智能到量子计算,从基因编辑…...
MySQL有哪些锁?
1.MySQL有哪些锁? 全局锁表级锁 表锁元数据锁意向锁 行级锁 记录锁间隙锁临键锁临时意向锁 我了解的是MySQL的锁可以分为全局锁、表级锁、行级锁。 我比较熟悉的是表级锁和行级锁,如果我们对表结构进行修改时,MySQL就会对这个表结构加一个…...
通过交叉实现数据触底分页效果new IntersectionObserver()(html、react、vue2、vue3)中使用
react中用法 import React, { useState, useEffect, useRef } from react;const InfiniteScroll () > {const [items, setItems] useState([]);const [loading, setLoading] useState(false);const [page, setPage] useState(1);const loaderRef useRef(null);// 模拟…...
DeepSeek-V3-Base 模型技术解析
DeepSeek-V3-Base 模型技术解析 目录 引言DeepSeek-V3-Base 模型概述模型架构 3.1 Transformer 基础3.2 DeepSeek-V3-Base 的改进 训练过程 4.1 数据预处理4.2 训练策略4.3 优化器与学习率调度 模型性能评估 5.1 基准测试5.2 实际应用案例 模型优化与调参 6.1 超参数调优6.2 …...
Qt5 中 QGroupBox 标题下沉问题解决
我们设置了QGroupBox 样式之后,发现标题下沉了,那么如何解决呢? QGroupBox {font: 12pt "微软雅黑";color:white;border:1px solid white;border-radius:6px; } 解决后的效果 下面是解决方法: QGroupBox {font: 12pt "微软雅黑";color:white;bo…...
Linux Debian安装ClamAV和命令行扫描病毒方法,以及用Linux Shell编写了一个批量扫描病毒的脚本
ClamAV是一个开源的跨平台病毒扫描引擎,用于检测恶意软件、病毒、木马等安全威胁。 一、Linux Debian安装ClamAV 在Linux Debian系统上安装ClamAV,你可以按照以下步骤进行: 更新软件包列表: 打开终端并更新你的软件包列表&#…...
数据结构与算法之动态规划: LeetCode 53. 最大子数组和 (Ts版)
最大子数组和 https://leetcode.cn/problems/maximum-subarray/description/ 描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和子数组是数组中的一个连续部分 示例 1 …...
活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用
课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动,了解如何使用包括 GPT 在内的强大的…...
Python爬虫(二)- Requests 高级使用教程
文章目录 前言一、Session 对象1. 简介2. 跨请求保持 Cookie3. 设置缺省数据4. 方法级别参数不被跨请求保持5. 会话作为上下文管理器6. 移除字典参数中的值 二、请求与响应1. 请求与响应对象1.1 获取响应头信息1.2 获取发送到服务器的请求头信息 三、SSL 证书验证1. 忽略 SSL 证…...
协议幻变者:DeviceNet转ModbusTCP网关开启机器手臂智能新纪元
技术背景DeviceNet是一种广泛应用于工业自动化领域的现场总线标准,它能够实现控制器与现场设备之间的高效通信,常用于连接各种传感器、执行器以及其他工业设备,如机器人、电机驱动器等,具有实时性强、可靠性高的特点。而ModbusTCP…...