制作基于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. QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

    FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QL ...

  2. 网络编程Socket之TCP之connect具体解释

    对TCP套接字调用connect会激发三次握手,例如以下: client是主动打开连接的一端,会发送第一个SYN分节,然后等待确认,此时连接状态为SYN_SENT,当收到服务端的确认后连接建立,状态变 ...

  3. 图形的认识(curve,surface,hypersurface)

    平滑函数(smooth function): curve:曲线: 二维平面: surface:曲面: 三维空间: hypersurface:超曲面: 更高维度: 1. surface 是对平面的泛化, ...

  4. spring boot mybatis XML文件读取properties配置信息

    配置文件application.properties中相关配置信息可以在部署以后修改,引用配置信息可以在代码和mybatis的映射文件中 1.JAVA代码 可以通过变量去读取 application. ...

  5. Android bluetooth介绍(两): android 蓝牙源架构和uart 至rfcomm过程

    关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本号:基于android4.2先前版本 bluez内核:linux/linux3.08系统:an ...

  6. 精装友好联络算法实现借壳和RI

    精装友好联络会 注册算法分析: 1.  许可证由三部分组成. 2. 的登记号的第一部分是顺序编号0x6d模 3. 登记代码的第二部分: 先将订单号与0XB25F1异或,将异或后的结果转换成十进制字符串 ...

  7. C/C++读写csv文件(用getline探测逗号分隔符)

    csv文件其实就是文本文件,每行字段用逗号分隔. 代码 #include <iostream> #include <string> #include <vector> ...

  8. 如果你说最近在看《诛仙》,平时喜欢玩LOL,你就是在把自己往悬崖上推

    面试官可能会问你一些和技术看上去没有任何关系的问题,比如问你最近在看什么书,学习之余喜欢做什么,常去哪些网站之类的.如果你说最近在看<诛仙>,平时喜欢玩LOL,你就是在把自己往悬崖上推.实 ...

  9. delphi2009(10,xe)下indy10发送utf8字符串

    最近实现一个功能,使用delphi2009以TCP调用Java端的接口,接口要求先发送字符串的长度,然后再发送字符串内容,并且字符串要求是utf8格式的 调试了好长时间,才终于发现解决办法,或者说发现 ...

  10. WPF——TaskBarIconOverlay(任务栏图标叠加)

    原文:WPF--TaskBarIconOverlay(任务栏图标叠加) <Window.Resources> <DrawingImage x:Key="OverlayIma ...