搭建大型分布式服务(十八)Maven自定义项目脚手架

321 阅读3分钟

系列文章目录


@TOC


前言

随着需求的变更或者流量暴增,服务被拆分得越来越单一。但每次搭建新服务都是比较痛苦的事情,得重头开始复制黏贴。不仅仅纯搬砖工作没技术含量,而且容易出错,且每个同学搭建的项目千差万别,各种不统一。那怎样解决这种问题呢?本文将介绍制作自定义项目脚手架,去生成项目的基本架构,做到统一组件版本、统一配置、统一风格。

一、本文要点

接上文,我们已经整合mysql、redis、kafka、es、hikari、dubbo等组件,并且已经整合到Apollo,基本满足一个微服务的需求。所以我们可以基于这个项目,生成通用项目脚手架,以后新建微服务项目的时候都可以复用这些配置,一键生成微服务。系列文章完整目录

  • maven脚手架

  • springboot + mybatis + Hikari + elasticsearch + redis + dubbo + apollo

二、开发环境

  • jdk 1.8
  • maven 3.6.2
  • springboot 2.4.3
  • apollo 1.8.1
  • apollo cleint 1.8.0
  • idea 2020
  • dubbo-starter 2.0
  • dubbo 2.6.0
  • zookeeper 3.4.13
  • redis 4.0 mysql 5.6

三、添加脚手架配置

1、由于.gitignore 文件不会自动打包到maven脚手架jar中,所以需要在项目复制.gitignore文件并命名为 __gitignore__文件,用来传递给脚手架。 在这里插入图片描述

2、增加archetype.properties文件,用来排除一些文件,避免污染新项目。

## generate for archetype-metadata.xml
excludePatterns=archetype.properties,*.iml,.idea/,.idea/libraries,logs/,build.sh,build.sh,maven.distribution,deploy.sh
## generate .__gitignore__ file
gitignore=.gitignore

3、增加编译脚本,减轻手工操作(可选)。

#!/bin/bash

# 生成脚手架
mvn clean archetype:create-from-project # -DpackageName=com.mmc.lesson

# shellcheck disable=SC2164
cd target/generated-sources/archetype

ls -al

# 安装脚手架到本地仓库,如果需要安装到远程仓库需要另外执行命令
mvn install

cd -

4、新建仓库文件maven.distribution(可选)。

    <distributionManagement>
        <repository>
            <id>xxx_public</id>
            <name>internal repository for releases</name>
            <url>https://mirrors.xxx.com/repository/maven/x-common</url>
        </repository>
        <snapshotRepository>
            <id>xxx_snapshot</id>
            <name>internal repository for snapshots</name>
            <url>https://mirrors.xxx.com/repository/maven/x-snapshot</url>
        </snapshotRepository>
    </distributionManagement>

5、增加发布脚手架到中央仓库脚本(可选)。

#!/bin/bash

if [ -f ./target/generated-sources/archetype/pom.xml ]; then

  dbm=$(cat ./target/generated-sources/archetype/pom.xml | grep distributionManagement | wc -l)
  if [ $dbm -le 0 ]; then

    # linux
    # sed -i '/<\/scm>/ r maven.distribution' ./target/generated-sources/archetype/pom.xml

    # macOS
    sed -i "" '/<\/scm>/ r maven.distribution' ./target/generated-sources/archetype/pom.xml

  else

    echo "already exists."

  fi

  cd ./target/generated-sources/archetype

  mvn install deploy

  cd -

fi

四、完整脚手架目录

在这里插入图片描述

六、运行一下

1、在member根目录执行脚本。

sh ./build.sh

2、可以看到脚手架已经制作好了。

[INFO] --- maven-archetype-plugin:3.2.0:jar (default-jar) @ member-archetype ---
[INFO] Building archetype jar: /Users/xxx/Codes/mmc-workspace/member/target/generated-sources/archetype/target/member-archetype-1.0.0-SNAPSHOT.jar
[INFO] Building jar: /Users/xxx/Codes/mmc-workspace/member/target/generated-sources/archetype/target/member-archetype-1.0.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.968 s
[INFO] Finished at: 2021-05-13T18:06:08+08:00
[INFO] ------------------------------------------------------------------------
[INFO] Archetype project created in /Users/xxx/Codes/mmc-workspace/member/target/generated-sources/archetype
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for member 1.0.0-SNAPSHOT:
[INFO] 
[INFO] member ............................................. SUCCESS [  2.708 s]
[INFO] member-api ......................................... SUCCESS [  0.024 s]
[INFO] member-service ..................................... SUCCESS [  0.009 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.145 s
[INFO] Finished at: 2021-05-13T18:06:08+08:00
[INFO] ------------------------------------------------------------------------

3、利用脚手架生成门店服务新项目,例如shop。

mvn archetype:generate  -DgroupId="com.mmc.lesson" -DartifactId="shop" -Dversion=1.0-SNAPSHOT -Dpackage="com.mmc.lesson.shop" -DarchetypeArtifactId=member-archetype  -DarchetypeGroupId=com.mmc.lesson -DarchetypeVersion=1.0.0-SNAPSHOT -B

4、效果。 在这里插入图片描述

七、小结

至此,项目脚手架制作成功啦。感兴趣的同学可以更加各自团队的习惯,丰富一下脚手架的内容。例如,增加docker部署文件、常用工具组件等等。有了项目脚手架,新建服务不再累,还有利于团队的代码管理哦。下一篇《搭建大型分布式服务(十九)Springboot 拓展-定制日志组件

加我一起交流学习!