详解Spring的pom.xml文件

1.xml声明

<?xml version="1.0" encoding="UTF-8"?>

XML声明,指定了XML文档的版本和编码。这里声明了版本为1.0,编码为UTF-8,确保Maven可以正确解析文件中的字符。

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 https://maven.apache.org/xsd/maven-4.0.0.xsd"></project>

<project>元素是Maven项目对象模型(POM)的根元素,包含了构建项目所需的所有配置信息。这个元素包含了多个属性和子元素,定义了项目的基本信息、依赖、插件、构建配置等。

        2.1 xmlns="http://maven.apache.org/POM/4.0.0":这个属性定义了XML命名空间(XML Namespace),它是一个独一无二的标识符,用来区分不同XML文档中元素的意义。在这里,它指明这个project元素以及它包含的所有子元素都属于http://maven.apache.org/POM/4.0.0这个命名空间,这是Maven POM 4.0.0版本的命名空间。

        2.2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":这个属性声明了XML模式实例(XML Schema Instance)的命名空间,它允许文档通过xsi:schemaLocation属性来引用XML模式。

        2.3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd":这个属性提供了一个空间名称和位置的配对列表,用于指定命名空间所对应的XML模式文件(XSD)的位置。在这里,http://maven.apache.org/POM/4.0.0命名空间的模式文件位于https://maven.apache.org/xsd/maven-4.0.0.xsd。这告诉XML解析器在验证POM文件结构时应该使用这个模式文件。

这些代码行为Maven提供了必要的信息,以确保pom.xml文件遵循正确的结构和规范,并且可以被正确地解析和验证。

3.pom模型版本

<modelVersion>4.0.0</modelVersion>

指定了POM模型的版本。Maven使用这个版本来验证POM文件的结构。这里的版本4.0.0是Maven POM文件的一个常见版本。

4.项目的基本坐标

