Maven pom文件分析

文章目录

  • project
    • 子元素分类
      • 项目基础信息
        • - parent
        • - modelVersion
        • - groupId
        • - artifactId
        • - name
        • - version
        • - packaging
        • - description
        • - url
        • - inceptionYear
      • 组织与许可信息
        • - organization
        • - licenses
        • - developers
        • - contributors
        • - mailingLists
      • 自定义属性信息
        • - properties
      • 模块配置
        • - modules
      • 项目依赖配置
        • - dependencyManagement
        • - dependencies
      • Maven依赖仓库信息
        • - repositories
      • Maven插件仓库信息
        • - pluginRepositories
      • 构建配置
        • - build
      • 版本控制信息
        • - scm
      • 分发信息
        • - distributionManagement
      • 报告配置
        • - reporting
      • 环境配置
        • - profiles
          • profile


project

Maven 是一个强大的构建和依赖管理工具,pom.xml 文件是 Maven 项目的核心配置文件,用于定义项目的构建、依赖关系、插件、目标等。它是 Maven 构建过程的基础,所有的构建配置都需要在该文件中进行定义。

project元素代表整个Maven项目,是POM文件中最外层的元素。

一个完整的 pom.xml 文件大致包括以下几个部分:

  • 项目基础信息
  • 组织与许可信息
  • 自定义属性信息
  • 模块配置
  • 项目依赖配置
  • Maven依赖仓库信息
  • Maven插件仓库信息
  • 构建配置
  • 版本控制信息
  • 分发信息
  • 报告配置
  • 环境配置

子元素分类

项目基础信息

元素名称描述
parent指定父POM文件的坐标,继承父项目的配置
modelVersionPOM模型的版本,通常为4.0.0
groupId唯一标识项目的组织或公司名称
artifactId唯一标识项目的模块名
name项目的名称
version项目的版本号
packaging项目的打包类型,如jar、war、pom等
description项目的简短描述
url项目主页的URL地址
inceptionYear项目开始年份
- parent

parent元素用于定义当前项目的父项目信息,即当前项目所在的模块继承自哪个模块。可被继承的信息包括但不限于:dependencies、plugins、build、reporting等。常用于项目中许多模块都存在共性配置的情况。通过parent元素从父级POM文件继承属性,可以使子模块重用父级组件中定义的配置和元素等,同时方便子模块修改和覆盖继承的内容。

  • 一个完整的parent元素应该至少包含两个必需的子元素:groupId和artifactId,分别表示父项目的groupId和artifactId。
  • 另外,还可以使用version元素指定父项目的版本号。如果省略了版本,则Maven会自动搜索本地仓库和远程仓库以查找最新版本。

Maven先查找本地仓库,然后去中央仓库下载指定的父级artifactId和groupId的POM文件,通过继承父POM文件,可以避免在子模块中重复定义相同的属性。

属性:

  • groupId:父项目的GroupId。
  • artifactId:父项目的ArtifactId。
  • version:定义继承自父级的版本号。
  • relativePath:为确定父级POM的位置提供一个可选的相对路径。当该元素未定义时,默认从本地仓库和Maven中央仓库搜索。

继承父级的限制:

  • 发布你自己的项目时,使用继承层次结构作为中心库不是一个好的设计选择。尽管这样做会更方便,但它强制了许多限制。
  • 如果依赖于某个库,并且发现该库没有定义你需要的一些配置信息,那么你可以通过独立定义一个父级(调整相应的部分)点解决问题。
  • 如果某个库的父级中的管理版本并不符合最新标准,而你又无法通知该项目的作者更新其父级,在这种情况下,你也可以独立地定义一个POM文件并继承自期望的目标。

示例:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/>
</parent>
- modelVersion

modelVersion元素指定当前POM文件的版本号,用于标识当前POM使用的Maven模型版本。如果该元素未被显式定义,并且当前POM文件是基于4.0.0或更高版本创建的,那么它将默认采用4.0.0版本。

modelVersion只能使用Maven支持的版本号。一旦确定了版本号,就应该始终使用相同的版本号,除非你有很好的理由来升级它。另外,如果你想要向后兼容其他版本的POM文件,可以保留旧版本并添加新属性,而不是更新现有元素。

示例:

<modelVersion>4.0.0</modelVersion>
- groupId

groupId 元素定义了该项目所属组织或公司的唯一标识符。它是 Maven 项目的全局唯一 ID,用于在仓库中标识项目和依赖项。

