前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mavan:自定义骨架及工程初始化

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

作者头像
程序员架构进阶
发布2022-12-01 15:45:24
5770
发布2022-12-01 15:45:24
举报
文章被收录于专栏:架构进阶架构进阶

零 楔子

最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下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>标签下新增如下配置:

代码语言:javascript
复制
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-archetype-plugin</artifactId>
  <version>3.2.0</version>
</plugin>
代码语言:javascript
复制

注意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

代码语言:javascript
复制
[INFO] Project created from Archetype in dir: /Users/xxx/develop/github/websocket/target/generated-sources/archetype/target/test-classes/projects/basic/project/basic
[INFO] 
[INFO] --- maven-install-plugin:3.0.1:install (default-install) @ Java-WebSocket-archetype ---
[INFO] Installing /Users/xxx/develop/github/websocket/target/generated-sources/archetype/pom.xml to /Users/xxx/.m2/repository/org/java-websocket/Java-WebSocket-archetype/1.5.4-SNAPSHOT/Java-WebSocket-archetype-1.5.4-SNAPSHOT.pom
[INFO] Installing /Users/xxx/develop/github/websocket/target/generated-sources/archetype/target/Java-WebSocket-archetype-1.5.4-SNAPSHOT.jar to /Users/xxx/.m2/repository/org/java-websocket/Java-WebSocket-archetype/1.5.4-SNAPSHOT/Java-WebSocket-archetype-1.5.4-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-archetype-plugin:3.2.0:update-local-catalog (default-update-local-catalog) @ Java-WebSocket-archetype ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  5.683 s
[INFO] Finished at: 2022-09-04T13:01:40+08:00
[INFO] ----------------------------------------
代码语言:javascript
复制

其中打印出了使用的工程目录,以及安装目录

三 使用自定义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等脚本衔接,实现自动化创建工程。

与上面:

代码语言:javascript
复制
mvn archetype:generate -B  
-DarchetypeGroupId=org.java-websocket 
-DarchetypeArtifactId=Java-WebSocket-archetype 
-DarchetypeVersion=1.5.4-SNAPSHOT 
-DgroupId=com.learn.archetype 
-DartifactId=my-project 
-Dversion=1.0-SNAPSHOT

为了避免冲突,这里定义的工程名为 my-project,命令执行结果:

idea打开工程:

四 总结

本章整理了使用maven archetype生成自定义骨架和工程初始化方法。后续会再探讨代码自动生成技术,欢迎大家关注、交流。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员架构进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零 楔子
  • 一 背景
  • 二 自定义archetype
    • 2.1 pom.xml中添加archetype插件
      • 2.2 执行archetype生成
        • 2.3 自定义archetype安装到本地仓库
        • 三 使用自定义archetype创建新工程
          • 3.1 idea方式
            • 3.2 maven命令
            • 四 总结
            相关产品与服务
            腾讯云微搭低代码
            微搭低代码是一个高性能的低代码开发平台,用户可通过拖拽式开发,可视化配置构建 PC Web、H5 和小程序应用。 支持打通企业内部数据,轻松实现企业微信管理、工作流、消息推送、用户权限等能力,实现企业内部系统管理。 连接微信生态,和微信支付、腾讯会议,腾讯文档等腾讯 SaaS 产品深度打通,支持原生小程序,助力企业内外部运营协同和营销管理。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档