pom文件详解

简介: pom文件详解


常用配置

当您在POM文件中添加注释时,通常会在XML元素的旁边或下方添加文本,以解释该元素的用途和配置。下面是一个POM文件的示例,包括注释,以解释各个部分的含义:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!-- POM文件的根元素,定义Maven项目的配置 -->
    <modelVersion>4.0.0</modelVersion>
    <!-- 定义Maven模型版本,通常不需要更改,使用最新版本即可 -->
    <!-- 模型版本是POM文件本身的版本 -->
    <groupId>com.example</groupId>
    <!-- 项目的组ID,通常使用公司域名的反转形式,确保全局唯一性 -->
    <!-- 例如,com.example 表示一个示例公司的组ID -->
    <artifactId>my-project</artifactId>
    <!-- 项目的Artifact ID,标识项目的唯一性 -->
    <!-- 例如,my-project 表示项目的名称 -->
    <version>1.0.0</version>
    <!-- 项目的版本号 -->
    <!-- 版本号标识项目的特定版本,通常使用语义版本号规范 -->
    <packaging>jar</packaging>
    <!-- 定义项目的打包类型,常见的包括jar、war、pom等 -->
    <!-- 这里是一个JAR项目的示例 -->
    <name>My Project</name>
    <!-- 项目的显示名称 -->
    <!-- 可以是人类可读的项目名称 -->
    <description>A sample Maven project</description>
    <!-- 项目的描述 -->
    <!-- 简要描述项目的目的和功能 -->
    <url>https://example.com/my-project</url>
    <!-- 项目的URL -->
    <!-- 项目的官方网站或仓库的链接 -->
    <licenses>
        <!-- 定义项目使用的许可证信息 -->
        <license>
            <name>Apache License, Version 2.0</name>
            <!-- 许可证的名称 -->
            <url>http://www.apache.org/licenses/LICENSE-2.0</url>
            <!-- 许可证的URL -->
        </license>
    </licenses>
    <developers>
        <!-- 定义项目的开发者信息 -->
        <developer>
            <id>johndoe</id>
            <!-- 开发者的ID -->
            <name>John Doe</name>
            <!-- 开发者的姓名 -->
            <email>johndoe@example.com</email>
            <!-- 开发者的电子邮件地址 -->
        </developer>
    </developers>
    <scm>
        <!-- 配置版本控制信息 -->
        <connection>scm:git:https://github.com/example/my-project.git</connection>
        <!-- 版本控制的连接信息 -->
        <developerConnection>scm:git:https://github.com/example/my-project.git</developerConnection>
        <!-- 开发者版本控制的连接信息 -->
        <url>https://github.com/example/my-project</url>
        <!-- 项目的版本控制URL -->
    </scm>
    <dependencies>
        <!-- 定义项目的依赖关系 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <!-- 依赖的组ID -->
            <artifactId>spring-core</artifactId>
            <!-- 依赖的Artifact ID -->
            <version>5.2.8.RELEASE</version>
            <!-- 依赖的版本号 -->
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <!-- 定义构建过程的配置 -->
        <plugins>
            <!-- 配置构建插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <!-- 插件的组ID -->
                <artifactId>maven-compiler-plugin</artifactId>
                <!-- 插件的Artifact ID -->
                <version>3.8.1</version>
                <!-- 插件的版本号 -->
                <configuration>
                    <!-- 插件的配置部分 -->
                    <source>1.8</source>
                    <!-- Java编译器源版本 -->
                    <target>1.8</target>
                    <!-- Java编译器目标版本 -->
                </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>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

高级配置

非常抱歉,我明白您想要了解更多高级配置的注释。以下是对POM文件中其他高级配置元素的详细注释:

<build>
    <!-- 定义构建过程的配置 -->
    <plugins>
        <!-- 配置构建插件 -->
        
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <!-- 插件的组ID,通常是Maven插件的提供者 -->
            <artifactId>exec-maven-plugin</artifactId>
            <!-- 插件的Artifact ID,标识具体的插件 -->
            <version>3.0.0</version>
            <!-- 插件的版本号 -->
            <executions>
                <!-- 插件执行的阶段和目标 -->
                <!-- 这里定义了插件在构建生命周期中的执行顺序和目标 -->
                <execution>
                    <!-- 插件执行的一次具体实例 -->
                    <goals>
                        <!-- 定义插件执行的目标 -->
                        <goal>java</goal>
                        <!-- 这里的"java"目标表示执行Java程序 -->
                    </goals>
                    <configuration>
                        <!-- 针对插件的配置参数 -->
                        <mainClass>com.example.MainClass</mainClass>
                        <!-- 指定要执行的Java主类 -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

