微服務下 Spring Boot Maven 工程依賴關係管理

weixin_33982670發表於2018-06-08

單體 Spring Boot Maven 工程

最基本的 pom.xml 包含工程資訊、Spring Boot 父工程、屬性配置、依賴包、構建外掛

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <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">

  3.    <modelVersion>4.0.0</modelVersion>

  4.  

  5.    <!-- 工程資訊 -->

  6.    <groupId>com.anoyi</groupId>

  7.    <artifactId>demo</artifactId>

  8.    <version>1.0-SNAPSHOT</version>

  9.  

  10.     <!-- Spring Boot 父工程 -->

  11.    <parent>

  12.        <groupId>org.springframework.boot</groupId>

  13.        <artifactId>spring-boot-starter-parent</artifactId>

  14.        <version>2.0.2.RELEASE</version>

  15.    </parent>

  16.  

  17.    <properties>

  18.        <!-- 相關屬性、第三方依賴版本號 -->

  19.    </properties>

  20.  

  21.    <dependencies>

  22.        <!-- Spring Boot 依賴、其他依賴 -->

  23.    </dependencies>

  24.  

  25.    <!-- 構建 -->

  26.    <build>

  27.        <plugins>

  28.            <plugin>

  29.                <groupId>org.springframework.boot</groupId>

  30.                <artifactId>spring-boot-maven-plugin</artifactId>

  31.            </plugin>

  32.        </plugins>

  33.    </build>

  34.  

  35. </project>

微服務多 Spring Boot 應用依賴關係管理

  • 藍色:僅 pom.xml 檔案,無程式碼

  • 黃色:包含 pom.xml 檔案,一些具有通用性的程式碼,如工具類等

  • 綠色:Spring Boot 應用工程,含有啟動類,與上述單體應用類似

藍色:自定義 Parent

為避免微服務下包的濫用,應該統一管理第三方依賴的版本,同時為了方便 mvn deploy 操作,可以加上公司內部 Maven 私服的資訊。

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project xmlns="http://maven.apache.org/POM/4.0.0"

  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  5.    <modelVersion>4.0.0</modelVersion>

  6.  

  7.    <!-- 自定義 Parent -->

  8.    <groupId>com.anoyi</groupId>

  9.    <artifactId>parent</artifactId>

  10.    <version>1.0.0.RELEASE</version>

  11.    <packaging>pom</packaging>

  12.  

  13.    <!-- 繼承 Spring Boot -->

  14.    <parent>

  15.        <groupId>org.springframework.boot</groupId>

  16.        <artifactId>spring-boot-starter-parent</artifactId>

  17.        <version>2.0.2.RELEASE</version>

  18.    </parent>

  19.  

  20.    <properties>

  21.        <!-- 第三方依賴版本號 -->

  22.        <common.version>1.0.0.RELEASE</commont.version>

  23.    </properties>

  24.  

  25.    <dependencyManagement>

  26.        <dependencies>

  27.            <!-- 第三方依賴 -->

  28.            <dependency>

  29.                <groupId>com.anoyi</groupId>

  30.                <artifactId>common</artifactId>

  31.                <version>${common.version}</version>

  32.            </dependency>

  33.        </dependencies>

  34.    </dependencyManagement>

  35.  

  36.    <!-- 公司內部私有 Maven 倉庫 -->

  37.    <distributionManagement>

  38.        <repository>

  39.            <id>central</id>

  40.            <name>*****</name>

  41.            <url>*****</url>

  42.        </repository>

  43.    </distributionManagement>

  44.  

  45. </project>

常用操作

  1. # 安裝到本地、推送到 Maven 私服

  2. mvn clean install deploy

黃色:自定義依賴

比如一些通用的工具類包,為了避免程式碼在不用專案的複製,可以製作成一個 Maven 模組打包,用於其他專案引用。如果這個工具包還依賴了一些其他包,可以在上述 Parent 中統一管理這些包的版本。

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project xmlns="http://maven.apache.org/POM/4.0.0"

  3.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  4.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  5.    <modelVersion>4.0.0</modelVersion>

  6.  

  7.    <groupId>com.anoyi</groupId>

  8.    <artifactId>common</artifactId>

  9.    <version>1.0.0.RELEASE</version>

  10.    <packaging>jar</packaging>

  11.  

  12.    <parent>

  13.        <groupId>com.anoyi</groupId>

  14.        <artifactId>parent</artifactId>

  15.        <version>1.0.0.RELEASE</version>

  16.    </parent>

  17.  

  18.    <!-- 其他屬性配置 -->

  19.    <properties>

  20.         <!-- 可選填 -->

  21.    </properties>

  22.  

  23.    <!-- 公共依賴 -->

  24.    <dependencies>

  25.  

  26.        <!-- 框架 -->

  27.        <dependency>

  28.            <groupId>org.springframework.boot</groupId>

  29.            <artifactId>spring-boot-starter-web</artifactId>

  30.        </dependency>

  31.  

  32.        <!-- 工具類 -->

  33.        <dependency>

  34.            <groupId>com.alibaba</groupId>

  35.            <artifactId>fastjson</artifactId>

  36.        </dependency>

  37.  

  38.        <!-- 其他依賴 -->

  39.  

  40.    </dependencies>

  41.  

  42. </project>

常用操作

  1. # 安裝到本地、推送到 Maven 私服

  2. mvn clean install deploy

構建出來的 jar 包中僅包含編譯後的 class 檔案及依賴關係,非常輕量!

綠色:Spring Boot Application

最終的目標是構建出可執行的 jar 包,就需要打包所有依賴的程式碼檔案到一起,使用 Spring Boot Maven 外掛就能輕易完成。

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <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">

  3.    <modelVersion>4.0.0</modelVersion>

  4.  

  5.    <groupId>com.anoyi</groupId>

  6.    <artifactId>server-general</artifactId>

  7.    <version>1.0-SNAPSHOT</version>

  8.  

  9.    <!-- 自定義 Parent 工程 -->

  10.    <parent>

  11.        <groupId>com.anoyi</groupId>

  12.        <artifactId>parent</artifactId>

  13.        <version>1.0.0.RELEASE</version>

  14.    </parent>

  15.  

  16.    <dependencies>

  17.  

  18.        <!-- Spring Boot 依賴、自定義依賴 或 其他依賴 -->

  19.        <dependency>

  20.            <groupId>com.anoyi</groupId>

  21.            <artifactId>common</artifactId>

  22.        </dependency>

  23.  

  24.    </dependencies>

  25.  

  26.    <!-- 構建可執行的 jar 包 -->

  27.    <build>

  28.        <plugins>

  29.            <plugin>

  30.                <groupId>org.springframework.boot</groupId>

  31.                <artifactId>spring-boot-maven-plugin</artifactId>

  32.            </plugin>

  33.        </plugins>

  34.    </build>

  35.  

  36. </project>

常用操作

  1. # 構建可執行 jar 包到 target 目錄

  2. mvn clean package

業務程式碼複用

解耦業務,合理拆分微服務模組,使用 RPC 框架,能有效的複用程式碼。

輕量級微服務架構,容器化環境,PRC 框架可以使用 spring-boot-starter-grpc

相關文章