制作基于maven的项目脚手架

Springboot的出现极大的简化了项目开发的配置,然而,到真实使用的时候还是会有一堆配置需要设定。比如依赖管理,各种插件,质量扫描配置,docker配置,持续集成配置,设置业务独特的架构配置等。这时候,如果创建一个包含这一切的脚手架,当需要创建项目的时候,只要create就好了。

create archetype from project

首先准备一个模板项目,包含了我们想要创建项目的一切基本属性。比如基本dependency bom,比如plugin,比如logback.xml, Dockerfile, Jenkinsfile, k8s.yml等.

比如这样的:

我们期望以后创建的项目都是这种结构,而且生成就可以直接运行,我只要添加我的业务逻辑即可。

首先,执行

mvn clean install

确保项目没有任何问题。然后

mvn archetype:create-from-project

执行完毕会生成了结构项目:

可以看到大部分文件都拷贝过来了,但依旧有几个文件丢失,比如Jenkinsfile, Dockerfile. 手动拷贝过来。还有些文件不需要,比如.idea的配置文件,删除。确定文件没有问题之后,查看target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml文件,里面定义了哪些文件包含。把不需要的去掉,把需要的加上。比如,导致丢掉Jenkinsfile的配置修改为

<fileSet encoding="UTF-8">
<directory>.deploy</directory>
<includes>
<include>**/*</include>
<include>**/*.yaml</include>
</includes>
</fileSet>

去掉.idea的配置。

如果代码里有groupId和artifactId的独特配置,观察下有没有变量替换。比如

@MapperScan(basePackages = "${package}.domain.mymodule.mapper")

我们可以使用${package}, ${group}, ${artifactId}, ${version}来代替一些变量。比如,我发现application.yml这个文件没有被替换,里面有重要的spring.application.name应该替换为项目名称。手动修改为 ${artifactId}。这还不行,修改archetype-metadata.xml

<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>

添加了filtered。

  • filtered表示是否替换文件中的变量
  • packaged表示是否在文件前缀添加group

接下来把模板安装到本地仓库

cd target\generated-sources\archetype
mvn clean install

就可以直接使用模板创建项目了。

根据本地模板创建项目

注意我们的模板版本在pom里,比如我的修改几次后版本为1.0.2。则可以

mvn archetype:generate  \
-DarchetypeCatalog=local \
-DgroupId=com.demo.mybiz \
-DartifactId=mybiz-myid \
-DarchetypeGroupId=com.demo \
-DarchetypeArtifactId=demo-boot-archetype \
-DarchetypeVersion=1.0.2 \
-DinteractiveMode=false
  • archetypeCatalog=local表示使用本地仓库
  • interactiveMode=false表示不是交互模式,不用选择
  • groupId=com.demo.mybiz 你新项目的group
  • artifactId=mybiz-myid 你新项目的id
  • archetypeGroupId=com.demo 我们模板的group
  • archetypeArtifactId=demo-boot-archetype 我们模板的id
  • archetypeVersion=1.0.1 我们模板的版本

打开查看,确认生成的项目

没有任何问题之后,可以发布模板。

发布模板到maven私服

发布maven私服就和发布普通maven项目一样,配置好url就可以了。

pom添加

<distributionManagement>
<repository>
<id>my-releases</id>
<url>http://maven.mymaven.com/nexus/content/repositories/release/</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>http://maven.mymaven.com/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

其中id一定要对应本地maven的settings.xml

<servers>
<server>
<id>my-snapshots</id>
<username>myuser</username>
<password>mypass</password>
</server>
<server>
<id>my-releases</id>
<username>myuser</username>
<password>mypass</password>
</server>
</servers>

最后执行

mvn deploy

之后可以直接使用,去掉archetypeCatalog=local即可。

后续展望

脚手架方便生成了公司的基本项目配置和架构,其实还可以做更多。比如对应CI Jenkins的job可以一键生成,比如代码生成后直接创建gitlab项目,关联Jenkins,比如监控面板添加项目配置。

只要输入者设置好项目组和管理人,权限也可以指定。最后做一个home page,登录,填写项目描述,确定生成项目。一个直接可以开发测试运行持续集成持续发布的项目脚手架就算完成了。