上述代码注释解释了构建插件的配置,包括组ID、Artifact ID、版本、执行阶段、目标和配置参数。

<resources>
    <!-- 定义资源目录 -->
    <resource>
        <!-- 配置一个资源目录 -->
        <directory>src/main/resources</directory>
        <!-- 指定资源目录的路径 -->
        <!-- 这里是源代码的主要资源目录 -->
        <filtering>true</filtering>
        <!-- 是否启用资源过滤 -->
        <!-- 如果设置为true,Maven将在复制资源时替换占位符 -->
    </resource>
</resources>

这段代码注释解释了如何定义资源目录,并可以选择启用资源过滤以在构建过程中替换占位符。

<filters>
    <!-- 配置文件过滤器 -->
    <filter>src/main/filters/filter.properties</filter>
    <!-- 指定包含占位符和替换值的过滤器配置文件 -->
</filters>

上述代码注释解释了如何配置文件过滤器以替换资源文件中的占位符。

<reporting>
    <!-- 定义构建概要和报告 -->
    <plugins>
        <!-- 配置用于生成构建报告的插件 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <!-- 插件的组ID,通常是Maven插件的提供者 -->
            <artifactId>maven-surefire-report-plugin</artifactId>
            <!-- 插件的Artifact ID,标识具体的插件 -->
            <version>3.0.0-M5</version>
            <!-- 插件的版本号 -->
        </plugin>
    </plugins>
</reporting>

最后,上述代码注释解释了如何配置用于生成构建报告的插件。

这些注释涵盖了POM文件中高级配置元素的解释,包括构建插件、资源目录、文件过滤和构建概要。如果您需要更多详细信息或有其他问题,请随时提问。

重要配置详细说明

dependency中的子项详细说明

<dependencies>
    <!-- 定义项目的依赖关系 -->
    
    <dependency>
        <!-- 定义一个依赖项 -->
        <groupId>org.springframework</groupId>
        <!-- 依赖的组ID -->
        <!-- 通常是Maven库或项目的组织或提供者 -->
        <artifactId>spring-core</artifactId>
        <!-- 依赖的Artifact ID -->
        <!-- 标识依赖的具体项目或库 -->
        <version>5.2.8.RELEASE</version>
        <!-- 依赖的版本号 -->
        <!-- 指定所需的依赖版本 -->
        <scope>compile</scope>
        <!-- 依赖的范围 -->
        <!-- 可选值包括:compile、provided、runtime、test、system、import -->
        <type>jar</type>
        <!-- 依赖的类型 -->
        <!-- 指定依赖的文件类型,常见的包括jar、war、pom等 -->
    </dependency>
</dependencies>

上述代码注释解释了 <dependency> 元素的更多子项:

  1. <scope>:定义依赖的范围。依赖的范围指定了依赖在项目的不同构建阶段的可见性和使用情况。常见的范围包括:
  • compile(默认):依赖在所有构建阶段都可见,包括编译、测试和运行。
  • provided:类似于 compile,但假定在运行时由容器或JDK提供,因此不会打包到最终的可执行文件中。
  • runtime:依赖在运行时可见,但不在编译时可见。
  • test:依赖仅在测试代码编译和运行时可见。
  • system:类似于 provided,但需要指定 <systemPath> 来指定依赖的路径。
  • import:只用于 <dependencyManagement> 部分,表示导入依赖的定义而不实际引入依赖。
  1. <type>:定义依赖的类型。依赖的类型指定了依赖的文件类型。通常情况下,这个子项不需要手动指定,因为Maven会根据Artifact ID自动推断类型。然而,您可以显式指定类型,例如 jarwarpom

