当前位置: 首页 > news >正文

pom文件详解

pom文件详解

  • 前言
  • 什么是POM文件?
  • POM文件的基本结构
  • POM文件的常用配置项
    • 1. 坐标信息
    • 2. 依赖项配置
    • 3.构建配置
    • 4. 插件配置
    • 5. 仓库配置
  • 父子pom
    • 父POM
    • 子POM
    • 父子POM的优点
    • 父子POM的使用
  • 总结

前言

上文我们介绍了maven的setting文件。今天我们来总结一下,maven中另一个重要文件,pom文件。

什么是POM文件?

POM(Project Object Model)文件是Maven项目的核心文件之一。它是一个XML文件,描述了项目的基本信息、依赖项、构建和发布等信息。POM文件是Maven的重要组成部分,可以帮助开发者管理和构建项目。在使用Maven进行项目构建时,需要根据项目的需要配置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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>example-project</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- 依赖项配置 -->
    </dependencies>

    <build>
        <!-- 构建配置 -->
    </build>

    <repositories>
        <!-- 仓库配置 -->
    </repositories>
</project>

POM文件的根元素是·<project>,它包含了多个子元素。其中<modelVersion>元素指定了POM文件的版本,通常设置为4.0.0。<groupId><artifactId><version>元素是必需的,它们用于定义项目的坐标信息。<dependencies><build><repositories>元素用于配置依赖项、构建和仓库信息。

POM文件的常用配置项

1. 坐标信息

坐标信息指的是<groupId>、<artifactId><version>元素。<groupId>定义了项目的组织ID,<artifactId>定义了项目的唯一标识符,<version>定义了项目的版本号。这些信息对于Maven的依赖管理和构建过程非常重要。

<groupId>com.example</groupId>
<artifactId>example-project</artifactId>
<version>1.0-SNAPSHOT</version>

2. 依赖项配置

依赖项配置用于定义项目所依赖的外部库。Maven会自动下载并管理这些依赖项。依赖项配置包含在<dependencies>元素中,每个依赖项使用一个<dependency>元素进行描述。

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.3.13</version>
    </dependency>
</dependencies>

3.构建配置

构建配置用于定义项目的构建过程。它包含在<build>元素中,包括了多个子元素。其中比较常用的子元素有:

<build>
    <plugins>
        <!-- 插件配置 -->
    </plugins>
    <resources>
        <!-- 资源文件配置 -->
    </resources>
    <testResources>
        <!-- 测试资源文件配置 -->
    </testResources>
</build>

4. 插件配置

插件是Maven的一个重要特性,它可以用于扩展Maven的功能。Maven自带了一些插件,比如maven-compiler-plugin、maven-jar-plugin等。插件配置包含在<plugins>元素中,每个插件使用一个<plugin>元素进行描述。

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

5. 仓库配置

仓库配置用于定义Maven的依赖项下载地址。Maven默认使用中央仓库,但是也可以配置私有仓库或者本地仓库。仓库配置包含在<repositories>元素中,每个仓库使用一个<repository>元素进行描述。

<repositories>
    <repository>
        <id>central</id>
        <url>https://repo.maven.apache.org/maven2</url>
    </repository>
</repositories>

父子pom

父子POM是Maven中一个重要的概念。在Maven项目中,我们通常会使用父子POM的方式来管理项目的依赖、构建和打包方式等。

父POM

父POM是指一个Maven项目中的顶层POM文件。父POM文件可以被多个子模块所继承,子模块可以继承父POM中的配置信息。在父POM中通常包含一些基本的配置信息,如项目的坐标、开发者信息、构建配置等。父POM文件通常被命名为pom.xml,并且不包含任何代码。

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.parent</groupId>
  <artifactId>parent</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>

  <modules>
    <module>child1</module>
    <module>child2</module>
  </modules>

  <dependencies>
    <!-- 依赖配置 -->
  </dependencies>

  <build>
    <!-- 构建配置 -->
  </build>
</project>

子POM