基于maven的项目脚手架,一键创建项目的项目模板的更多相关文章

  1. maven学习3,如何创建一个web项目

      Maven学习 (三) 使用m2eclipse创建web项目   1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...

  2. 如何在通过脚手架create-react-app 创建的react项目中配置 less

    首先感慨下 自己竟然有半年没登账户 ,干嘛去啦? 从刚接触vue 接手做两次版本之后 又让我这个小菜鸡 开始开发react项目,连react生命周期还没搞明白的时候 就开始进行第一版本的开发了,第一个 ...

  3. 新手如何创建一个vue项目 ---vue---新手创建第一个项目

    1.第一步安装node.js https://nodejs.org/en/ 前期可以下载软件包,后期熟练以后可以通过nvm进行 Node的版本切换以及升级 然后window+r  输入cmd 打开命令 ...

  4. Idea 创建maven web项目(手工创建)

    参考链接:https://www.cnblogs.com/justuntil/p/7511787.html 话不多说,直接上图: 1.创建maven项目 创建项目完成,项目结构如下: 2.项目部署配置 ...

  5. 十分钟快速创建 Spring Cloud 项目

    一般来说,Intelij IDEA 可以通过 Maven Archetype 来快速生成Maven项目,其实 IDEA 集成了 Spring 官方提供的 Spring Initializr,可以非常方 ...

  6. IDEA 创建Spring Boot 项目

    一.准备环境 配置Maven,打开设置页面File - Setting,快捷键Ctrl + Alt + S,找到Maven,默认是IDEA 自带的插件,User setting file 配置文件默认 ...

  7. 【3】Django创建第一个项目

    天地所以能长且久者,以其不自生,故能长生. --老子<道德经> 写在前面:Django在学习的过程中,我们会参考官方文档,从两部分进行讲解,第一部分主要是一个入门项目的搭建开发,第二部分是 ...

  8. 11. IDEA 在同一工作空间创建多个项目

    1.创建项目 二..创建工作空间 JavaWorkspace 1.File-> New Project -> 创建工作空间 JavaWorkspace,并 顺便创建项目 JavaOne 2 ...

  9. IDEA 在同一工作空间创建多个项目

    1.创建项目 二..创建工作空间 JavaWorkspace 1.File-> New Project -> 创建工作空间 JavaWorkspace,并 顺便创建项目 JavaOne 2 ...

随机推荐

  1. SQL中关键字的执行顺序

    作为一个SQL新手,看到每种不熟悉的关键字时已经够迷茫了,可往往见到的语句关键字顺序还是各种各样,太难理解了.网上搜索了两篇文章,总结一下: 关于Sql关键字SELECT FROM GROUP ORD ...

  2. bash实现多进程运行

    之前一段时间,发现线上日志服务器总是会突然丢失日志,碰到问题时搞的很被动.联系运维同学,又总是被往后推(后来看了一下日志归档脚本,运维同学写的bug).索性自己写了一个脚本,添加到crontab任务中 ...

  3. DDD实战12 值对象不创建表,而是直接作为实体中的字段

    这里的值对象如下风格: namespace Order.Domain.PocoModels { //订单地址 //虽然是值对象 但是不继承ValueObject //因为继承ValueObject会有 ...

  4. C#选择多个文件并读取多个文件数据

    原文:C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8 ...

  5. HDU 4357 String change 法冠军

    意甲冠军: 鉴于a串b串,问我们能否a变b串 办法:自选a的2快报,ascil+=1 然后交换位置,能够操作自如倍. 3个月3以上就能T^T 2法官将着眼于暴力 #include <cstdio ...

  6. 零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术

    原文:零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术 本章所介绍的是便利且快速的内建工具Clone ? 本章所介绍的是便利且 ...

  7. Proxy Design Pattern 代理设计模式

    代理设计模式.此模式是用于serverclient排序.互联网接入,也经常使用的类代理,我觉得这种感觉很复杂.但是,这种设计模式本身是非常easy的. 是一类调用另一个类的功能.客户调用类,实际工作是 ...

  8. WPF中StringFormat的用法--显示特定位数的数字

    原文:WPF中StringFormat的用法--显示特定位数的数字 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/art ...

  9. Python科学计算(两)——时域波形和正弦信号的频谱

    Python科学计算(两)-- 时域和频域波形为正弦波形信号生成.计算和显示 # -*- coding: utf-8 -*- import numpy as np import matplotlib. ...

  10. 如何自定义WPF项目的Main函数

    原文:如何自定义WPF项目的Main函数 与Winform项目不同,WPF项目的Main函数在项目生成的时候,系统自动在后台为我们生成.根据项目生成方式的不同,其文件位于obj/Debug/App.g ...