通常情况下,groupId 建议以组织或公司的域名倒置为前缀,这样做可避免命名空间冲突。

  • groupId 的值不应包含空格或其他特殊字符,建议使用小写字母和连字符作为单词之间的分隔符。
  • groupId 元素应当在 POM 文件中显式指定,并且一旦指定,在整个项目中不应发生更改,否则可能会引起各种不同的问题。
  • maven 对于 groupId 是区分大小写的。因此,在同一个项目的不同模块中,如果将 groupId 写成了不同的大小写形式,可能会导致依赖模块的构建失败。因此,建议在整个项目中保持 groupId 的一致性。

示例:

<groupId>org.xxok.boot</groupId>
- artifactId

artifactId 元素是指当前Maven项目的唯一标识符,用于表示当前构建的项目。

artifactId 元素同样可以让其他依赖引用到它作为依赖的项目POM文件中。

假如项目B需要依赖A项目的jar包,则需要配置A项目的坐标(groupId、artifactId、version),Maven 就会检索并下载 A 项目的 jar 包来满足 B 项目的依赖关系。

示例:

<artifactId>my-project</artifactId>
- name

name元素定义项目名称。该元素是一个可选项,但强烈建议在每个POM中都使用它来描述当前项目,以便更容易地理解和识别项目的作用。在Maven生命周期、插件等其他各个地方,也会经常使用到该属性。

需要注意的是,在IDE或其他Maven工具中使用时,name元素可以帮助用户识别并区分不同的模块,以及帮助用户快速找到文档或其他相关信息。

示例:

<name>My App Name</name>
- version

version元素表示当前项目的版本号,它用于唯一标识项目和管理依赖项。

在Maven中,通常存在三种类型的版本号:

  • SNAPSHOT:开发版本,表示还处于开发过程中,会随着开发的进行不断更新;
  • RELEASE:稳定版本,表示已经完成开发工作,可以正式发布使用;
  • 其他自定义版本号:根据具体需要自行指定。

version元素可以定义在以下几个位置:

  • 外部父POM文件中的version元素:如果您正在使用一个外部的父POM来管理项目,那么版本号可以从那里定义。
  • 项目自身的version元素:如果您没有使用一个外部的父POM,那么您可以在项目自身的pom.xml文件中定义版本号。
  • 依赖项中的version元素:在项目的依赖项中也可以指定版本号。优先级最高的是直接在依赖项中指定的版本号,其次是继承自父POM文件、再次是项目自身定义的版本号。

示例:

<version>1.0-SNAPSHOT</version>
- packaging

packaging元素指定了项目打包的类型。

packaging的可选值:

  • jar:以JAR形式打包,默认值
  • war:以Web应用程序形式打包
  • ear:以Enterprise应用程序形式打包
  • pom:仅作为依赖项存在,不生成输出文件

Maven将按照packaging元素指定的类型对项目进行打包,并将输出内容保存到目标目录中(默认为target目录)。

- description

description元素用于描述该项目的简短说明。description元素并不影响项目的构建和部署过程,只是作为一个文本描述的附加信息存在。

通常情况下,description元素紧随groupId、artifactId和version元素之后,位于pom.xml文件的顶部。

示例:

<description>This project description</description>
- url

url元素用于指定项目的URL地址。 该元素通常用于指定项目主页、文档位置或者源代码仓库的地址等。

示例:

<url>https://github.com/username/projectname</url>
- inceptionYear

inceptionYear元素代表了项目的创建年份。

示例:

<inceptionYear>2010</inceptionYear>

组织与许可信息

元素名称描述
organization项目的组织信息,如公司或开发者团队
licenses项目所使用的开源许可证信息
developers项目开发人员的列表
contributors提供贡献但未参与开发的人员列表
mailingLists项目的邮件讨论列表
- organization

organization元素代表了项目所属的组织信息。

这个元素是可选的,主要用作标识项目所属机构的相关信息,例如组织名称、组织URL等。如果指定了organization元素,Maven会使用该信息生成默认的开发者和组织元素。

示例:

<organization><name>ACME Corporation</name><url>http://www.acme.com</url>
</organization>
- licenses

licenses元素用于指定项目相关的许可证信息。

该元素通常包含多个license元素,每个license元素对应一个许可证信息。

示例:

<licenses><license><name>The Apache Software License, Version 2.0</name><url>http://www.apache.org/licenses/LICENSE-2.0.txt</url><distribution>repo</distribution></license>...
</licenses>
- developers

