专栏首页码农小胖哥的码农生涯微服务下 Spring Boot Maven 工程依赖关系管理

微服务下 Spring Boot Maven 工程依赖关系管理

单体 Spring Boot Maven 工程

最基本的 pom.xml 包含工程信息、Spring Boot 父工程、属性配置、依赖包、构建插件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 工程信息 -->
    <groupId>com.anoyi</groupId>
    <artifactId>demo</artifactId>
    <version>1.0-SNAPSHOT</version>

     <!-- Spring Boot 父工程 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
    </parent>

    <properties>
        <!-- 相关属性、第三方依赖版本号 -->
    </properties>

    <dependencies>
        <!-- Spring Boot 依赖、其他依赖 -->
    </dependencies>

    <!-- 构建 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

微服务多 Spring Boot 应用依赖关系管理

  • 蓝色:仅 pom.xml 文件,无代码
  • 黄色:包含 pom.xml 文件,一些具有通用性的代码,如工具类等
  • 绿色:Spring Boot 应用工程,含有启动类,与上述单体应用类似

蓝色:自定义 Parent

为避免微服务下包的滥用,应该统一管理第三方依赖的版本,同时为了方便 mvn deploy 操作,可以加上公司内部 Maven 私服的信息。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 自定义 Parent -->
    <groupId>com.anoyi</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0.RELEASE</version>
    <packaging>pom</packaging>

    <!-- 继承 Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
    </parent>

    <properties>
        <!-- 第三方依赖版本号 -->
        <common.version>1.0.0.RELEASE</commont.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- 第三方依赖 -->
            <dependency>
                <groupId>com.anoyi</groupId>
                <artifactId>common</artifactId>
                <version>${common.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!-- 公司内部私有 Maven 仓库 -->
    <distributionManagement>
        <repository>
            <id>central</id>
            <name>*****</name>
            <url>*****</url>
        </repository>
    </distributionManagement>

</project>

常用操作

# 安装到本地、推送到 Maven 私服
mvn clean install deploy

黄色:自定义依赖

比如一些通用的工具类包,为了避免代码在不用项目的复制,可以制作成一个 Maven 模块打包,用于其他项目引用。如果这个工具包还依赖了一些其他包,可以在上述 Parent 中统一管理这些包的版本。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.anoyi</groupId>
    <artifactId>common</artifactId>
    <version>1.0.0.RELEASE</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>com.anoyi</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.0.RELEASE</version>
    </parent>

    <!-- 其他属性配置 -->
    <properties>
         <!-- 可选填 -->
    </properties>

    <!-- 公共依赖 -->
    <dependencies>

        <!-- 框架 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 工具类 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>

        <!-- 其他依赖 -->

    </dependencies>

</project>

常用操作

# 安装到本地、推送到 Maven 私服
mvn clean install deploy

构建出来的 jar 包中仅包含编译后的 class 文件及依赖关系,非常轻量!

绿色:Spring Boot Application

最终的目标是构建出可运行的 jar 包,就需要打包所有依赖的代码文件到一起,使用 Spring Boot Maven 插件就能轻易完成。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.anoyi</groupId>
    <artifactId>server-general</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 自定义 Parent 工程 -->
    <parent>
        <groupId>com.anoyi</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.0.RELEASE</version>
    </parent>

    <dependencies>

        <!-- Spring Boot 依赖、自定义依赖 或 其他依赖 -->
        <dependency>
            <groupId>com.anoyi</groupId>
            <artifactId>common</artifactId>
        </dependency>

    </dependencies>

    <!-- 构建可执行的 jar 包 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

常用操作

# 构建可执行 jar 包到 target 目录
mvn clean package

业务代码复用

解耦业务,合理拆分微服务模块,使用 RPC 框架,能有效的复用代码。

轻量级微服务架构,容器化环境,PRC 框架可以使用 spring-boot-starter-grpc

本文分享自微信公众号 - 码农小胖哥(Felordcn)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot使用Graylog日志收集

    Graylog是一个生产级别的日志收集系统,集成Mongo和Elasticsearch进行日志收集。其中Mongo用于存储Graylog的元数据信息和配置信息,...

    码农小胖哥
  • 只会JDBC连接MySQL?来试试R2DBC吧

    尽管一些NoSQL数据库供应商为其数据库提供了反应式数据库客户端,但对于大多数项目而言,迁移到NoSQL并不是一个理想的选择。这促使了一个通用的响应式关系数据库...

    码农小胖哥
  • Java开发中商业计算请务必使用BigDecimal来进行计算!

    今天群里一个初级开发者问为什么测试人员测出来他写的价格计算模块有计算偏差的问题,他检查了半天也没找出问题。这里小胖哥要提醒你,商业计算请务必使用`BigDeci...

    码农小胖哥
  • springCloud当中Eureca服务提供者Provider的部署

    服务提供者的部署: 做个普通的maven project,quickstart archetype。改成jdk.8。运行程序后会出现:EMERGENCY! E...

    马克java社区
  • Maven初探-如何发布到Tomcat容器中

    写在开始 上一篇文章中有讲到,Maven初探-如何快速入手一个项目 提到如何发布到Jetty容器中,但是大多数小伙伴们还是倾向于使用Tomcat容器。 配置T...

    小柒2012
  • 微服务下 Spring Boot Maven 工程依赖关系管理

    最基本的 pom.xml 包含工程信息、Spring Boot 父工程、属性配置、依赖包、构建插件

    轻量级微服务
  • 极速体验SpringCloud Gateway

    Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringClou...

    程序员欣宸
  • maven版SpringBoot的Hello World

    1)新建maven项目,package方式为jar. 用archetype quick start.参考我视频目录下的SpringbootMaven项目。

    马克java社区
  • springCloud当中Eureca消费者Consumer的部署

    3.消费者的部署: 做个普通的maven project,quickstart archetype。改成jdk.8。过去我们都是: @Service publ...

    马克java社区
  • (二) SpringBoot起飞之路-入门原理分析

    这是第二篇,关于前一篇入门涉及到的一些基本原理讲解,有兴趣的朋友可以去了解一下前一篇

    BWH_Steven

扫码关注云+社区

领取腾讯云代金券