返回顶部
首页 > 资讯 > 后端开发 > Python >Java使用Maven BOM统一管理版本号的实现
  • 405
分享到

Java使用Maven BOM统一管理版本号的实现

2024-04-02 19:04:59 405人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一个中大型的 Java 项目往往包含若干 jar 包,这些 JAR 包有着不同的版本号。如果这些 JAR 包单独发布,然后直接通过版本号引用相应的 JAR 包,不同版本的兼容性维护将

一个中大型的 Java 项目往往包含若干 jar 包,这些 JAR 包有着不同的版本号。如果这些 JAR 包单独发布,然后直接通过版本号引用相应的 JAR 包,不同版本的兼容性维护将变得十分麻烦。为了解决这个问题,可以让一个特殊的模块引用这些 JAR 包,将版本号定义在这个模块中,模块中的 JAR 都是兼容的,对外发布时只发布这个特殊模块。这个特殊模块就是 BOM(Bill Of Materials)。

著名的 Spring Boot 就使用了这种方式来管理版本号,这个模块就是 spring-boot-dependencies,用户在使用 Spring Boot Starter 相关依赖时引入特定版本的 spring-boot-dependencies,然后在引入其它依赖时只需要声明 group 和 name 即可,不需要再指定版本号了。当然,在 Gradle 中使用 Spring Boot 插件,或者在 Maven 中使用 spring-boot-starter-parent 作为父模块也能够达到类似的效果。

本文将介绍如何通过 Gradle 来制作一个 BOM 以及如何在 Gradle 中使用 BOM。作为 Maven 中的一个概念,也可以使用 Maven 也可以制作和使用 BOM,但本文不涉及。

1. BOM 介绍

BOM (Bill Of Material) 是 Maven 仓库中的一个概念,它本质也是一个可被引用的包,但不包含代码,只是声明了一系列其它包。例如:Maven 中央仓库中的 spring-boot-dependencies](https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.4.4/) 包。它只有一个 .pom 文件。

下面是 Maven 官网上的一个简单的 BOM 的 .pom 文件:


<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">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>bom</artifactId>
  <version>1.0.0</version>
  <packaging>pom</packaging>
  <properties>
    <project1Version>1.0.0</project1Version>
    <project2Version>1.0.0</project2Version>
  </properties>
 
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project1</artifactId>
        <version>${project1Version}</version>
      </dependency>
      <dependency>
        <groupId>com.test</groupId>
        <artifactId>project2</artifactId>
        <version>${project2Version}</version>
      </dependency>
    </dependencies>
  </dependencyManagement>
 
  <modules>
    <module>parent</module>
  </modules>
</project>

这个文件声明了两个包(project1 和 project2)及其版本号,和一般 .pom 文件中的声明不同的是, 节点外面还包含了一层 节点。以上就是 BOM 包中最核心的文件的基本结构了;基于 Gradle 发布 BOM 包的本质就是生成这样的一个文件。

2. 使用 Gradle 制作一个 BOM

这里我们假定要创建一个 BOM,用来统一管理三方 Java 包,其它业务模块通过引用这个 BOM 来间接引用需要使用的第三方 Java 包。工程完整代码:https://GitHub.com/Robothy/gradle-bom-example

2.1 创建 BOM 工程

Gradle 中的 BOM 工程需要使用 java-platfORM 插件,这样的工程是一个不包含源代码,只包含包声明的特殊的组件,也被称为平台(platform)。

build.gradle 部分代码


plugins {
    id 'java-platform'
}

dependencies {
    constraints {
        // 声明一些三方包及其版本号
        api "org.apache.kafka:kafka-clients:2.6.0"
        api "Redis.clients:jedis:3.5.2"
    }
}

上面代码中,三方包的声明没有放在 dependencies 中,而是放在了 constraints 里面。这表示如果使用了其中的包,优先使用 constraints 中声明的版本。

