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

2022-12-01 15:45:24 浏览数 (1)

零 楔子

最近在看低代码平台和流水线相关的一些东西,看到一些平台会提供自动生成代码库的能力,顺藤摸瓜,正好回顾一下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生成自定义骨架和工程初始化方法。后续会再探讨代码自动生成技术,欢迎大家关注、交流。

0 人点赞