developers元素用于列出项目的开发者和其联系方式。

通常情况下,developers元素紧随description元素之后,位于pom.xml文件的顶部。developers元素提供的信息不会直接影响项目的构建和部署过程,只是作为一个文本描述的附加信息存在。

示例:

<developers><developer><id>john_doe</id><name>John Doe</name><email>john.doe@example.com</email></developer><developer><id>jane_doe</id><name>Jane Doe</name><email>jane.doe@example.com</email></developer>
</developers>
- contributors

contributors元素可以用来列举该项目的贡献者列表。元素可以包含多个contributor元素。

每个contributor元素应该至少包含name元素用于指定贡献者的姓名或昵称,可选地,还可以包含email、url和organization等子元素以提供更详细的贡献者信息。

示例:

<contributors><contributor><name>John Doe</name><email>johndoe@example.com</email><url>http://example.com</url><organization>Acme Organization</organization><organizationUrl>http://acme.org</organizationUrl></contributor><contributor><name>Jane Smith</name></contributor></contributors>
- mailingLists

mailingLists元素用于指定项目相关的邮件列表信息。该元素通常包含多个mailingList元素,每个mailingList元素对应一个邮件列表信息。

通常情况下,mailingLists元素紧随developers元素之后,位于pom.xml文件的顶部。mailingLists元素提供的信息不会直接影响项目的构建和部署过程,只是作为一个文本描述的附加信息存在。

示例:

<mailingLists><mailingList><name>Developers List</name><subscribe>dev-subscribe@example.com</subscribe><unsubscribe>dev-unsubscribe@example.com</unsubscribe><post>dev-post@example.com</post><archive>http://example.com/mailman/private/dev-list/</archive></mailingList>
</mailingLists>

自定义属性信息

元素名称描述
properties定义项目使用的自定义属性,供整个项目使用
- properties

properties元素用于定义一些可以在该POM及其子项目中重复引用的常量值。该元素通常包含各种 key-value对,其中key代表属性的名称,value代表属性所表示的常量值。

需要注意的是,properties元素的定义仅仅是对属性进行了声明或赋值,并没有定义这些属性具体用于什么目的。确切的属性用途,要依据实际情况而定。

示例:

<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

除此之外,Maven还有很多内置的属性。

Maven内置属性:

属性名描述
${project.version}当前项目的版本号
${project.groupId}当前项目的组 ID
${project.artifactId}当前项目的 artifactId
${project.name}当前项目的名称
${project.description}当前项目的描述
${project.url}当前项目的网址(主页)
${project.build.directory}构建输出目录,默认是 target
${project.build.outputDirectory}编译后的 .class 文件输出目录
${project.build.finalName}构建后生成的最终文件名(通常是 <artifactId>-<version>)
${project.build.sourceDirectory}源代码目录,默认是 src/main/java
${project.build.testSourceDirectory}测试代码目录,默认是 src/test/java
${maven.version}当前使用的 Maven 版本号
${maven.home}Maven 的安装目录
${basedir}项目的根目录路径,通常与 pom.xml 文件所在目录相同
${user.home}当前用户的主目录路径
${env.<variable>}获取系统环境变量的值,例如 ${env.PATH} 获取 PATH 环境变量
${project.build.plugins}当前项目的构建插件
${project.build.pluginManagement}项目中插件管理部分
${session}当前 Maven 构建会话对象
${settings.localRepository}本地 Maven 仓库的路径
${settings.userSettingsFile}用户的 Maven 配置文件路径(~/.m2/settings.xml)
${settings.globalSettingsFile}全局 Maven 配置文件路径
${project.basedir}项目的根目录路径
${project.compileSourceRoots}编译源文件的根目录列表
${project.testCompileSourceRoots}测试源文件的根目录列表
${project.testOutputDirectory}测试编译输出目录
${project.reporting.outputDirectory}项目报告输出目录(默认 target/site)
${build.timestamp}构建时间戳,表示构建时间(如 yyyyMMdd-HHmm 格式)
${project.reporting.pluginGroups}报告插件的组 ID
${project.build.extensions}项目的构建扩展
${project.distModule}项目的分发模块信息
${project.testPlugin}项目的测试插件信息
${project.version}当前项目的版本号
${project.artifactId}当前项目的 artifactId
${project.parent.version}父项目的版本号(如果存在父项目的话)
${project.parent.groupId}父项目的 Group ID
${project.parent.artifactId}父项目的 Artifact ID
${project.parent.relativePath}父项目的 pom.xml 相对路径