BOM 项目中声明包的方式有两种:

  • api 表示包在编译期可见。
  • runtime 表示包在运行期间可见。

2.2 BOM 的发布

BOM 的发布需要使用 maven-publish 插件,其发布配置如下:


publishing {
    publications {
        thirdPartPlatform(MavenPublication){
            from components.javaPlatform
            artifactId = "third-part-dependencies"
        }
    }

    repositories {
        mavenLocal()
    }
}

BOM 的命名一般以 -dependencies 结尾,这里我们取名为 third-part-dependnecies。

执行 ./gradlew.bat publish 就可以将 BOM 发布到本地的 Maven 仓库了。发布的 artifacts 包含两个主要文件(.pom 和 .module)和若干校验文件。其中 .pom 的文件内容为 Maven 官方定义的 BOM 的标准格式,而.module 文件内容是 Gradle 描述元数据的一种格式。

2.3 BOM 的使用

普通的 Java 应用或者 Java 库使用 BOM 的时候需要先添加 BOM 依赖,然后使用其它的库。例如:


// 引入 BOM
implementation platform("org.example:third-part-dependencies:1.0")

// 引入包,这时不需要再指定版本号
implementation "org.apache.kafka:kafka-clients"

当然,BOM 工程或者说 platform 工程也可以使用 BOM。

使用的时候需要在 dependencies 下面引入 BOM,然后在 constraints 下面声明要使用的库,声明的时候无须指定版本。另外,需要在 configurations 中调用 javaPlatform.allowDependencies(),否则会报错。


configurations{
    javaPlatform.allowDependencies()
}

dependencies {
    api platform("org.springframework.boot:spring-boot-dependencies:2.4.4")
    constraints {
        api "org.apache.kafka:kafka-clients:2.6.0"
        api "redis.clients:jedis:3.5.2"
        api "org.springframework.batch:spring-batch-core"
    }
}

3 参考

[1] Introduction to the Dependency Mechanism

[2] The Java Platform Plugin

到此这篇关于Java使用Maven BOM统一管理版本号的实现的文章就介绍到这了,更多相关Maven BOM统一管理版本号内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java使用Maven BOM统一管理版本号的实现

