java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot Maven标签

SpringBoot项目构建Maven标签及属性用法详解

作者:想做一个小孩的杨先生

在 Spring Boot 项目中,Maven 是最常用的构建工具之一,本文将详细介绍 Maven 依赖管理中的主要标签及其使用方法,帮助开发者更好地理解和使用 Maven 构建工具,感兴趣的朋友跟随小编一起看看吧

一、序言

在 Spring Boot 项目中,Maven 是最常用的构建工具之一。通过 Maven,我们可以轻松地管理项目的依赖、构建流程和插件。本文将详细介绍 Maven 依赖管理中的主要标签及其使用方法,帮助开发者更好地理解和使用 Maven 构建工具。

二、Maven标签介绍

在 Maven 项目中,用于描述项目信息的标签通常位于 pom.xml 文件的<project>根元素下。这些标签帮助 Maven 构建工具和其他开发者了解项目的基本信息、项目开发者、组织、许可证等。以下是 Maven 中常见的用于项目描述的标签:

项目描述类标签

1. <modelVersion>标签

描述: 指定 POM 文件的模型版本。对于 Maven 2 和更高版本,通常为 4.0.0。

<modelVersion>4.0.0</modelVersion>

2. <groud>标签

描述: 项目的组标识符,通常表示组织或公司名称。与 <artifactId> 共同唯一标识项目。

<groupId>com.example</groupId>

3. <artifactId>标签

描述: 项目的工件标识符,通常是模块或项目的名称。与 <groupId> 共同唯一标识项目。

<artifactId>my-project</artifactId>

4. <version>标签

描述: 项目的版本号。可以是 1.0.0-SNAPSHOT 表示开发中的版本,或者1.0.0表示正式版本。

<version>1.0.0-SNAPSHOT</version>

5. <packaging>标签

描述: 定义项目的打包方式。常见的值有 jar, war, pom 等,默认为 jar

<packaging>jar</packaging>

6. <name>标签

描述: 项目的名称。

<name>My Project</name>

7. <description>标签

描述: 对项目的简要描述。通常用于进一步解释项目的功能或目的。

<description>This is a sample project to demonstrate Maven project descriptors.</description>

8. <url>标签

描述: 目的主页或相关文档的 URL。可以是项目的官网地址或代码托管平台的链接。

<description>This is a sample project to demonstrate Maven project descriptors.</description>

9. <inceptionYear>标签

描述: 项目的启动年份,通常用于版权声明中。

<inceptionYear>2024</inceptionYear>

10. <organization>标签

描述: 定义项目所属的组织信息,包括组织名称和 URL。

<organization>
    <name>Example Corp</name>
    <url>https://www.example.com</url>
</organization>

11. <licenses>标签

描述: 描述项目使用的许可证信息。包括许可证名称、URL、分发方式等。

<licenses>
    <license>
        <name>Apache License, Version 2.0</name>
        <url>https://www.apache.org/licenses/LICENSE-2.0</url>
        <distribution>repo</distribution>
    </license>
</licenses>

12. <developers>标签

描述: 列出项目的开发人员及其相关信息,如 ID、姓名、电子邮件等。

 <developers>
        <developer>
            <id>123</id> <!-- 开发者ID -->
            <name>yjp</name> <!-- 姓名 -->
            <email>yjp@example.com</email>  <!-- 邮箱 -->
            <organization>sis</organization> <!-- 组织 -->
            <roles> <!-- 角色 -->
                <role>Developer</role> 
            </roles>
        </developer>
    </developers>

13. <contributors>标签

描述: 列出对项目做出贡献的人员及其相关信息,类似于 ,但通常不是核心开发人员。

   <!-- 贡献者信息 -->
    <contributors>
        <contributor>
            <name>Jane Smith</name> <!-- 姓名 -->
            <email>janesmith@example.com</email> <!-- 邮箱 -->
            <organization>Example Corp</organization> <!-- 组织 -->
        </contributor>
    </contributors>

14. <issueManagement>标签

描述: 项目的问题管理系统的信息,如 JIRA、GitHub Issues 等。通常包括系统的类型和 URL。

<issueManagement>
    <system>GitHub Issues</system>
    <url>https://github.com/example/my-project/issues</url>
