虽然maven已经提供了maven-archetype-webapp、maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的archetype初始化的项目架构并不能满足开发需求,这时候就有必要自己写一个满足项目需求的archetype了

使用自定义archrtype生成的项目结构图

为了激发阅读兴趣,先放一张使用自定义archetype生成项目的项目结构图




java好用的脚手架 java脚手架搭建_idea 制作maven脚手架


基本上的类都是`archetype`生成的,为了让你们学习真是用尽办法

archetype是什么

可以简单的理解为模板工具类,通过`archetype`我们可以快速的生成项目的基本架构。比如我们使用`idea`创建一个`maven web`项目时,常常会选择`maven-archetype-webapp`模板来初始化项目,使用`maven-archetype-webapp`生成的项目中包括`webapp`目录,里面包含`web`的配置文件

java好用的脚手架 java脚手架搭建_项目结构_02


archetype的组成

要想写一个自定义`archetype`,首先得知道一个archetype的组成。archetype由四部分组成:

prototype files 原型文件

位于`src/main/resources/archetype-resource`目录下。`prototype files` 原型文件可以理解为多模块中的子模块或是单模块工程中的源文件[即src文件]。这些原型文件在使用对应`archetype`生成项目时被生成

archetype-metadata.xml

位于`src/main/resources/META-INF/maven/`目录下。该配置文件中主要列出了原型文件以及使用`archetype`生成模板工程需要的参数

prototype pom

位于`src/main/resources/archetype-resources`目录下。这个`pom`文件会出现在`archetype`创建的模板工程中,如果是单模块工程,则是对整个项目的依赖管理;如果是多模块工程,该`pom`是总`pom`文件,该文件中会定义项目的子模块以及对子模块的依赖进行管理等,子模块`pom`定义在子模块下,子模块pom文件只管理子模块的依赖。

archetype pom

位于自定义`archetype`工程的根目录下。这是`archetype`工程项目的`pom`文件,里面一般没什么东西,不会出现在`archetype`创建的模板工程中

superman[自定义archetype]结构说明

superman项目结构图


java好用的脚手架 java脚手架搭建_maven_03


包含了`archetype`的四个组成部分,两个`pom`文件,一个`archtype-metadata`文件和五个原型文件[`__rootArtifactId__-*`],其中`__rootArtifactId__`在生成模板工程时会被传入的值替代

archtype-metadata配置文件

  1. 定义使用`archetype`生成模板工程需要传入的参数
com.h2t.testdemo${groupId}

`${}`标识的变量都是通过maven中的命令行传进来的

2. 定义原型文件

src/main/java**/*.*src/test/java**/*.*src/main/resources**/*.*src/test/resources**/*.*

`module`属性介绍:

`id`:子模块工程的`artifactId`

`dir`:子模块工程源文件在`archetype-resources`里对应的`directory`

`name` :子模块的名字.

prototype pom文件

1.定义了五个子模块

${rootArtifactId}-common${rootArtifactId}-dao${rootArtifactId}-service${rootArtifactId}-web${rootArtifactId}-model

2. 子模块依赖版本统一管理

${groupId} ${rootArtifactId}-common ${version}${groupId} ${rootArtifactId}-dao ${version}${groupId} ${rootArtifactId}-service ${version}${groupId} ${rootArtifactId}-model ${version}

子模块所需依赖都定义在该`pom`中,子模块使用依赖时不需要``标签

原型文件以web模块说明


java好用的脚手架 java脚手架搭建_maven_04


就是一个简单的maven工程,里面写了使用archetype生成模板项目的类

superman源码地址:【github】 TiantianUpup/superman 20190815-v2update分支

superman生成demo地址:【github】 TiantianUpup/superman-demo