maven自定义脚手架

893 阅读4分钟

背景

一般新建项目都是选择idea自带的maven脚手架或spring initializr来生成项目,然后经过一系列的修改、配置、加入自己项目的一些风格;随着微服务越来越流行,很多项目首选都采用微服务架构,这样就导致一个项目中需要搭建多个微服务组件,每次新建项目时都需要花费大量的时间来进行修改、配置,达到所有项目结构和风格一致;如果新建项目的同事不是很熟悉项目风格,就会导致部分项目风格不一致等问题。 maven提供了解决这些问题的方法,那就是创建自己项目的脚手架,下面就介绍脚手架项目如何创建和使用。

创建基础项目

我们根据公司需求以及规范搭建一个基础项目,确保项目能正常运行 例如:

image.png

通过基础项目生成原型(脚手架)

  1. 在项目根目录下添加 archetype.properties,参考maven官方文档,以下配置仅供参考
#脚手架jar包的groupId
archetype.groupId=com.leelen.cloud
#脚手架jar包名称
archetype.artifactId=project-build-archetype
#脚手架jar包版本(不指定版本则跟随当前项目)
archetype.version=1.0.0-SNAPSHOT

# 需要采用template解析和替换本配置文件定义的参数的文件
archetype.filteredExtensions=java,sql,properties,factories,ftl,yml,xml

# 需要忽略的文件
excludePatterns=/**/*.iml,/.idea/**/*,/**/*.sh

#自定义参数
componentName=123456
urlPrefix=123478

注:这个文件不是必须的,可以视情况创建
2. 在pom文件引入maven-archetype-plugin插件

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>3.0.0</version>
</plugin>
  1. 生成原型项目(在项目根目录下执行命令)
mvn clean archetype:create-from-project -Darchetype.properties=archetype.properties

注: 若没有archetype.properties配置文件,则上面命令将-Darchetype.properties=archetype.properties去掉

执行上面命令后,会在项目根目录下会生成target文件夹,如下

image.png 将archetype目录单独拷贝出来(最好重新命名一下),然后我们将基于原型项目做一些修改
4. 原型项目修改
因为创建新项目的时候对应的模块名称、某些类名称、配置文件参数等需要动态变化,这时候我们就需要对原型项目进行变量定义
1)原型项目中变量引用有两种方式
1、${变量名}:主要是用于类中或配置文件中使用
2、 image.png :主要用于目录中变量使用

2) resources/META-INF/maven/archetype-metadata.xml详解(生成项目时的大部分配置都在此文件下面,可以根据需要进行修改)

1、变量定义

<requiredProperties>
    <requiredProperty key="urlPrefix">
        <!-- 也可以加上defaultValue,则变成非必填 -->
        <!-- urlPrefix默认值为iot -->
        <defaultValue>iot</defaultValue>
    </requiredProperty>
    <requiredProperty key="componentName">
        <defaultValue>IotCloud</defaultValue>
    </requiredProperty>
</requiredProperties>

2、文件中引用变量配置

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

注意:需要使用变量的文件需要检查 fileSet 标签是否有 filtered=“true” ,没有则需要加上。

3、文件中变量使用

image.png 4、目录中变量使用

image.png

5、打包/发布 原型项目改造完后,需要进行打包发布,以供其他人使用
可以通过idea集成maven插件进行发布,也可以直接通过mvn命令发布(mvn deploy)

3)原型项目示例路径
github.com/tahuazizai/…

根据原型生成项目

1、通过命令生成项目

在需要生成项目的目录下执行

mvn archetype:generate -DgroupId=com.leelen.cloud -DartifactId=iot-user -Dversion=0.0.1-SNAPSHOT -Dpackage=com.leelen.cloud.iot -DcomponentName=IotUser -DurlPrefix=iu -DarchetypeGroupId=com.leelen.cloud -DarchetypeArtifactId=project-build-archetype -DarchetypeVersion=1.0.0-SNAPSHOT -DinteractiveMode=false  -DarchetypeCatalog=local
执行时需要进行二次确认,如果不想要二次确认,则可以设置参数interactiveMode(交互模式)为false (interactiveMode为必填参数,默认为true)
-DinteractiveMode=false
用于构建列表并让用户从中选择的原型目录。它是一个逗号分隔的目录列表。目录使用以下方案:
' local ' 是本地存储库的快捷方式
' remote 'Maven 中央存储库或其镜像的快捷方式
' internal ' 是一个内部目录
 -DarchetypeCatalog=local
-DurlPrefix:组件路径(如设备组件:dc)
-DcomponentName:组件名称(设备组件:DeviceCenter)
-Dpackage:组件包路径(设备组件:com.leelen.cloud)
-Dversion:组件版本(设备组件:1.0.0)
-DartifactId:组件依赖名称(设备组件:device-center)
-DgroupId:组件的组织名称(设备组件:com.leelen.cloud)
-DarchetypeGroupId: 脚手架jar包groupId
-DarchetypeArtifactId: 脚手架jar包ArtifactId
-DarchetypeVersion: 脚手架jar包版本号

2、通过idea创建(这种方式不能给原型中自定义参数赋值,只能使用默认值)

image.png

根据脚手架依赖对应填上groupId、artifactId、version

image.png

选择对应脚手架根据idea指示进行项目创建