</issueManagement>

15. <scm>标签

描述: 项目的源码管理(Source Code Management)信息。包括版本控制系统的类型和访问 URL。

 <scm>
    <url>https://github.com/example/my-project</url>
    <connection>scm:git:git://github.com/example/my-project.git</connection>
    <developerConnection>scm:git:ssh://git@github.com/example/my-project.git</developerConnection>
    <tag>HEAD</tag>
</scm>

依赖管理类标签

1. <dependencyManagement>标签

描述: <dependencyManagement>标签用于集中管理依赖的版本号和范围。它不会直接引入依赖,而是为项目中的其他模块提供版本号的定义,避免在各模块中重复定义版本号。子项目可以在使用这些依赖时,不必再次声明版本号。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.4</version>
        </dependency>
    </dependencies>
</dependencyManagement>

2. <dependencies><dependency> 标签

    <dependencyManagement> <!-- 依赖管理 -->
        <dependencies> 
            <dependency> 
                <groupId>cn.iocoder.boot</groupId> <!-- 组织ID -->
                <artifactId>yjp-dependencies</artifactId> <!-- 项目名称 -->
                <version>${revision}</version> <!-- 版本号 -->
                <type>pom</type> <!-- 导入类型:pom 表示该依赖是一个POM类型,而不是一个标准的Java库(如JAR)。POM类型通常用于依赖管理或继承。 -->
                <scope>import</scope>  <!-- 导入范围:import 表示该依赖将导入另一个POM文件,而不是直接作为一个库。 -->
                <optional>false</optional> <!-- 可选依赖:optional 表示该依赖是可选的,即在使用该依赖时,可以选择性地导入。 -->
            </dependency>
        </dependencies>
    </dependencyManagement>

3. <scope> 标签

描述: <scope>属性用于指定依赖的作用域,决定了该依赖在构建生命周期的哪些阶段可用,以及它是否会被传递给依赖它的项目。Maven支持的主要作用域包括以下几种:

(1) compile (默认作用域)

<dependency>
    <groupId>org.example</groupId>
    <artifactId>example-lib</artifactId>
    <version>1.0.0</version>
    <!-- compile是默认的,不需要显式指定 -->
</dependency>

(2) provided

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

(3) runtime

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
    <scope>runtime</scope>
</dependency>

(4) test

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

(5) system

<dependency>
    <groupId>com.example</groupId>
    <artifactId>example-lib</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/libs/example-lib.jar</systemPath>
</dependency>

(6) import

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.5.4</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

这些作用域帮助开发者在构建过程中有效管理依赖的使用范围和传递性,根据具体场景选择合适的作用域可以避免不必要的依赖引入,提高项目的可维护性和构建效率。

4. <exclusions> 标签

描述: 当一个依赖引入了不需要的传递依赖时,我们可以使用 <exclusions> 标签将其排除。每个 <exclusion> 元素定义一个要排除的依赖,通常包含<groupId> <artifactId> 子标签。

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

5. <optional> 标签

描述: <optional> 标签用于标记一个依赖是否为可选。可选依赖不会自动传递给依赖此项目的其他项目。

<dependency>
    <groupId>com.example</groupId>
    <artifactId>example-lib</artifactId>
    <version>1.0.0</version>
    <optional>true</optional>
</dependency>

项目构建类标签

1. <build>标签

**描述:**定义项目的构建配置,如构建目录、插件、资源、配置文件等。

    <build>
        <!-- 设置构建的 jar 包名 -->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 打包 -->
            <plugin>
                <groupId>org.springframework.boot</groupId> 
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal> <!-- 将引入的 jar 打入其中 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

2. <sourceDirectory>标签

描述: 定义项目的主源代码目录。默认情况下,该目录为 src/main/java。如果你的源代码存放在其他目录中,可以通过该标签进行修改。

 <sourceDirectory>src/main/java</sourceDirectory>

3. <testSourceDirectory>标签

描述: 定义项目的测试源代码目录。默认情况下,该目录为 src/test/java。如果你的测试代码存放在其他目录中,可以通过该标签进行修改。

<testSourceDirectory>src/test/java</testSourceDirectory>

4. <outputDirectory>标签