模块配置

元素名称描述
modules列出项目包含的子模块列表
- modules

modules元素用于指定一个多模块项目的子模块列表。可以包含多个module元素。

每个module元素应该只包含一个子元素:一个目录名或相对路径(默认相对于父项目的pom.xml文件)。当使用mvn命令执行某个多模块项目时,Maven会根据modules元素列出的子模块进行构建。

示例:

<modules><module>module-a</module><module>module-b</module><module>module-c</module></modules>

项目依赖配置

元素名称描述
dependencyManagement统一管理项目依赖版本,避免版本冲突
dependencies项目运行所需的外部依赖库
- dependencyManagement

dependencyManagement元素提供了一种集中式管理依赖项版本号的机制。该元素包含各种子元素,用于指定项目使用的各种依赖项及其版本。

示例:

<dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!-- ... --></dependencies>
</dependencyManagement>

需要注意的是,dependencyManagement元素中的依赖项声明并没有直接使用在项目中,他只是定义了版本和相关配置信息,以供项目的其他模块继承使用。

- dependencies

dependencies元素用于列出项目所依赖的外部库,也就是所谓的“依赖项”。该元素可以包含多个dependency元素。

dependency元素:
一个完整的dependency元素应该至少包括groupId、artifactId和version三个必需的子元素。当使用Maven构建项目时,它会根据这些元素自动从仓库下载对应的依赖包到本地存储库中。
dependency的子元素:

  • groupId:依赖项所属的组织或公司的唯一标识符。
  • artifactId:依赖项的名称,通常由项目名和模块名组成。
  • version:依赖项的版本号。
  • scope:依赖项的作用范围,可选值包括compile、provided、runtime、test等。
  • type:依赖项的类型,默认为jar。
  • classifier:用于区分同一artifactId和version下不同的构建版本。
  • optional:指定是否将该依赖项传递给项目的依赖项。
  • exclusions:用于排除掉某个依赖项的传递依赖项。

示例:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.9.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency></dependencies>

Maven依赖仓库信息

元素名称描述
repositories定义项目依赖的Maven仓库
- repositories

repositories元素用于定义该项目依赖库(dependency)从哪里下载,以及下载顺序。该元素主要包含了一组子元素,用于指定各种资源库。该元素可以包含多个repository元素。

repository元素:
repository元素用于指定Maven项目的远程仓库信息。repository元素应该至少包含一个id、name和url子元素。

  • id:仓库ID,用于唯一标识该仓库。
  • name:仓库名称,用于描述该仓库。
  • url:仓库URL,指向存储依赖项的远程仓库地址。

多数情况下,Maven会自动下载所需的依赖项,因为它能够从本地仓库中找到这些依赖项。当然,如果某个依赖项需要从远程仓库下载,那么就需要先配置好这些仓库。

示例:

<repositories><repository><id>central</id><url>https://repo1.maven.org/maven2/</url></repository><repository><id>jboss</id><name>JBoss Repository</name><url>https://repository.jboss.org/nexus/content/groups/public/</url></repository><repository><id>snapshots</id><name>Maven Snapshots</name><url>https://oss.sonatype.org/content/repositories/snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository>
</repositories>

使用maven中央仓库作为主要软件库,并添加了其他两个外部仓库

  • 第一个repository元素指定了默认的中央仓库。
  • 第二个repository元素是一个JBoss库,它只有元数据(pom),将无法下载包。
  • 第三个repository元素是一个Sonatype的快照库,其中配置了禁用发布版本和启用快照版本支持。

需要注意的是,不必在每个pom.xml文件中都重新定义库。实际上你可以在Maven settings.xml文件中定义多个公共库(central、jcenter等), 项目会继承这些已定义的库。

Maven插件仓库信息

元素名称描述
pluginRepositories定义Maven插件的仓库
- pluginRepositories

pluginRepositories元素用于定义该项目使用到的插件库(plugins)从哪里下载以及下载顺序。

和repositories元素非常相似,pluginRepositories主要包含了一组子元素,用于指定各种插件资源库。该元素可以包含多个pluginRepository元素。

pluginRepository元素:
pluginRepository元素与repository 元素中的功能类似,pluginRepository 元素用于指定Maven插件库的位置。pluginRepository 元素可以包含以下子元素:

  • id: 插件仓库ID,用于唯一标识该仓库。
  • name: 插件仓库名称,用于描述该仓库。
  • url: 插件仓库URL,指向存储插件的远程仓库地址。

