制作基于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. day68_淘淘商城项目_01

    原文:day68_淘淘商城项目_01 课程计划 第一天: 1.电商行业的背景介绍--电子商务 2.淘淘商城的系统架构 a) 功能介绍 b) 架构讲解 3.工程搭建--后台工程 a) 使用maven搭建 ...

  2. Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象

    原文:Silverlight自定义数据绑定控件应该如何处理IEditableObject和IEditableCollectionView对象 原创文章,如需转载,请注明出处. 最近在一直研究Silve ...

  3. Uniform synchronization between multiple kernels running on single computer systems

    The present invention allocates resources in a multi-operating system computing system, thereby avoi ...

  4. WPF中使用TranslateTransform3D修改CAD的3D旋转中心

    原文:WPF中使用TranslateTransform3D修改CAD的3D旋转中心        前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转 ...

  5. 基于WPF实现双色球

    原文:基于WPF实现双色球 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/82959625 ...

  6. 创建一个显示所有预定义系统颜色的ListBox

    原文 Creating a ListBox that Shows All Predefined System Colors 该System.Windows.SystemColors类包含了一系列揭露当 ...

  7. Swagger 生成API文档

    1.打开程序包管理控制台输入: Install-Package Swashbuckle 2.打开App_Start文件夹下的SwaggerConfig.cs文件找到 c.IncludeXmlComme ...

  8. android反射组件 (一个)java 它们的定义annotation基础知识

    它们的定义annotation它由三部分组成: 它们的定义annotation.使用annotation班.annotation的处理方法. 一.自己定义annotation  元注解包含下面: 1) ...

  9. 创建 DLL 步骤 和 SRC

    LIBRARY SimulationTouchDll EXPORTS MouseControl GetPosition //MouseControlInterface.def 文件 #pragma o ...

  10. String 源码分析

    Java 源码阅读 - String String 类型看起来简单,实际上背后的复杂性基本可以涵盖了整个 Java 设计,涉及到设计模式(不可变对象).缓存(String Pool 的理念).JVM( ...