首页 > 其他分享 >springboot~封装依赖引用包jar还是pom,哪种更规范

springboot~封装依赖引用包jar还是pom,哪种更规范

时间:2024-05-28 15:14:27浏览次数:23  
标签:依赖 封装 springboot 开发人员 JAR jar pom 引用

将多个第三方包封装成一个项目后,如果你的目的是让其他开发人员可以直接引用这些依赖,一般来说有两种常见的方式:

  1. 打成JAR包:将封装好的项目编译打包成JAR文件,其他开发人员可以将这个JAR文件添加到他们的项目中,并在项目的构建工具(比如Maven)中配置该JAR作为依赖。这样做的好处是简单直接,其他开发人员只需引入JAR包即可使用你封装的功能。

  2. 打成POM包:将封装好的项目发布到仓库中,并提供一个POM文件,其他开发人员可以通过在他们的项目中引入这个POM文件来获取你封装的依赖。这种方式更符合Maven的依赖管理机制,能够更好地管理和控制依赖版本、传递性依赖等。

综合考虑,如果你的封装项目只包含依赖的JAR文件,并没有其他需要特别配置的内容,那么直接打成JAR包可能更为简单;如果你希望提供更加灵活和规范的依赖管理方式,可以考虑打成POM包并发布到仓库中。

一,二,三方包

在软件开发中,通常我们将依赖的包分为三方包(Third-party package)、二方包(Second-party package)和一方包(First-party package)。

  • 一方包(First-party package):指的是由自己或者所在团队开发的包,也可以理解为自己项目内部的代码和库。

  • 二方包(Second-party package):通常指的是公司内部共享的、被多个团队或项目使用的包,也可以称为内部共享库。这些包不是公开发布到外部仓库的,而是在组织内部进行管理和分享。

  • 三方包(Third-party package):指的是外部开发者或组织开发并发布的可供公开访问和使用的包,比如常见的Maven中央仓库、JCenter等。开发人员可以通过引入这些第三方包来实现功能扩展或依赖管理。

根据以上定义,如果你封装的项目中包含的是第三方包(即外部开发者或组织开发的包),那么你可以选择将其打成JAR包或POM包提供给其他开发人员使用;如果封装的是公司内部共享的包(二方包),则可以考虑将其作为内部库进行管理和分享。

希望以上解释对你有所帮助,如果还有其他问题,请随时告诉我!

pom更规范

当我们希望将hutool,lombok,jax-rs等包,如果不希望其它开发人员再引用这些包,而通过一个二方包引用它们,可以将这些三方包写到pom里,例如

然后,开发人员在自己项目中,可以直接通过type为pom的形式,引用它们,这样作的好处就是,二方依赖包,只负责引用相同依赖,不与代码耦合,例如:

 <dependency>
      <groupId>com.lind</groupId>
      <artifactId>test-bom</artifactId>
      <version>1.0.0</version>
      <type>pom</type>
  </dependency>

如果你要使用的二方包里的三方包,只是某些需要,也可以在dependencyManagement中进行导入,通过按需进行真实的引用即可,这时再引用时,则不需要标识version属性了,例如org.springframework.bootspring-boot-dependencies就是做这事的,帮助spring管理相关依赖包的版本。

  • pom二方包项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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.lind</groupId>
    <artifactId>test-bom</artifactId>
    <version>1.0.0</version>
   <packaging>pom</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!-- 三方包包裹 -->
            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jaxrs</artifactId>
                <version>4.0.0.Beta5</version>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.8.27</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.32</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- 三方包包裹 -->
        <dependency>
            <groupId>org.jboss.resteasy</groupId>
            <artifactId>resteasy-jaxrs</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

开发人员在真实项目中,按需引用

    <dependencyManagement>
        <dependencies>
            <!--spring boot 版本-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-dependencies.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 二方包 -->
            <dependency>
                <groupId>com.lind</groupId>
                <artifactId>test-bom</artifactId>
                <version>1.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
        </dependency>
    </dependencies>

引用后,如图所示,只有两个包在依赖列表中,做到了按需引用

标签:依赖,封装,springboot,开发人员,JAR,jar,pom,引用
From: https://www.cnblogs.com/lori/p/18218044

相关文章

  • SpringBoot系列---【线程池优雅停机,避免消费数据丢数的问题】
    1.问题项目中通过kafka来对接上游,在项目中写一个listener监听topTopic队列,for循环消费records,在for循环中处理成存储到es的对象,一次拉50条,使用自定义线程池esThreadPool异步推送到es中,但是每次停机就会丢数据,例:kafka消费了1000条,但是往es中存储比较慢,优雅停机的时候,esThreadPool......
  • 基于java中的springboot框架实现医药管理系统项目演示【内附项目源码+论文说明】
    基于java中的springboot框架实现医药管理系统项目演示【内附项目源码+LW说明】摘要计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即......
  • 基于java中的springboot框架实现秒杀系统项目演示【内附项目源码+论文说明】
    基于java中的springboot框架实现秒杀系统项目演示【内附项目源码+LW说明】摘要社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套基于SpringBoo......
  • 【wiki知识库】02.wiki知识库SpringBoot后端的准备
      ......
  • Java项目-基于springboot+vue的时间管理系统(源码+数据库+文档)​
    如需完整项目,请私信博主基于SpringBoot+Vue的时间管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括时间管理系统的网络应用,在外国时间管理系统已经......
  • Java项目-基于springboot+vue的社区维修平台(源码+数据库+文档)​
    如需完整项目,请私信博主基于SpringBoot+Vue的社区维修平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管......
  • 基于springboot实现电商应用系统项目【项目源码+论文说明】计算机毕业设计
    基于springboot实现电商应用系统演示摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本电商应用系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工......
  • 基于Springboot的图书个性化推荐系统 计算机毕业设计
    视频演示基于Springboot的图书个性化推荐系统计算机毕业设计前言图书个性化推荐系统的主要使用者分为管理员和学生,实现功能包括:管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退换图书管理、管理员管理、留言板管理、系统管理学生......
  • springboot整合Kafka的快速使用教程
        目录一、引入Kafka的依赖二、配置Kafka三、创建主题1、自动创建(不推荐)2、手动动创建四、生产者代码五、消费者代码 六、常用的KafKa的命令    Kafka是一个高性能、分布式的消息发布-订阅系统,被广泛应用于大数据处理、实时日志分析等场景。S......
  • springboot项目中数据库连接加密方法
    1、maven添加相应版本的依赖,比如com.github.ulisesbocchiojasypt-spring-boot-starter2.1.22、设置项目启动参数,此参数作为加密的盐值,比如-Djasypt.encryptor.password=盐值3、下载jasypt-xxx.jar包,用此jar生成加密后的数据库连接密码从这里下载http://www.jasypt.org/do......