子POM是指一个Maven项目中的子模块POM文件。子模块可以继承父POM中的配置信息,同时也可以覆盖或者新增一些配置信息。子模块POM文件通常包含项目的代码、测试代码、资源文件等信息。子POM文件的命名通常是根据项目的名称来命名的,比如example-web、example-service等。

<project>
  <parent>
    <groupId>com.example.parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>child1</artifactId>
  <packaging>jar</packaging>

  <dependencies>
    <!-- 依赖配置 -->
  </dependencies>

  <build>
    <!-- 构建配置 -->
  </build>
</project>

父子POM的优点

  1. 继承:父POM中的配置信息可以被子模块所继承,这样可以避免重复配置,提高配置的可维护性。
  2. 一致性:通过父POM可以统一管理子模块的依赖、构建和打包方式等,保证各个子模块之间的一致性。
  3. 可扩展性:在父POM中定义一些通用的配置信息,可以为后续的新子模块提供一些默认配置,提高了可扩展性。

父子POM的使用

在Maven项目中使用父子POM的方式很简单,只需要在子模块的POM文件中声明父POM即可。

<project>
  <parent>
    <groupId>com.example.parent</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
  </parent>

  <modelVersion>4.0.0</modelVersion>
  <artifactId>child1</artifactId>
  <packaging>jar</packaging>

  <dependencies>
    <!-- 依赖配置 -->
  </dependencies>

  <build>
    <!-- 构建配置 -->
  </build>
</project>

在上面的例子中,子模块child1的POM文件中声明了父POM文件的信息,包括groupId、artifactId和version。
在实际开发中,通常会将父POM文件和子模块的POM文件分开管理,并将父POM文件上传到Maven仓库中。
这样其他开发者在开发新的子模块时就可以使用已有的父POM文件,避免重复配置,提高了开发效率。

总结

POM文件是Maven项目的核心文件之一,它包含了Maven项目的所有配置信息。
父子POM是Maven中一个重要的概念,使用父子POM的方式可以提高项目的可维护性、一致性和可扩展性。
在实际开发中,我们可以将父POM文件上传到Maven仓库中,方便其他开发者使用。
我们的项目里就使用了nexus和maven进行了父子控制,在子项目中指定父项目,父子项目分开管理。

相关文章:

  • JVM 类加载器子系统
  • 半小时内实现Esp32-Cam模型训练和图像识别
  • 关于一个大学生写一个题目写一天
  • 【C#进阶】C# 多线程
  • mlq移动最小二乘方法
  • 【Spring6】| Spring IoC注解式开发
  • 数据库+加密算法参考材料-2023.3.29
  • fastp软件介绍
  • 别再光靠工资过日子,外国程序员教你如何通过副业赚钱
  • 海心沙元宇宙音乐会虚拟主持人玩法再升级,虚拟动力技术全程助力
  • spark通过connector的方式读写starrocks
  • python实战应用讲解-【numpy专题篇】实用小技巧(六)(附python示例代码)
  • chatGPT陪你读源码
  • 37了解高可用技术方案,如冗余、容灾
  • 细思极恐,第三方跟踪器正在获取你的数据,如何防范?
  • Google 是如何开发 Web 框架的
  • 【个人向】《HTTP图解》阅后小结
  • JSDuck 与 AngularJS 融合技巧
  • JS实现简单的MVC模式开发小游戏
  • LintCode 31. partitionArray 数组划分
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • mysql 数据库四种事务隔离级别
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • yii2权限控制rbac之rule详细讲解
  • 对象管理器(defineProperty)学习笔记
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 猴子数据域名防封接口降低小说被封的风险
  • 每天10道Java面试题,跟我走,offer有!
  • 正则与JS中的正则
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)利用webkit抓取动态网页和链接
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • // an array of int
  • /bin/rm: 参数列表过长"的解决办法
  • ?.的用法
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @WebService和@WebMethod注解的用法
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [BZOJ] 2044: 三维导弹拦截
  • [C++]打开新世界的大门之C++入门
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [IE9] 解决了傲游、搜狗浏览器在IE9下网页截图的问题
  • [Java基础]—JDBC