示例:

<pluginRepositories><pluginRepository><id>central</id><url>https://repo1.maven.org/maven2/</url></pluginRepository><pluginRepository><id>jboss</id><name>JBoss Repository</name><url>https://repository.jboss.org/nexus/content/groups/public/</url></pluginRepository><pluginRepository><id>snapshots</id><name>Maven Snapshots</name><url>https://oss.sonatype.org/content/repositories/snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository>
</pluginRepositories>

使用maven中央仓库作为主要插件库,并添加了外部插件库

  • 第一个pluginRepository元素指定了默认的中央仓库。
  • 第二个pluginRepository元素是一个JBoss库,它只有元数据(pom),将无法下载包。
  • 第三个pluginRepository元素是一个Sonatype的快照库,其中配置了禁用发布版本和启用快照版本支持。

需要注意的是,同样地,不必在每个pom.xml文件中都需要重新定义插件库。你可以在Maven settings.xml文件中定义多个公共库(central、jcenter等), 项目会继承这些已定义的库。

构建配置

元素名称描述
build定义项目的构建过程,包括插件和生命周期
- build

build元素用于配置一个项目的构建选项,主要包括了项目所依赖的插件、资源文件等构建相关信息。可以包含多个子元素,如plugins、resources等。

元素描述默认值
sourceDirectory指定 Java 源代码的目录。src/main/java
scriptSourceDirectory指定脚本文件(如 Groovy)源代码的目录。
testSourceDirectory指定测试源代码的目录。src/test/java
outputDirectory指定编译后的 .class 文件的输出目录。target/classes
testOutputDirectory指定测试编译后的 .class 文件的输出目录。target/test-classes
finalName指定最终构建文件的名称(不带扩展名)。${project.artifactId}-${project.version}
resources指定资源文件目录,资源文件会被复制到构建输出目录。
plugins配置构建插件,用于处理具体的构建任务。
pluginManagement集中管理插件的版本和配置。插件配置在此元素下不会直接生效,需在 plugins 元素中引用。
extensions指定 Maven 构建过程中的扩展(如插件扩展)。
pluginRepositories指定插件仓库的位置。
directory为 Maven 指定其他目录,如编译文件夹、测试文件夹等。
  • plugins:插件相关配置,指定插件及插件内容,例如:

    • plugin:指定具体插件名称。
      • groupId:插件所在组 ID
      • artifactId:插件 ID
      • version:插件版本号
      • executions:插件执行的配置,定义插件的生命周期绑定。
      • configuration:指定插件的具体参数和设置。
  • resources:用于指定项目中使用的资源文件,通常包括属性文件、XML 配置文件和 Spring 配置文件等。

    • resource:表示项目主要的资源路径。
      • directory:资源文件所在的目录路径。
      • includes:包含的资源文件路径模式,支持通配符。
      • excludes:排除的资源文件路径模式,支持通配符。
      • filtering:是否对资源文件进行过滤(如替换 ${} 占位符)。默认为 false。
      • targetPath:指定资源文件在构建输出目录中的目标路径。
      • encoding:资源文件的编码方式。默认为平台相关编码。
      • items:指定一个或多个资源项,进一步定义资源文件的行为。
      • nonFiltered:指定不进行过滤的资源文件路径模式。

示例:

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes></resource></resources></build>
  • 定义了两个插件:maven-compiler-plugin和spring-boot-maven-plugin,并配置了maven-compiler-plugin的源代码和目标代码版本为1.8。
  • 指定了使用src/main/resources目录下的.properties和.xml文件作为项目资源文件。

版本控制信息

元素名称描述
scm配置源代码管理系统(如Git、SVN)的信息
- scm

scm元素用于定义一个项目的源代码管理(SCM)信息,以便Maven可以从这个仓库中检索和构建代码。

一个完整的scm元素至少应该包括两个必需的子元素:connection和developerConnection,它们分别表示开发者与版本控制库之间的连接方式。另外,还可以使用url、tag、branch等其他子元素进一步指定SCM信息。