<groupId>com.spring.boot.demo</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>

        4.1.  <groupId>

    定义项目的组ID,项目的唯一标识符的一部分。可以表示组织或者团队的反向域名(例如,com.spring.boot.demo

        4.2.  <artifactId>

         定义项目的构件ID,项目唯一标识符的一部分, 构件ID与组ID一起唯一确定一个Maven项目(例如,spring-boot-demo

        4.3.  <version>

        定义项目的版本。在这个例子中,0.0.1-SNAPSHOT表示这是一个开发中的初级版本。SNAPSHOT是一个特殊的版本,意味着项目处于开发过程中,可能会有更多的更新

5.重要信息

<name>spring-boot-demo</name>
<description>Spring Boot 测试项目</description>
<packaging>jar</packaging>

        5.1  <name></name>

        定义项目的名称,这个名称是更人性化的,可以让人更直观地理解项目(例如,spring-boot-demo

        5.2  <description></description>

       提供了项目的简短描述,帮助人们理解项目的作用(例如,Spring Boot 测试项目

        5.3  <packaging></packaging>

        定义了项目的打包方式。在这个例子中,jar表示项目将被打包成一个JAR文件。Maven支持多种打包方式,如 jar, war, ear 等,分别对应不同类型的Java项目

6.定义项目结构   

 <parent>
      <groupId>com.jin.dami</groupId>
      <artifactId>dami-parent</artifactId>
      <version>1.7.11.1</version>
 </parent>


 <modules>
      <module>price-display-api</module>
      <module>price-display-service</module>
 </modules>

        6.1 <parent></parent>

       元素指明当前项目的父项目(或称为父POM)。父项目通常包含了一些共享的配置信息,如依赖管理、插件配置等,这些可以被子项目继承。在多模块项目中,这有助于保持一致性和减少重复配置。

        例子中,当前项目的父项目是dami-parent,其完整的坐标是com.jin.dami:dami-parent:1.7.11.1

        6.2  <modules></modules>

       元素定义了当前项目下的子模块列表。每个子模块都是当前项目的一个组成部分,通常表示为一个子目录,其中包含了它自己的pom.xml文件。

        总之,<parent>元素用于指定父POM的信息,使得当前项目可以继承一些共通配置,而<modules>元素用于定义当前项目的子模块,这在构建大型项目时有助于模块化管理。

7. <properties>元素

<properties>
        <!-- maven配置 -->
        <java.version>1.8</java.version>
        <maven.test.skip>true</maven.test.skip>
        <default-encoding>UTF-8</default-encoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <timestamp>${maven.build.timestamp}</timestamp>
        <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>

        <!-- 工具类 -->
        <jodd.version>5.1.0</jodd.version>
        <hutool.version>5.7.22</hutool.version>
        <transmittable.version>2.12.5</transmittable.version>
</properties>

<properties> 元素用于定义一些属性值,这些属性可以在整个项目配置中重复使用。有助于集中管理常用的变量和配置参数,使得在多处使用这些值时,可以通过修改一个地方来更新

例如:

<java.version>:定义项目使用的Java版本,这里设置为1.8,即Java 8。

<maven.test.skip>:这是一个布尔值,用于控制是否跳过测试阶段。设置为true,Maven在构建时将不会执行测试。

<default-encoding>:定义项目使用的默认字符编码,这里设置为UTF-8

<maven.compiler.source><maven.compiler.target>:分别定义了源代码的Java版本和编译后字节码的目标Java版本,这里都设置为1.8

<project.build.sourceEncoding>:定义了项目构建时的源码编码,这里设置为UTF-8

<timestamp><maven.build.timestamp.format>:定义了构建时的时间戳和其格式。${maven.build.timestamp}是Maven内置的变量,它在构建时会被替换为当前时间。<maven.build.timestamp.format>定义了时间戳的格式,这里设置为yyyyMMddHHmmss,即年月日时分秒。

8.<dependencies></dependencies>

<dependencies>
    <!-- starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
</dependencies>

pom.xml 文件中,<dependencies> 元素用于声明项目所依赖的库。每个 <dependency> 元素都代表一个单独的依赖项,它告诉 Maven 项目需要这些库才能正确编译和运行。

代码片段中包含了两个依赖项,都是 Spring Boot 的 "starter" 依赖,这些是预设的依赖组合,旨在提供快速启动和运行 Spring 应用程序的必需组件。具体来说:

  1. spring-boot-starter-web

    • groupIdorg.springframework.boot,指定依赖库的组织或项目的唯一标识符。
    • artifactIdspring-boot-starter-web,指定了依赖库的名称。 这个依赖是 Spring Boot 的 Web 开发启动器,它包含了构建 Web 应用程序所需的所有依赖,如 Spring MVC、Tomcat 作为默认的嵌入式容器等。
  2. spring-boot-starter-test

    • groupId:同上,org.springframework.boot
    • artifactIdspring-boot-starter-test,指定依赖库的名称。 这个依赖是 Spring Boot 的测试启动器,包含进行单元测试和集成测试所需的库,如 JUnit、Spring Test、Mockito 等。

使用这些 "starter" 依赖可以简化 Maven 配置,我们不需要单独列出所有相关的依赖库。Spring Boot 的自动配置机制会根据这些 "starter" 依赖自动设置项目,使得开发者能够更快地开始编写业务代码。

9.<dependencyManagement> </dependencyManagement>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.3</version>
        </dependency>
        <!-- 更多的依赖管理条目 -->
    </dependencies>
</dependencyManagement>

<dependencyManagement> 元素用于集中管理项目依赖的版本号和范围(scope)。通常在多模块项目的父 POM(Project Object Model)中使用,以确保子模块中依赖的一致性和版本管理的方便。

<dependencyManagement> 中声明依赖时,实际上并不会直接将这些依赖引入到项目中,而是为这些依赖提供一个推荐的版本号和配置。子模块可以简单地引用这些依赖而不指定版本号,Maven 会自动使用 <dependencyManagement> 中指定的版本号。

<dependencyManagement> 中也有 <dependencies> 元素,它包含了一系列的 <dependency> 元素,每个 <dependency> 元素定义了一个依赖的管理信息。

例子中,spring-core的版本被定义在<dependencyManagement>里面,意味着项目的任何子模块都可以通过指定的 groupId和artifactId来引用,Spring-core就不需要在指定版本号。

这些元素在 pom.xml 文件中提供了项目的基本信息,这些信息对于Maven来说是必要的,因为它们会影响Maven如何构建和管理项目。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <!-- 版本号在 dependencyManagement 中指定,这里就不需要了 -->
    </dependency>
</dependencies>

好处:当需要升级或者统一管理依赖的版本时,只需要在父 POM 的 <dependencyManagement> 中修改,所有引用该依赖的子模块将自动使用新的版本,这极大地简化了版本管理和依赖升级的过程。

10.<build>

<build>
        <finalName>spring-boot-demo</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.6.9</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

<build> 元素在 Maven 的 pom.xml 文件中用于配置项目的构建设置。可以包含多个子元素,如 <finalName><plugins> 等,来定义构建的具体细节。

        9.1 <finalName>:指定构建产物(通常是 JAR 或 WAR 文件)的名称。在你提供的例子中,构建完成后的文件名将会是 spring-boot-demo.jarspring-boot-demo.war,取决于项目的打包类型。

                  9.2 <plugins>:包含一系列的 <plugin> 元素,用于配置项目中使用的 Maven 插件。每个插件都可以影响构建过程的不同阶段。在例子中,有两个插件被配置:

  • spring-boot-maven-plugin:这是 Spring Boot 提供的 Maven 插件,用于简化 Spring Boot 应用的打包和运行。在例子中,它配置了 repackage 目标(goal),这个目标会将应用打包成一个可执行的 JAR 文件,其中包含了所有的依赖和一个内嵌的服务器(通常是 Tomcat)。这样就可以通过 java -jar 命令直接运行应用。

  • maven-compiler-plugin:这是 Maven 的编译插件,用于编译项目的源代码。在配置中指定了 sourcetarget8,这意味着编译器将使用 Java 8 的语言特性进行编译,并确保生成的类文件兼容 Java 8 运行时环境。

在构建过程中,Maven 会按照配置的插件和它们的目标来执行相应的任务,比如编译代码、打包应用等。通过合理配置 <build> 元素,开发者可以定制和优化构建过程以满足项目的具体需求。

基础问题

1.在pom.xml文件中已经有了<dependencies>元素,为什么<dependencyManagement>元素里面还有一层<dependencies>

  • 29
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值