系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、本文要点
- 二、开发环境
- 三、添加脚手架配置
- 四、完整脚手架目录
- 五、运行一下
- 六、小结
前言
随着需求的变更或者流量暴增,服务被拆分得越来越单一。但每次搭建新服务都是比较痛苦的事情,得重头开始复制黏贴。不仅仅纯搬砖工作没技术含量,而且容易出错,且每个同学搭建的项目千差万别,各种不统一。那怎样解决这种问题呢?本文将介绍制作自定义项目脚手架,去生成项目的基本架构,做到统一组件版本、统一配置、统一风格。
一、本文要点
接上文,我们已经整合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部署文件、常用工具组件等等。有了项目脚手架,新建服务不再累,还有利于团队的代码管理哦。下一篇《搭建大型分布式服务(十九)面试官:你做过Spring框架功能拓展吗?》