scm子元素:

  • connection:源代码仓库的连接 URL,用于从 SCM 获取元数据。
  • developerConnection:开发者用来推送代码的连接 URL,通常是私有的。
  • url:公开的源代码仓库访问 URL,通常用于查看源代码。
  • tag:源代码仓库中的标签,标识一个特定的版本。
  • branch:源代码仓库中的分支名称,表示开发或发布的分支。
  • commit:指定源代码的某个特定提交(哈希值),确保构建时使用正确的代码。
  • checkoutDirectory:源码检出的目录路径,默认是项目根目录,指定了检出源代码的具体路径。

SCM的用途:

  • 通过指定源代码的版本控制系统信息,使得其他开发者能够更轻松地将项目检出到本地环境中,并参与项目的开发。
  • 在项目构建期间,Maven可以利用SCM配置来自动从版本控制系统中获取源代码,并构建项目。
  • 通过指定版本控制系统的分支或标签信息,Maven可以构建特定版本的项目,从而方便项目的发布和部署。
  • SCM配置还可以用于指定版本控制系统的URL,以便Maven可以自动地为项目生成构建信息和版本号等元数据,这些信息对于跟踪和管理项目非常重要。

示例:

<scm><connection>scm:git:git://github.com/user/repo.git</connection><developerConnection>scm:git:ssh://github.com/user/repo.git</developerConnection><url>https://github.com/user/repo/tree/master</url><tag>1.0.0</tag>
</scm>

上述代码中,定义了一个基于Git的源代码管理信息。

其中,connection元素通过https协议指定了与代码库的连接方式,而developerConnection元素则通过ssh协议进行连接。除此之外,还指定了代码库的URL(即主页地址)以及打标签时使用的默认tag。

分发信息

元素名称描述
distributionManagement配置项目的分发方式,如发布到Maven仓库或其他服务
- distributionManagement

distributionManagement元素用于管理您构建后部署(或发布)到哪里。该元素中包含了各种子元素,用于指定项目的发行版本部署(或发布)相关配置。

distributionManagement元素只是用于管理项目的分发版本部署(或发布)的相关配置,而不会影响项目的编译和构建过程。

示例:

<distributionManagement><repository><id>internal.repo</id><name>Internal Repository</name><url>file:///usr/local/repo</url></repository>
</distributionManagement>

在上面的示例中,我们声明了一个名为"Internal Repository"的仓库,其地址为本地文件系统上的/usr/local/repo目录。一旦定义了这个仓库之后,可以使用命令 mvn deploy 将此存储库作为项目的部署目标,在构建过程中上传并部署项目至该存储库。

报告配置

元素名称描述
reporting配置如何生成项目报告,如代码质量报告、测试报告等
- reporting

reporting元素用于为项目生成一些报告,例如代码覆盖率、静态代码分析结果等。该元素可以包含各种子元素,来配置需要生成哪些报告,以及如何生成这些报告。

reporting元素只是用于配置Maven生成报告的相关信息,它不影响项目的编译和构建过程,并且生成的报告通常是基于已经构建好的代码来进行分析处理的。

示例:

<reporting><plugins><plugin><groupId>org.jacoco</groupId><artifactId>jacoco-maven-plugin</artifactId><version>0.8.6</version></plugin><plugin><groupId>org.sonarsource.scanner.maven</groupId><artifactId>sonar-maven-plugin</artifactId><version>3.9.0.2155</version></plugin><!-- ... --></plugins>
</reporting>

在上面的示例中,我们定义了两个插件,分别是Jacoco和SonarQube。通过使用这些插件,Maven可以生成有关代码覆盖率、静态代码分析的报告。其他可供选择的报告插件包括FindBugs、Checkstyle、Javadoc等。

环境配置

元素名称描述
profiles定义不同构建环境下的配置文件,可根据需求启用不同的构建配置
- profiles

profiles元素用于定义一个或多个构建“配置”(profile),这些配置与通常的构建选项不同,能够根据不同的环境、需求等情况进行灵活地管理不同构建环境下的项目配置和依赖项。

profile

一个profile元素可以包含多个子元素,如id、activation、properties、dependencies等,每个子元素又可以包含具体的配置信息。

  • id(名称):必需,用于给对应的构建配置指定一个名称。
  • activation(激活条件):用于指定触发profile的条件,如:系统属性、JDK版本、Maven版本、操作系统等。
  • properties(属性):定义profile中使用的属性值。这些属性可以被其他元素引用,以便在不同的环境下使用不同的值。
  • dependencies(依赖):指定与profile相关的依赖项。这些依赖项仅在激活profile时才会被添加到项目中。
  • dependencyManagement(依赖管理):类似于dependencies,但是它只定义依赖版本号,而不引入实际依赖。
  • build(构建):用于定义与profile相关的构建设置,例如编译器版本、打包方式等。
  • reporting(报告):指定生成报告时使用的插件和配置。
  • modules(模块):定义特定的modules,这些modules仅在激活profile时才会被构建。
  • repositories(仓库):指定与profile相关的仓库配置。