描述: 指定编译后的主代码输出目录。默认值为 target/classes。

<outputDirectory>target/classes</outputDirectory>

5. <finalName>标签

描述: 定义构建输出的最终名称,不包括文件扩展名。默认情况下,Maven 会将输出文件命名为 ${artifactId}-${version}。你可以通过此标签自定义输出文件的名称。

<finalName>my-custom-name</finalName>

6. <resources>标签

描述: 定义项目的资源目录及资源文件。资源文件会被打包到最终的构建产物中(如 JAR 包)。通常资源目录为 src/main/resources,该标签允许你自定义资源的路径和处理方

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>**/*.properties</include>
        </includes>
    </resource>
</resources>

7. <plugins>标签

描述: 定义 Maven 构建生命周期中的插件。插件是 Maven 的核心组件,用于执行各种任务(如编译、打包、测试、部署等)。你可以在此标签中配置和使用不同的插件。

<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>
</plugins>

8. <executions>标签

描述: 用于配置特定插件在构建生命周期中的不同阶段执行的行为。每个 <executions> 元素可以包含多个 <execution> 子元素,这些子元素定义了插件的一个执行任务,包括其执行的阶段、目标和其他配置。

<build>
    <plugins>
        <plugin>
            <!-- 插件的基本信息 -->
            <groupId>...</groupId>
            <artifactId>...</artifactId>
            <version>...</version>
            <!-- 执行配置 -->
            <executions>
                <execution>
                    <id>execution-id</id> <!-- 可选:执行的标识符,用于区分多个执行 -->
                    <phase>phase-name</phase> <!-- 可选:指定该执行应绑定的构建生命周期阶段 -->
                    <goals>
                        <goal>goal-name</goal> <!-- 必须:定义要执行的目标(可以有多个) -->
                    </goals>
                    <configuration>
                        <!-- 可选:插件特定的配置项 -->
                    </configuration>
                </execution>
                <!-- 可以有多个 <execution> 元素 -->
            </executions>
        </plugin>
    </plugins>
</build>

9. <execution>子标签解释

<id>: 可选的执行标识符,用于唯一标识每个执行。这在多个 元素存在时特别有用。
<phase>: 指定执行绑定到 Maven 构建生命周期中的特定阶段。比如,compiletestpackageinstalldeploy 等。如果没有指定 <phase>,插件的执行目标(goal)不会自动绑定到任何生命周期阶段,必须手动调用。
<goals>: 一个或多个 <goal> 标签,指定插件的具体目标(或任务),如 compiletestpackage 等。
<configuration>: 为该执行配置插件的特定参数。配置项会覆盖 <plugin> 元素中的<configuration>部分。

10.项目构建总结 (1)<repackage> 目标的作用

(1)重新打包现有的 JAR 或 WAR:它将现有的 JAR 或 WAR 文件重新打包成一个可执行的 JAR 或 WAR。这意味着这个 JAR 或 WAR 包包含了所有的应用程序代码和依赖,并且可以通过 java -jar 命令直接运行。

(2)添加 Spring Boot 启动器:repackage 目标会在生成的 JAR 中添加一个 Spring-Boot-Loader 作为启动器,这个启动器负责处理应用程序的启动和依赖加载。

(3)简化部署:通过创建一个可执行的 JAR 文件,可以大大简化 Spring Boot 应用程序的部署过程,因为不需要将应用程序部署到外部的应用服务器中。

(2)repackage目标的常用配置参数

在使用 <goal>repackage</goal> 时,可以通过<configuration>元素进行多种配置。以下是一些常用的配置参数:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>3.1.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal> <!-- 这是 repackage 目标 -->
                    </goals>
                    <configuration>
                        <mainClass>com.example.MyApplication</mainClass> <!-- 指定主类 -->
                        <classifier>exec</classifier> <!-- 设置生成的可执行 JAR 文件的分类器 -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

11.基础打包构建示例

    <build>
        <!-- 设置构建的 jar 包名 -->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <!-- 打包 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal> <!-- 将引入的 jar 打入其中 -->
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

到此这篇关于SpringBoot项目构建Maven标签及属性用法详解的文章就介绍到这了,更多相关SpringBoot Maven标签内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文