资讯专栏INFORMATION COLUMN

撸一个Java脚手架,一统团队项目结构风格

邱勇 / 1945人阅读

摘要:这个文件会出现在创建的模板工程中,如果是单模块工程,则是对整个项目的依赖管理如果是多模块工程,该是总文件,该文件中会定义项目的子模块以及对子模块的依赖进行管理等,子模块定义在子模块下,子模块文件只管理子模块的依赖。

虽然maven已经提供了maven-archetype-webapp、maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的archetype初始化的项目架构并不能满足开发需求,这时候就有必要自己写一个满足项目需求的archetype了
使用自定义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生成模板工程需要传入的参数


    
        
            
            com.h2t.test
        
        
            
            demo
        
        
            
            ${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
    

子模块依赖版本统一管理


            
            
                ${groupId}
                ${rootArtifactId}-common
                ${version}
            

            
                ${groupId}
                ${rootArtifactId}-dao
                ${version}
            

            
                ${groupId}
                ${rootArtifactId}-service
                ${version}
            

            
                ${groupId}
                ${rootArtifactId}-model
                ${version}
            
        
    

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

原型文件以web模块说明


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

附:superman archetype代码

快速开始【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.propertieslogback.propertieslogback-spring.xml三个配置文件

application.properties配置文件的修改

application.properties 主要是SpringMyBatisPlus和数据库的配置信息

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 osmac os,则需修改日志保存地址

    ${LOG_ERROR_HOME}//%d.log
将`//`修改为`/`

6 使用代码生成器生成controllerservicedaopo层代码

代码生成器类位于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类 包含了idgmtCreategmtModifieddeleted这些数据库基本字段,需将生成的实体类手动删除这些重复字段。同时自动生成的po类缺失了@TableName@TableField注解需手动补充。注解的使用方式可参考BasePO

8.修改web模块aspect包下的环绕通知

@Around("execution(* yourpackage.controller..*(..))")

该切面主要用于拦截controller层返回的结果,将其封装成统一结果返回

9 启动项目

web模块下的Runner类为启动类,运行该类即可启动,默认端口为8081

附:superman archetype生成demo工程地址

欢迎fork与star[划重点],由于开发经验有限,有些地方可能考虑不周,欢迎提bug。并且该archetype只定义了一些基础功能,欢迎提需求。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76141.html

相关文章

  • 微服务横行的今天, 你的文档跟上节奏了么?

    摘要:纳尼隔壁少林派表示自家金刚技压群雄在座各位都是。。。纳尼你觉得写太繁琐了你不喜欢我们还有或者等等一大堆工具呢。纳尼没有你还是觉得无法接受好吧那么笔者推荐类似这类更友好的工具你可以导入导出其他格式也可以使用其来撰写。 说起微服务, 想必现在的技术圈内人士个个都能谈笑风云, 娓娓道来。的确, 技术变革日新月异, 各种工具框架雨后春笋般涌现, 现在我们可以轻巧便捷地根据自己的业务需求, 构建...

    liaoyg8023 评论0 收藏0
  • 基于IDEA Plugin插件开发,一个DDD手架

    摘要:作者小傅哥博客沉淀分享成长,让自己和他人都能有所收获接下来还需要把我们创建的工程模板以及数据服务配置到中,这样在插件启动的时候就可以把我们自己插件启动起来了。作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!???? 接下来还需要把我们创建的工程模板以及数据服务配置到 plugin.xml 中,这样在插件启动的时候就可以...

    不知名网友 评论0 收藏0
  • ESLint 在中大型团队的应用实践

    摘要:自动化接入和升级方案通过命令行工具提供一键接入升级能力,同时集成到团队脚手架中,大大降低了工程接入和维护的成本。原始代码经过解析器的解析,在管道中逐一经过所有规则的检查,最终检测出所有不符合规范的代码,并输出为报告。 引言 代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到,并或多或少会思考过这一问题。随着前端应用的大型化和复杂化,越来越多的前端工程师和团队开始重...

    alogy 评论0 收藏0
  • 来,webpack一个多页面应用手架!!!

    摘要:抽取文件插件引入入口配置多个实例使用正则匹配到每个页面对应文件夹下的文件并配置来进行解析从而实现对插件实例引入方法总结一个简易版的多页面应用脚手架就这样搞定啦是不是很简单地址喜欢的童鞋给个哈您的支持就是我最大的动动动力 使用 webpack 构建多页面应用 前言 之前使用 vue2.x + webpack3.x 撸了一个 vue 单页脚手架 vue 版 spa 脚手架 有兴趣的同学可以...

    王伟廷 评论0 收藏0
  • 基于vue+mint-ui的mobile-h5的项目说明

    摘要:把打包的目录修改成生产环境需要的目录。是域名的配置只要统一配置一项即可,方便。旨在增强团队开发协作提高代码质量和打造开发基石的编码规范,以下规范是团队基本约定的内容,必须严格遵循。 Vue作为前端三大框架之一,其已经悄然成为主流,学会用vue相关技术来开发项目会相当轻松。 对于还没学习或者还没用过vue的初学者,基础知识这里不作详解,推荐先去相关官网,学习一下vue相关的基础知识。 a...

    vboy1010 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<