在POM文件中定义了Profile元素之后,可以根据所需的构建环境激活或禁用它们。

要激活Profile元素,可以使用命令行选项、环境变量或其他Maven插件来指定所需的Profile。例如,使用“-P production”命令可以激活包含“production”Profile的POM文件。

示例:

<profiles><profile><id>development</id><activation><activeByDefault>true</activeByDefault></activation><properties><jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName></properties><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency></dependencies></profile></profiles>

上述代码中,定义了一个名为development的构建配置,启动该配置的条件为默认激活(activeByDefault)。该配置使用MySQL驱动程序作为依赖项,并设置了jdbc.driverClassName属性值,以便在开发环境中使用正确的数据库连接驱动。

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

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

相关文章

深度优先搜索(DFS)与回溯法:从全排列到子集问题的决策树与剪枝优化

文章目录 前言&#x1f384;一、全排列✨核心思路✨实现步骤✨代码✨时间和空间复杂度&#x1f381;1. 时间复杂度&#x1f381;2. 空间复杂度 &#x1f384;二、子集✨解法一&#xff1a;逐位置决策法&#x1f381;步骤分析&#x1f381;运行示例&#x1f381;代码 ✨解法二&a…

egg初始搭建

前言 egg.js 是由阿里开源的面向企业级开发的 Node.js 服务端框架&#xff0c;它的底层是由 Koa2 搭建。 Github&#xff1a;https://github.com/eggjs/egg&#xff0c;目前 14.8K Star&#xff0c;egg 很适合做中台。 安装 首先&#xff0c;你要 确保 Node 已经配置环境变量…

Python中的all/any函数和操作符and/or

操作符直观易读适用简单逻辑&#xff0c;函数紧凑方便适宜多条件处理。 (笔记模板由python脚本于2024年12月12日 22:19:10创建&#xff0c;本篇笔记适合有一定编程基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff…

论文学习——多种变化环境下基于多种群进化的动态约束多目标优化

论文题目&#xff1a;Multipopulation Evolution-Based Dynamic Constrained Multiobjective Optimization Under Diverse Changing Environments 多种变化环境下基于多种群进化的动态约束多目标优化&#xff08;Qingda Chen , Member, IEEE, Jinliang Ding , Senior Member, …

2025年山东省职业院校技能大赛“信息安全管理与评估”(山东省) 任务书

