將多個第三方包封裝成一個項目後,如果你的目的是讓其他開發人員可以直接引用這些依賴,一般來說有兩種常見的方式: 打成JAR包:將封裝好的項目編譯打包成JAR文件,其他開發人員可以將這個JAR文件添加到他們的項目中,併在項目的構建工具(比如Maven)中配置該JAR作為依賴。這樣做的好處是簡單直接,其他 ...
將多個第三方包封裝成一個項目後,如果你的目的是讓其他開發人員可以直接引用這些依賴,一般來說有兩種常見的方式:
-
打成JAR包:將封裝好的項目編譯打包成JAR文件,其他開發人員可以將這個JAR文件添加到他們的項目中,併在項目的構建工具(比如Maven)中配置該JAR作為依賴。這樣做的好處是簡單直接,其他開發人員只需引入JAR包即可使用你封裝的功能。
-
打成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.boot
的spring-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>
引用後,如圖所示,只有兩個包在依賴列表中,做到了按需引用
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!