使用自定义maven pom依赖项目实现spring boot工程包版本管理

embedded/2025/2/7 15:04:22/

maven_pomspring_boot_0">使用自定义maven pom依赖项目实现spring boot工程包版本管理

自定义parentdependency模块,整合开发中常用到的spring-boot-dependencies和其他私有依赖。

pom项目优点

  • 依赖包和版本号集中在一个文件做统一管理。适合制定统一规范,方便版本更新(如公共包有安全漏洞要做版本升级的场景)。还可以配合maven archetype搭建自定义脚手架。
  • 版本只需要声明一次,就能屏蔽下级引用的版本冲突。
  • 支持继承parent和组合dependencies两种方式灵活使用。

pom项目定义

pom项目和普通maven工程类似,有pom.xml定义,但packaging标签打包类型为pom,和常见的jarwar不同。

文件构成

  • ctm-spring-boot-pom-project
    • ctm-spring-boot-starter-parent
      • pom.xml
    • ctm-spring-boot-dependencies
      • pom.xml

maven工程构建成果为.pom文件,发布上传到maven私有仓库。

parent模块pom定义

在本pom.xml中,自定义父工程,结合自定义dependency使用,用来屏蔽其他parent引入的dependencyManagement。

<?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"><parent><groupId>com.xxx</groupId><artifactId>ctm-spring-boot-dependencies</artifactId><version>0.0.1.RELEASE</version></parent><groupId>com.xxx</groupId><artifactId>ctm-spring-boot-starter-parent</artifactId><version>0.0.1.RELEASE</version><packaging>pom</packaging><modelVersion>4.0.0</modelVersion><name>ctm-spring-boot-starter-parent</name><properties><java.version>1.8</java.version><resource.delimiter>@</resource.delimiter><maven.compiler.source>${java.version}</maven.compiler.source><maven.compiler.target>${java.version}</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencyManagement><dependencies></dependencies></dependencyManagement><build><!-- 略,copy from spring-boot-starter-parent-x.x.x.pom --></build><distributionManagement><repository><id>ctm-release</id><name>ctm-release</name><url>xxx</url></repository><snapshotRepository><id>ctm-snapshot</id><name>ctm-snapshot</name><url>xxx</url></snapshotRepository></distributionManagement></project>

dependencies模块pom定义

在本pom.xml中,声明依赖包和版本,做全局统一管理。

<?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"><groupId>com.xxx</groupId><artifactId>ctm-spring-boot-dependencies</artifactId><version>0.0.1.RELEASE</version><modelVersion>4.0.0</modelVersion><packaging>pom</packaging><name>ctm-spring-boot-dependencies</name><dependencyManagement><!-- add your dependencies --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>x.x.x</version><exclusions><exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency></dependencies></dependencyManagement><distributionManagement><repository><id>ctm-release</id><name>ctm-release</name><url>xxx</url></repository><snapshotRepository><id>ctm-snapshot</id><name>ctm-snapshot</name><url>xxx</url></snapshotRepository></distributionManagement>
</project>

pom项目引用

maven_117">本地maven配置

使用时修改maven的settings.xml文件:
1、在<profiles>节点新增一组<profile>配置。

<profile><id>ctm-release</id><repositories><repository><id>ctm-release</id><name>ctm-release</name><url>xxx</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories>
<profile>       

2、在<activeProfiles>节点新增<activeProfile>配置。

<activeProfile>ctm-release</activeProfile>

pom项目使用

方式一:继承(推荐)

1、在项目根pom,将原parent的spring-boot-starter-parent改为骨架工程。

<parent><groupId>com.xxx</groupId><artifactId>ctm-spring-boot-starter-parent</artifactId><version>${last.version.RELEASE}</version>
</parent>

2、删除项目原<dependencyManagement>节点
3、在<dependencies>节点中引用依赖时,不要显式声明依赖的版本号,会自动继承<dependencyManagement>节点中声明的。在多模块项目中,对子模块也适用。

方式二:组合

原项目已经继承私有parent(非原生spring-boot-starter-parent),使用骨架提供dependencies模块,以组合的方式使用,做依赖包版本控制
1、在项目根pom的<dependencyManagement>节点,添加以下配置