2025年山东省职业院校技能大赛“信息安全管理与评估”(山东省 任务书 模块一网络平台搭建与设备安全防护任务1&#xff1a;网络平台搭建 &#xff08;50分&#xff09;任务2&#xff1a;网络安全设备配置与防护&#xff08;250分&#xff09; 模块二网络安全事件响应、数字取证…

国标GB28181-2022平台EasyGBS如何实现无插件也能让RTSP在网页端播放?

在流媒体技术日新月异的今天&#xff0c;实时流传输协议&#xff08;RTSP&#xff09;作为视频监控、在线直播等领域的重要支撑&#xff0c;正经历着前所未有的变革。曾经&#xff0c;RTSP在网页端播放面临着诸多挑战&#xff0c;如浏览器兼容性问题、安全性考量以及视频流处理…

EXCEL 关于plot 折线图--频度折线图的一些细节

目录 0 折线图有很多 1 频度折线图 1.1 直接用原始数据做的频度折线图 2 将原始数据生成数据透视表 3 这样可以做出了&#xff0c;频度plot 4 做按某字段汇总&#xff0c;成为累计plot分布 5 修改上面显示效果&#xff0c;做成百分比累计plot频度分布 0 折线图有很多 这…

MATLAB四种逻辑运算

MATLAB中的四种逻辑运算包括逻辑与用&或 a n d 表示 ( 全为 1 时才为 1 &#xff0c;否则为 0 ) and表示(全为1时才为1&#xff0c;否则为0) and表示(全为1时才为1&#xff0c;否则为0)&#xff0c;逻辑或用|或 o r 表示 ( 有 1 就为 1 &#xff0c;都为 0 才为 0 ) or表示…

jmeter CLI Mode 传参实现动态设置用户数

一.需求 CLI 运行模式下每次运行想要传入不同的用户数&#xff0c;比如寻找瓶颈值的场景&#xff0c;需要运行多次设置不同的用户数。 二.解决思路 查看官方API Apache JMeter - Users Manual: Getting Started api CLI Mode 一节中提到可以使用如下参数做属性的替换&#…

iPhone苹果相册视频怎么提取音频?

在数字时代&#xff0c;视频已成为我们记录生活、分享故事的重要方式。然而&#xff0c;有时候我们只想保留视频中的音频部分&#xff0c;比如一段动人的背景音乐或是一段珍贵的对话。那么&#xff0c;苹果相册视频怎么提取音频呢&#xff1f;本文将介绍三种简单且实用的方法&a…

阿里云数据库MongoDB版助力极致游戏高效开发

客户简介 成立于2010年的厦门极致互动网络技术股份有限公司&#xff08;以下简称“公司”或“极致游戏”&#xff09;&#xff0c;是一家集网络游戏产品研发与运营为一体的重点软件企业&#xff0c;公司专注于面向全球用户的网络游戏研发与运营。在整个产业链中&#xff0c;公…

前端成长之路:HTML(4)

前文提到&#xff0c;在HTML中&#xff0c;表格是为了展示数据&#xff0c;表单是为了提交数据。表单标签是十分重要的标签&#xff0c;在网页中&#xff0c;需要和用户进行交互&#xff0c;收集用户信息等&#xff0c;此时就需要使用表单。表单可以将前端收集到的用户输入的信…

axios请求之参数拼接

URL 查询参数传递数据 优点&#xff1a; 简洁性: URL 查询参数的方式比较简洁&#xff0c;适合传递少量的数据。缓存友好: 查询参数可以被浏览器缓存&#xff0c;适合 GET 请求&#xff0c;但对于 POST 请求&#xff0c;浏览器通常不会缓存。 缺点&#xff1a; 数据大小限制: U…

软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护

10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户&#xff0c;高并发的访问和海量的数据&#xff0c;主要解决这类问题。 1. 单体架构 特点: 所有资源&#xff08;应用程序、数据库、文件&#xff09;集中在一台服务器上。适用场景: 小型网站&am…

【Java学习笔记】Collections 工具类

一、基本介绍 Collections 是一个操作 Set、List 和 Map 等集合的工具类Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作 二、排序操作&#xff1a;&#xff08;均为 static 方法) 三、查找、替换

Mac备忘录表格中换行(`Option` + `Return`(回车键))

在Mac的ARM架构设备上&#xff0c;如果你使用的是Apple的原生“备忘录”应用来创建表格&#xff0c;换行操作可以通过以下步骤来实现&#xff1a; 在单元格中换行&#xff1a; 双击你想要编辑的单元格你可以输入文本&#xff0c;按Option&#xff08;⌥&#xff09; Enter来插…

亚信安全DeepSecurity完成与超云超融合软件兼容性互认

近日&#xff0c;亚信安全与超云数字技术集团有限公司&#xff08;以下简称“超云”&#xff09;联合宣布&#xff0c;亚信安全成功完成与超云超融合软件的产品兼容性互认证。经严格测试&#xff0c;亚信安全云主机安全DeepSecurity与超云FS5000增强型融合系统&#xff08;简称…

Strawberry Fields:探索学习量子光学编程的奇妙世界

​​​​​​​ 一、Strawberry Fields 简介 Strawberry Fields 是由加拿大量子计算公司Xanadu开发的全栈 Python 库&#xff0c;在量子计算领域中占据着重要的地位。它为设计、模拟和优化连续变量&#xff08;CV&#xff09;量子光学电路提供强大工具&#xff0c;Strawberry…

System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本

问题1&#xff1a;“/”应用程序中的服务器错误。 System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本。 说明: 执行当前 Web 请求期间&#xff0c;出现未经处理的异常。请检查堆栈跟踪信息&#xff0c;以了解有关该错误以及代码中导致错误的出处的详细…

Linux学习——7_SElinux

SElinux SElinux简介 SELinux是Security-Enhanced Linux的缩写&#xff0c;意思是安全强化的linux SELinux 主要由美国国家安全局&#xff08;NSA&#xff09;开发&#xff0c;当初开发的目的是为了避免资源的误用 传统的访问控制在我们开启权限后&#xff0c;系统进程可以直…