写点什么

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

  • 2022 年 9 月 04 日
    北京
  • 本文字数:1955 字

    阅读完需:约 6 分钟

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

零 楔子

最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下 maven 的能力,并在这里做一些尝试和验证。

maven 中的 archetype:archetype 是骨架的意思,maven 的 archetype 是 Maven 工程的模板工具包,定义了要做的相同类型事情的初始样式或模型。archetype 给我们提供来了一个一致的生成 Maven 工程的方式,帮助作者给用户创建 Maven 工程模板,并给用户提供生成相关工程模板版本的参数化方法。

一 背景

目前开发的后端工程,基本都是 java 语言的,maven 工程。依赖 spring(sprintboot)框架,所以一个比较容易想到的就是,如果我想做一个平台支持自动创建 java 语言的代码库,那么 maven 是第一选择。接下来就是工程模板,在 idea 中创建新项目工程时,大部分时候是直接 next 创建,但也可以勾选下图 中的"Create from archetype"使用已有的 archetype 创建:

图1

二 自定义 archetype

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

图2

接下来,参照 maven 自定义 archetype 的操作说明:

2.1 pom.xml 中添加 archetype 插件

在 pom.xml 中,<build><plugins>标签下新增如下配置:

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

注意 version 信息,为了避免后续执行时报错,可以在添加后,执行 maven reload project 来看是否可以正常加载插件:

图3

2.2 执行 archetype 生成

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

图4

也可以直接在 terminal 中执行 maven 命令:

mvn archetype:create-from-project

执行结果如下:

图5

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

图6

2.3 自定义 archetype 安装到本地仓库

进入 target/generated-sources/archetype 目录,执行 mvn install

[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] ----------------------------------------
复制代码

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

三 使用自定义 archetype 创建新工程

3.1 idea 方式

这里还是先使用 idea 创建,点击 add archetype:

图7


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

图8

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

图9

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

图10

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

图11

创建后工程如下:

图12

3.2 maven 命令

通过 idea 创建,还是手工操作。我们希望可以通过命令实现,这样可以在实际应用中通过 shell 等脚本衔接,实现自动化创建工程。

与上面:

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,命令执行结果:

图13

idea 打开工程:

图14

四 总结

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

发布于: 刚刚阅读数: 5
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
Mavan:自定义骨架及工程初始化_maven_程序员架构进阶_InfoQ写作社区