本文链接: https://lsjlt.com/news/124054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java使用Maven BOM统一管理版本号的实现
    一个中大型的 Java 项目往往包含若干 JAR 包,这些 JAR 包有着不同的版本号。如果这些 JAR 包单独发布,然后直接通过版本号引用相应的 JAR 包,不同版本的兼容性维护将...
    99+
    2024-04-02
  • Java如何使用Maven BOM统一管理版本号
    这篇文章将为大家详细讲解有关Java如何使用Maven BOM统一管理版本号,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序...
    99+
    2023-06-14
  • IDEA配置Maven并版本统一管理的实现
    目录1.Maven安装2.Maven配置3.IDEA全局配置Maven4.Maven统一管理6.子模块依赖管理1.Maven安装 前往官网下载:https://maven.apach...
    99+
    2024-04-02
  • 使用Swagger实现接口版本号管理方式
    目录Swagger实现接口版本号管理使用swagger测试接口Swagger实现接口版本号管理 前言:使用swagger暴露对外接口时原则是每个系统在不同的迭代版本仅仅需要暴露该迭代...
    99+
    2024-04-02
  • 【SpringBoot】Maven 版本管理与 flatten-maven-plugin 插件的使用及分析
    1. flatten-maven-plugin 介绍 1.1 环境 IntelliJ IDEA 2021.3JDK 1.8.0_301Apache Maven 3.8.1org.codehaus.mo...
    99+
    2023-09-05
    spring boot maven java
  • Java实现学生信息管理系统IO版本
    学生信息管理系统IO版本代码实现(java),供大家参考,具体内容如下 之前写过的一个学生信息管理系统是用集合类来写的,但是不能实现代码在文档中的存储功能,每次运行过后都得重新输入数...
    99+
    2024-04-02
  • Java实现学生管理系统(控制台版本)
    目录前言介绍创建学生类Student main方法实现CRUD查询方法添加方法删除方法修改方法控制台打印前言介绍 最近很多同学找我帮忙做一些课程设计或Web前端大作业、其中...
    99+
    2024-04-02
  • Java实现ATM银行管理系统(控制台版本)
    目录前言介绍创建抽象类Card类创建普通银行类继承Card创建普通信用卡继承Card创建普通医保卡继承CardATM主要方法业务类逻辑实现main方法测试启动类控制台打印前言介绍 最...
    99+
    2024-04-02
  • 怎么使用Java实现简易版的图书管理系统
    这篇文章主要介绍“怎么使用Java实现简易版的图书管理系统”,在日常操作中,相信很多人在怎么使用Java实现简易版的图书管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Java实现简易版的图书管...
    99+
    2023-07-02
  • Java如何实现学生管理系统控制台版本
    本篇内容介绍了“Java如何实现学生管理系统控制台版本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!创建学生类Student pu...
    99+
    2023-07-02
  • Java实现学生管理系统(IO版)
    本文实例为大家分享了Java实现学生管理系统的具体代码,供大家参考,具体内容如下 图解:  cade:  student.java public class ...
    99+
    2024-04-02
  • 使用Django怎么实现一个账号密码管理系统
    这期内容当中小编将会给大家带来有关使用Django怎么实现一个账号密码管理系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、环境搭建需安装:python3.6Pycharm专业版django 2.2....
    99+
    2023-06-14
  • Java实现简易版的【图书管理系统】
    目录 🌎1.分析图书管理系统的功能 🌍 2.在IDEA中进行功能类的创建 🦄2.1  创建一个名为book的包,里面存放书相关的 🦄 2.2 创建一个名为Operation...
    99+
    2023-09-11
    java
  • Java如何实现ATM银行管理系统控制台版本
    这篇文章主要讲解了“Java如何实现ATM银行管理系统控制台版本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现ATM银行管理系统控制台版本”吧!创建抽象类Card类abstr...
    99+
    2023-07-02
  • 使用VSCode实现Java项目管理 Maven相关插件及配置(Maven换源)
    文章目录 前言插件Maven配置一、maven的安装二、路径配置三、修改Maven依赖下载源四、修改库文件路径五、配置VSCode Maven使用 前言 之前一直使用VSCode开发C...
    99+
    2023-09-03
    java maven vscode
  • Java如何实现实现IO版学生管理系统
    这篇文章将为大家详细讲解有关Java如何实现实现IO版学生管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体内容如下图解: cade: student.javapublic&n...
    99+
    2023-06-29
  • 如何使用NPM来管理Java的版本依赖?
    在Java的开发过程中,我们经常需要使用到各种各样的库和框架,这些依赖的版本管理是非常重要的一项工作。在Node.js的生态中,我们通常会使用NPM来管理依赖,那么,我们是否也可以使用NPM来管理Java的版本依赖呢?本文将会介绍如何使用...
    99+
    2023-09-23
    索引 npm leetcode
  • Java实现用户管理系统
    基于Java的简单的用户管理系统,供大家参考,具体内容如下 此系统功能和方法都比较简单 本次系统通过控制台输入商品的基本信息,加入管理员的登录与对是否为管理员进行操作 对于功能的实现...
    99+
    2024-04-02
  • 如何使用Java实现图书管理系统
    本篇内容介绍了“如何使用Java实现图书管理系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一. 功能介绍1.1 使用介绍1.输入姓名2....
    99+
    2023-07-02
  • 一文读懂Python版本管理工具Pyenv使用
    目录pyenv简单介绍pyenv工作原理linux安装win10安装使用pyenv简单介绍 在日常运维中, 经常遇到这样的情况: 系统自带的Python是2.x,而业务部署需要Python 3.x 环境, 此时需要在...
    99+
    2022-06-02
    Python版本管理Pyenv使用 Python Pyenv使用
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作