<dependency><groupId>com.xxx</groupId><artifactId>ctm-spring-boot-dependencies</artifactId><version>${last.version.RELEASE}</version><type>pom</type><scope>import</scope>
</dependency>
注:若版本控制失效,一般是父级私有parent内也声明有一份dependencyManagement,导致子的失效。在本级需要把引用type pom的方式,改为显式声明,手动复制所有dependency到dependencyManagement节点内。

2、在<dependencies>节点中引用依赖,不用带版本号。

maven_173">附maven标签功能简介

dependencyManagement简介

依赖包版本的管理器,dependencyManagement里只是声明依赖,并不实现引入。

  • 版本控制:如果dependencies里的dependency没有声明version元素,那么maven就会到dependencyManagement里面去找有没有对该artifactId和groupId进行过版本声明,如果有,就继承它。
  • 中断:如果dependencies中的dependency声明了version,那么无论dependencyManagement中有无对该jar的version声明,都以dependency里的version为准。

在引用<type>pom</type>类型时,一般结合<scope>import</scope>一起使用。

type pom简介

dependency的type类型默认是jar。当项目中需要引入很多jar包,容易导致单个pom.xml文件过大,可读性降低。可以单独定义一个type类型为pom的maven项目,做依赖包统一管理,不需要到处定义。使用时直接引用,利用maven依赖传递特性。


http://www.ppmy.cn/embedded/160328.html

相关文章

react的antd表格数据回显在form表单中

1、首先为table添加编辑按钮 {title: 操作,align: center,render: (_: any, record: any) > (<div style{{ display: flex, alignItems: center, justifyContent: space-evenly }}><Buttonsize"small"onClick{() > deitor(record)} style{{ margin…

哪些专业跟FPGA有关?

FPGA产业作为近几年新兴的技术领域&#xff0c;薪资高、待遇好&#xff0c;吸引了大量的求职者。特别是对于毕业生&#xff0c;FPGA领域的岗位需求供不应求。那么&#xff0c;哪些专业和FPGA相关呢&#xff1f; 哪些专业跟FPGA有关&#xff1f; 微电子学与固体电子学、微电子科…

MySQL万能备份脚本

此脚本适用于 MySQL 各个生命周期的版本 #!/bin/bash # mybackup.sh# 备份保留天数&#xff0c;建议保留三天 days7 # 备份时间 time$(date %Y%m%d%H%M%S) # 备份保存路径 backup_dir/opt/backup # 备份工具 toolmysqldump # 端口 port"3306" # 是否采用 --all-data…

LeetCode 每日一题 2025/1/27-2025/2/2

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 1/27 45. 跳跃游戏 II1/28 119. 杨辉三角 II1/29 219. 存在重复元素 II1/30 350. 两个数组的交集 II1/31 541. 反转字符串 II2/1 81. 搜索旋转排序数组 II2/2 598. 区间加法…

第五天 初步了解ArkTS和ArkUI

初步了解ArkTS和ArkUI&#xff0c;可以从以下几个方面进行概述&#xff1a; 一、ArkTS简介 定义与关系&#xff1a; ArkTS是HarmonyOS&#xff08;鸿蒙系统&#xff09;优选的主力应用开发语言。它基于TypeScript&#xff08;TS&#xff09;进行扩展&#xff0c;兼容TS的所有特…

【Spring Boot】解锁高效安全之门:登录令牌技术的实战应用与价值解析

前言 &#x1f31f;&#x1f31f;本期讲解关于token令牌技术介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说…

langchain教程-2.prompt

前言 该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial 我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容 这是教程清单 1.初试langchain2.prompt3.OutputParser/输出解析4.model/vllm模型部署和langchain调用5.DocumentLoader/多种文档…

Java集合概述(Ⅱ)

基础 之前写过一个比较粗糙的版本&#xff1a;Java集合概述 本文章补充了Java集合体系当中的一些细节 Collection接口的方法 List接口&#xff0c;Set接口都会继承这些方法 List接口 特点&#xff1a;存取顺序有序&#xff08;因为有下标&#xff09;&#xff0c;可重复&a…