虽然maven已经提供了maven-archetype-webapp、maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的archetype初始化的项目架构并不能满足开发需求,这时候就有必要自己写一个满足项目需求的archetype了
(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!)
使用自定义archrtype生成的项目结构图
为了激发阅读兴趣,先放一张使用自定义archetype生成项目的项目结构图
基本上的类都是archetype
生成的,为了让你们学习真是用尽办法
archetype是什么
可以简单的理解为模板工具类,通过archetype
我们可以快速的生成项目的基本架构。比如我们使用idea创建一个maven web
项目时,常常会选择maven-archetype-webapp
模板来初始化项目,使用maven-archetype-webapp
生成的项目中包括webapp
目录,里面包含web
的配置文件
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
项目结构图
包含了archetype
的四个组成部分,两个pom
文件,一个archtype-metadata
文件和五个原型文件[__rootArtifactId__-*]
,其中__rootArtifactId__
在生成模板工程时会被传入的值替代 -
archtype-metadata
配置文件- 1.定义使用archetype生成模板工程需要传入的参数
<requiredProperties>
<requiredProperty key="groupId">
<!--默认的groupId-->
<defaultValue>com.h2t.test</defaultValue>
</requiredProperty>
<requiredProperty key="artifactId">
<!--默认的artifactId-->
<defaultValue>demo</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<!--默认的包名和groupId一样-->
<defaultValue>${groupId}</defaultValue>
</requiredProperty>
</requiredProperties>
${}
标识的变量都是通过maven中的命令行传进来的
- 2.定义原型文件
<module id="${rootArtifactId}-web" name="${rootArtifactId}-web" dir="__rootArtifactId__-web">
<fileSets>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/main/java</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8" packaged="true">
<directory>src/test/java</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/test/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</fileSet>
</fileSets>
</module>
module
属性介绍:
id
:子模块工程的artifactId
dir
:子模块工程源文件在archetype-resources里对应的directory
name
:子模块的名字.
-
prototype pom文件
- 1.定义了五个子模块
<modules>
<module>${rootArtifactId}-common</module>
<module>${rootArtifactId}-dao</module>
<module>${rootArtifactId}-service</module>
<module>${rootArtifactId}-web</module>
<module>${rootArtifactId}-model</module>
</modules>
-
子模块依赖版本统一管理
<!--modules--> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-common</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-dao</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-service</artifactId> <version>${version}</version> </dependency> <dependency> <groupId>${groupId}</groupId> <artifactId>${rootArtifactId}-model</artifactId> <version>${version}</version> </dependency>
子模块所需依赖都定义在该pom
中,子模块使用依赖时不需要<version>
标签
- 原型文件以web模块说明
就是一个简单的maven工程,里面写了使用archetype生成模板项目的类
supmen archetype技术选型
- DB
MySQL - ORM
MyBatisPlus - Framework
SpringBoot
DONE
-
SpringBoot、MyBatisPlus框架的整合
-
统一异常的处理
-
统一结果封装
-
log4j日志的配置
-
MybatisPlus
- 代码生成器
- 分页
- 逻辑删除
快速开始【superman archetype使用指南】
- 1.下载源码
git clone https://github.com/TiantianUpup/superman.git
-
2.打开superman工程,将其安装到本地仓库 运行如下命令
mvn clean install
复制代
-
3.使用自定义archetype初始化项目
mvn archetype:generate
-DgroupId=com.h2t.test
-DartifactId=superman-demo
-Dversion=1.0.0-SNAPSHOT
-DarchetypeGroupId=com.h2t.study
-DarchetypeArtifactId=superman -DarchetypeVersion=0.0.1-SNAPSHOT -X -DarchetypeCatalog=local
参数说明
-DgroupId
组ID,默认项目的包名的组ID相同
DartifactId
:项目唯一标识符,即项目名称
-DarchetypeGroupId
:superman
的组ID,值不需要进行修改
-DarchetypeArtifactId
:superman
的artifactId
,值不需要进行改变
-
4.移动配置文件
因为使用archetype生成项目时会将resource下面的文件丢失,所以目前将配置文件放在了web模块下的resource包下,创建项目成功后需手动将文件移动到web模块下的resource文件夹下,并将resource文件成标记成Resources Root -
5.修改resource文件夹下的配置文件
该文件夹下有application.properties ,logback.properties,logback-spring.xml三个配置文件 -
application.properties配置文件的修改
application.properties 主要是Spring、MyBatisPlus和数据库的配置信息
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?characterEncoding=UTF8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your password
修改数据库、密码,默认用户名为root
mybatis-plus.mapper-locations=classpath*:/mapper/*.xml
# mybatis-plus.type-aliases-package=
指定MybatisPlus实体类别名的包,即model模块的po层包名,默认MybatiPlus的mapper文件保存在resource下的mapper文件夹下,可自行修改
- logback.properties配置文件的修改
logback.properties定义了error级别日志和info级别日志的保存地址
LOG_ERROR_HOME=
LOG_INFO_HOME=
- logback-spring.xml配置文件的修改
logback-spring.xml主要是日志输出规则的定义,若为windows系统无需进行修改,若为linux os或mac os,则需修改日志保存地址
<fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern>
将//修改为/
-
6 使用代码生成器生成controller、service、dao、po层代码
代码生成器类位于service模块下的generator包下,只需要初始化几个字段值运行就可以生成相应的代码。在运行前首先在项目根目录下创建一个mp-generator-output文件夹,该文件夹的名字和OUTPUT_DIR字段值保持一致 -
PACKAGE_NAME
生成代码的包名,和项目的包名一致,负责复制过去代码会有一些小问题
-OUTPUT_DIR
生成代码保存文件地址,默认保存在项目下的mp-generator-output文件夹下,可以修改为自定义保存地址 -
AUTHOR
注释中作者的名字 -
DRIVER_NAME
数据库驱动 -
HOST
数据库主机号 -
PORT
数据库端口 -
DATABASE
数据库名字 -
USERNAME
数据库用户名 -
PASSWORD
数据库密码 -
7.将生成的代码移动到对应模块对应包下
-
controller文件夹
实体类对应的Controller,将该目录下的类移到web模块下的controller包下 -
mapper文件夹
实体类对应的DAO层,该目录下包含xml文件和对应实体的接口类,将xml文件移到dao模块resource 下的mapper文件夹下,需自行建立mapper文件夹,将接口移到dao模块下的mapper包下并在接口类上添加@Mapper注解,需自行建立 mapper包。同时将resource文件夹标记成Resources root -
service 对应实体类接口
-
impl 对应实体类接口实现类
-
将service目录下的接口移到service模块下的service包下,impl目录下的类移到service模块下的service.impl包下
-
po文件夹
将该目录下的类移到model模块下的po包下,并修改继承关系,统一继承BasePO类,因为BasePO类 包含了id、gmtCreate、gmtModified、deleted这些数据库基本字段,需将生成的实体类手动删除这些重复字段。同时自动生成的po类缺失了@TableName、@TableField注解需手动补充。注解的使用方式可参考BasePO类 -
8.修改web模块aspect包下的环绕通知
-
@Around("execution(* yourpackage.controller..*(..))")
该切面主要用于拦截controller层返回的结果,将其封装成统一结果返回 -
9 启动项目
web模块下的Runner类为启动类,运行该类即可启动,默认端口为8081 -
附:superman archetype生成demo工程地址
欢迎fork与star[划重点],由于开发经验有限,有些地方可能考虑不周,欢迎提bug。并且该archetype只定义了一些基础功能,欢迎提需求。