dependency 和 dependencyManagement区别

  1. <dependency>元素:
  • <dependency> 元素用于在项目中指定实际依赖的信息,包括组ID、Artifact ID、版本等。
  • 当您在项目中使用 <dependency> 元素时,它表示您的项目确实依赖于这些库或组件,而这些依赖将被包括在项目的类路径中。
  • <dependency> 元素通常出现在项目的 <dependencies> 部分中。
  1. <dependencyManagement>元素:
  • <dependencyManagement> 元素用于集中定义项目依赖的版本和传递性依赖的版本,但不会实际引入这些依赖。
  • 当您在项目的 <dependencyManagement> 部分中定义依赖版本时,这些版本定义可以在整个项目中重复使用,以确保所有依赖的版本一致性。
  • <dependencyManagement> 元素不会实际将依赖包括在项目的类路径中,它只是提供了依赖版本的集中管理。
  • 使用 <dependencyManagement> 元素的一个常见情况是在多个子模块的父POM中定义依赖版本,以确保子模块使用相同的版本。

示例:

<dependencies>
    <!-- 在这里定义实际依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.8.RELEASE</version>
    </dependency>
</dependencies>
<dependencyManagement>
    <!-- 在这里定义依赖版本,但不实际引入依赖 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
    </dependencies>
</dependencyManagement>

总结:

  • <dependency> 用于实际引入依赖,并使其可用于项目。
  • <dependencyManagement> 用于集中管理依赖的版本,但不会实际引入依赖。它通常用于父POM中,以确保子模块使用相同的依赖版本。子模块需要明确指定它们需要的依赖,但版本可以继承自父POM中的 <dependencyManagement> 部分。
相关文章
|
11月前
|
人工智能 数据可视化 关系型数据库
快速构建,JeeLowCode让你的应用开发速度飞起来#快速开发
低代码平台通过直观的图形化界面和模块化设计,大幅缩短开发周期、降低成本,使企业无需大量技术人员即可快速构建应用。其可视化开发、高效数据处理、模型驱动开发、AI智能助力及灵活扩展的插件生态,帮助企业应对复杂业务需求,实现快速迭代与市场响应,推动数字化转型。平台支持多种数据库和跨平台兼容,内置五大核心引擎,提供丰富的底层组件和自定义功能,确保开发效率与应用质量。开源框架与定制开发支持二次开发,进一步提升灵活性与可靠性。低代码平台让开发更简单、高效,助力企业释放创新潜力。
481 19
|
存储 设计模式 前端开发
什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构?SpringMVC与三层架构的关系?
文章解释了SpringMVC的概念和各部分功能,探讨了应用分层的原因和具体实施的三层架构,以及SpringMVC与三层架构之间的关系和联系。
695 1
什么是SpringMVC?简单好理解!什么是应用分层?SpringMVC与应用分层的关系? 什么是三层架构?SpringMVC与三层架构的关系?
|
Java
Java“非静态变量 ... 不能在静态上下文中被引用”解决
Java中遇到“非静态变量不能在静态上下文中被引用”的错误,通常是因为尝试在静态方法或静态块中访问实例变量。解决方法是将变量声明为静态(static)或通过实例对象来访问该变量。
879 6
|
前端开发 JavaScript Java
阿里云OSS临时凭证前后端配合上传文件
阿里云OSS临时凭证前后端配合上传文件
575 0
|
运维 测试技术
测试与开发问题之测试开发工程师与软件开发工程师和测试工程师如何区别
测试与开发问题之测试开发工程师与软件开发工程师和测试工程师如何区别
267 1
|
SQL Java 数据库连接
JPA 之 QueryDSL-JPA 使用指南
JPA 之 QueryDSL-JPA 使用指南
1108 0
|
机器学习/深度学习 自然语言处理 并行计算
【深度学习】Attention的原理、分类及实现
文章详细介绍了注意力机制(Attention)的原理、不同类型的分类以及如何在Keras中实现Attention。文章涵盖了Attention的基本概念、计算区域、所用信息、结构层次等方面,并提供了实现示例。
1906 0
|
SQL 关系型数据库 MySQL
Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
【4月更文挑战第6天】Hive【环境搭建 01】【hive-3.1.2版本 安装配置】【含 mysql-connector-java-5.1.47.jar 网盘资源】【详细】
1081 1
|
JSON 前端开发 JavaScript
从前端到后端——Web开发的全流程解析
【2月更文挑战第2天】Web开发涉及多个方面,从前端设计到后端实现,需要开发者具备一定的技术能力和知识储备。本文将以一个简单的Web应用为例,详细介绍Web开发的全流程。
|
Web App开发 JSON JavaScript
JSON转换方法总结
将JavaScript的jQuery库中表单转化为JSON对象的方法 Jquery中有serialize方法,可以将表单序列化为一个“&”连接的字符串,但却没有提供序列化为Json的方法。不过,我们可以写一个插件实现
6785 0