Maven 项目骨架

2023-10-22
1 min read

项目初期如何快速搭建符合规范、便于定制的项目结构, 相信这是大家一直在追求的. 所幸 Maven 提供了 archetypes 插件可满足这一诉求.

principle

通过下图我们可以知道, 要制作一个项目骨架大致需要以下几个步骤

  1. 创建一个example工程, 此 example 工程 包含了架构师对框架的设计, 如 module 划分、依赖关系、包结构设计等等
  2. 使用 Archetypes 插件对 example 工程进行配置并打包, 完成后骨架工程的代码被放在 example/target 目录之下
  3. 在编译完成的骨架工程目录下执行 mvn install/mvn deploy 对骨架工程进行发布
  4. 在另外一个目录使用 archetype:generate 命令从骨架工程生成项目

img

create from project

对 example 工程的创建. 需要注意的是 maven 各模块内的包名需要定义一个通用的开头, 例如 com.pkg.

在最外层 pom 目录下增加 archetype 的配置文件 archetype.properties. excludePatterns 表示打包至 target 目录下的文件.

1  excludePatterns=.idea/,.settings/,.classpath,.project
2  gitignore=.gitignore

使用 archetype:create-from-project 创建 archetype 项目, 并指定配置文件及通用包名
然后使用 mvn clean deploy 对 target 目录下的 archetype 项目进行发布

1  #!/bin/bash
2  set -e
3  echo "====longda-archetype build successfully"
4  mvn clean archetype:create-from-project -Darchetype.properties=archetype.properties \
5  -Darchetype.filteredExtentions=* -DpackageName=com.pkg
6  echo "====longda.archetype build successfully"
7  mvn clean deploy javadoc:jar source:jar -f target/generated-sources/archetype/pom.xml
8  echo "====longda.archetype install successfully"

generate project

运行下面的命令来生成项目骨架

1  mvn archetype:generate \
2  -DarchetypeGroupId=com.archetype \
3  -DarchetypeArtifactId=archetype-archetype \
4  -DarchetypeVersion=0.1.0-SNAPSHOT \
5  -DinteractiveMode=false \
6  -DgroupId=com.center.crm \
7  -DartifactId=center-crm \
8  -Dversion=3.10.0-CD-LD-SNAPSHOT \
9  -Dpackage=com.center.crm

这个命令所构建的项目是 parent 的一个子模块。
artifactId 这也是目标项目的文件夹名称

Table 1: 命令参数注释说明
参数名 含义说明 值说明
archetypeGroupId 骨架项目的GroupId 固定值 com.archetype
archetypeArtifactId 骨架项目的ArtifactId 固定值 archetype-archetype
archetypeVersion 骨架项目的Version 最新版本参考 Update
interactiveMode 命令行交互模式 固定值 false
groupId 目标项目的 GroupId 格式 com.center.%appName%
artifactId 目标项目的 ArtifactId 格式 center-%appName%
version 目标项目的 Version 固定值 3.10.0-CD-LD-SNAPSHOT
package 目标项目的包路径 格式 com.center.%appName%

项目创建好,并且成功上传至 gitlab 代码仓库以后
需要将项目作为一个 submodule 添加至 parent 的根目录下
并且需要在 parent/pom.xml 的 modules 节点处增加此项目,以做归档