一、場景:
開發中常常遇到多個項目共同依賴某些公共項目的情況
- 比如:“二維碼生成-解析包”就同時被內網端和外網端依賴使用;
- 再比如:基於Dubbo-RPC的微服務系統,生產者和消費者往往依賴同一批service接口,此時最佳實踐就是將這批接口獨立成maven模塊,打包成sdk包;
- 還比如:自定義的Spring-boot-starter;
共享依賴包可以有效的復用代碼,同時也提高了可維護性。
二、打包方式
- 關鍵點在共享依賴包的pom.xml配置文件的兩項;
- 快速構建一個空的Spring-boot項目,如果此獨立jar包不需要,不勾選任何功能組件,目錄結構如下:
├─.mvn
│ └─wrapper
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─yang
│ │ └─sdk
│ └─resources
└─test
└─java
└─com
└─yang
└─sdk
刪掉test、resources目錄和MainClass;添加service目錄已存放共享源碼,此時目錄結構如下:
├─.mvn
│ └─wrapper
└─src
└─main
└─java
└─com
└─yang
└─sdk
└─service
- 修改pom.xml
關鍵點在packaging節點聲明本模塊達成jar包,build節點聲明打包的源碼位置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yang</groupId>
<artifactId>sdk</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>sdk</name>
<description>Demo project for sharing-jar</description>
<properties>
<java.version>1.8</java.version>
</properties>
<!--
<dependencies>
若有需要可以添加依賴
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>7.7.2</version>
</dependency>
</dependencies>
-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.*</include>
</includes>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
- 上層模塊可以使用GAV坐標,對共享模塊進行依賴,打包父pom即可自動將共享包打入上層模塊中,形成完整的fat-jar。
若上層模塊和共享模塊不在同一個父pom下,通過maven-install將共享模塊的jar安裝到本地maven-repo和nexus中即可。