Mavan:自定义骨架及工程初始化

零 楔子
最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下 maven 的能力,并在这里做一些尝试和验证。
maven 中的 archetype:archetype 是骨架的意思,maven 的 archetype 是 Maven 工程的模板工具包,定义了要做的相同类型事情的初始样式或模型。archetype 给我们提供来了一个一致的生成 Maven 工程的方式,帮助作者给用户创建 Maven 工程模板,并给用户提供生成相关工程模板版本的参数化方法。
一 背景
目前开发的后端工程,基本都是 java 语言的,maven 工程。依赖 spring(sprintboot)框架,所以一个比较容易想到的就是,如果我想做一个平台支持自动创建 java 语言的代码库,那么 maven 是第一选择。接下来就是工程模板,在 idea 中创建新项目工程时,大部分时候是直接 next 创建,但也可以勾选下图 中的"Create from archetype"使用已有的 archetype 创建:

二 自定义 archetype
首先,我们创建一个新的工程,或者使用已有工程(差别不大,重点在于后续我们用自定义的骨架生成代码后,对比看骨架和生成工程的目录结构是否一致)。我这里是用了一个历史工程,目录结构如下:

接下来,参照 maven 自定义 archetype 的操作说明:
2.1 pom.xml 中添加 archetype 插件
在 pom.xml 中,<build><plugins>标签下新增如下配置:
注意 version 信息,为了避免后续执行时报错,可以在添加后,执行 maven reload project 来看是否可以正常加载插件:

2.2 执行 archetype 生成
需要执行 maven archetype 相关命令。这里也有两个选择,如下图 4 在 idea 右侧的 maven 上,点击 标红位置的 m 按钮:

也可以直接在 terminal 中执行 maven 命令:
mvn archetype:create-from-project
执行结果如下:

在工程根目录下生成一个 target 目录(注意:这里跟 maven 构建配置有关,有些会输出到 output 目录)。

2.3 自定义 archetype 安装到本地仓库
进入 target/generated-sources/archetype 目录,执行 mvn install
其中打印出了使用的工程目录,以及安装目录
三 使用自定义 archetype 创建新工程
3.1 idea 方式
这里还是先使用 idea 创建,点击 add archetype:

找到上一步创建好的 archetype 目录(如果不记得,可以进入 maven 本地仓库目录,然后通过包名和工程明查找即可),

其中 maven-metadata-local.xml 中记录了版本等信息,打开这个 xml 文件:

把 groupId, artifactId, version 等信息填写到上面的窗口,点击 ok 后完成添加:

next 后,填写新工程的 groupId, artifactId 等信息即可:

创建后工程如下:

3.2 maven 命令
通过 idea 创建,还是手工操作。我们希望可以通过命令实现,这样可以在实际应用中通过 shell 等脚本衔接,实现自动化创建工程。
与上面:
为了避免冲突,这里定义的工程名为 my-project,命令执行结果:

idea 打开工程:

四 总结
本章整理了使用 maven archetype 生成自定义骨架和工程初始化方法。后续会再探讨代码自动生成技术,欢迎大家关注、交流。
版权声明: 本文为 InfoQ 作者【程序员架构进阶】的原创文章。
原文链接:【http://xie.infoq.cn/article/a3a2bc9267e335c3b36aeb0e9】。文章转载请联系作者。
评论