DDD:根据maven的脚手架archetype生成ddd多模块项目目录结构

news/2024/5/18 23:29:45

随着领域驱动的兴起,很多人都想学习如何进行ddd的项目开发,那ddd的项目结构是怎么样的?又是如何结合SpringBoot呢?那么针对这个问题,笔者使用maven的archetype封装一个相对通用的ddd的项目目录,方便一键生成DDD项目目录。

项目地址在文末

archetype项目

archetype项目各种依赖版本要求

1、JDK-17
2、maven-3.9.6
3、idea-2024.1
4、git-2.44.0

archetype项目结构

万金油archetype项目目录结构

archetype-metadata.xml内容

<?xml version="1.0" encoding="UTF-8" ?>
<archetype-descriptorxsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"name="archetype-multi-module"><requiredProperties><requiredProperty key="groupId"><defaultValue>gold.muxi</defaultValue></requiredProperty><requiredProperty key="artifactId"><defaultValue>wanjinyou</defaultValue></requiredProperty><requiredProperty key="version"><defaultValue>1.0.0-SNAPSHOT</defaultValue></requiredProperty><requiredProperty key="package"><defaultValue>gold.muxi.wanjinyou</defaultValue></requiredProperty><requiredProperty key="startClassName"><defaultValue>StartApplication</defaultValue></requiredProperty><requiredProperty key="springbootVersion"><defaultValue>3.2.5</defaultValue></requiredProperty></requiredProperties><modules><module id="${rootArtifactId}-start" name="${rootArtifactId}-start" dir="__rootArtifactId__-start"><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="false"><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-application" name="${rootArtifactId}-application" dir="__rootArtifactId__-application"><fileSets><fileSet filtered="true" encoding="UTF-8" packaged="true"><directory>src/main/java</directory><includes><include>**/*.*</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-common" name="${rootArtifactId}-common" dir="__rootArtifactId__-common"><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="false"><directory>src/main/resources</directory><includes><include>**/*.*</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-interfaces" name="${rootArtifactId}-interfaces" dir="__rootArtifactId__-interfaces"><fileSets><fileSet filtered="true" encoding="UTF-8" packaged="true"><directory>src/main/java</directory><includes><include>**/*.*</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-infrastructure" name="${rootArtifactId}-infrastructure" dir="__rootArtifactId__-infrastructure"><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="false"><directory>src/main/resources</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 filtered="true" encoding="UTF-8" packaged="false"><directory>src/test/resources</directory><includes><include>**/*.*</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-domain" name="${rootArtifactId}-domain" dir="__rootArtifactId__-domain"><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></fileSets></module></modules>
</archetype-descriptor>

requiredProperties 解析

groupId:表示根据这个archetype生成的项目的 的值,如不传递这个值,默认值是:gold.muxi
artifactId:表示根据这个archetype生成的项目的的值,如不传递这个值,默认值是:wanjinyou
version:表示根据这个archetype生成的项目的的值,如不传递这个值,默认值是:1.0.0-SNAPSHOT
package:表示根据这个archetype生成的项目的包名的值,如不传递这个值,默认值是:gold.muxi.wanjinyou
startClassName:表示根据这个archetype生成的项目的启动类的类名,如不传递这个值,默认值是:startClassName
springbootVersion:表示根据这个archetype生成的项目的项目的springboot版本,如不传递这个值,默认值是:3.2.5

archetype项目使用说明

# 克隆本项目代码到本地
git clone https://gitee.com/Sanliren/wanjinyou-archetype.git
# 进入项目目录
cd wanjinyou-archetype
# 安装脚手架项目到本地maven仓库
mvn clean install
# 根据脚手架生成项目
mvn archetype:generate -B -DarchetypeGroupId=gold.muxi -DarchetypeArtifactId=wangjinyou-archetype -DarchetypeVersion=1.0 -DgroupId=com.wanliangjin -DartifactId=demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.wanliangjin.demo -X -DarchetypeCatalog=local

mvn archetype:generate 命令解析

-B:表示不用在命令执行过程中交互输入
-DarchetypeGroupId=gold.muxi :指定脚手架的 groupId ,不用修改
-DarchetypeArtifactId=wangjinyou-archetype :指定脚手架的 artifactId ,不用修改
-DarchetypeVersion=1.0-SNAPSHOT # 指定脚手架的版本,不用修改
-DgroupId=com.wanliangjin :新项目的 groupId,根据自己的进行修改
-DartifactId=demo :新项目的 artifactId ,根据自己的进行修改
-Dversion=1.0.0-SNAPSHOT :新项目的 version , 根据自己的进行修改
-Dpackage=com.wanliangjin.demo :新项目的包名,根据自己的进行修改
-X -DarchetypeCatalog=local :指定从本地获取该脚手架的位置

生成的项目demo目录结构

生成的项目demo目录结构

总结

至此,根据maven的脚手架archetype生成多模块的ddd项目目录结构就完成了,以后再需要生成新项目的时候就可以直接用命令生成,不需要重新又搭建一遍目录;而且在微服务下,多个微服务也可以都根据这个脚手架生成每个服务,就不用那么麻烦了。(^-^

脚手架项目地址

https://gitee.com/Sanliren/wanjinyou-archetype记得 start ( •̀ ω •́ )✧

http://www.mrgr.cn/p/22767564

相关文章

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

Matlab各个版本介绍、区别分析及推荐

MATLAB&#xff0c;由美国MathWorks公司出品&#xff0c;是一款广泛应用的商业数学软件。自其诞生之初&#xff0c;MATLAB便以其强大的矩阵计算能力、灵活的编程环境以及广泛的应用领域&#xff0c;赢得了全球科研工作者和工程师的青睐。本文将详细介绍MATLAB的各个版本&#x…

智慧文旅展现文化新风貌,科技助力旅行品质升级:借助智慧技术,文旅产业焕发新生机,为旅行者带来更高品质的文化体验之旅

一、引言 在数字化、智能化的浪潮下&#xff0c;文旅产业正迎来前所未有的发展机遇。智慧文旅作为文旅产业与信息技术深度融合的产物&#xff0c;不仅为旅行者带来了全新的文化体验&#xff0c;也为文旅产业注入了新的活力。本文旨在探讨智慧文旅如何借助智慧技术展现文化新风…

让.NET 8 支持 Windows Vista RTM

众所周知,从 Windows 的每次更新又会新增大量 API,这使得兼容不同版本的 Windows 需要花费很大精力。导致现在大量开源项目已经不再兼容一些早期的 Windows 版本,比如 .NET 8 AOT编译命令行程序时生成的EXE,依赖以下三个函数,经查只有Windows 7 SP1以上系统才包含,具体参…

一毛钱不到的FH8208C单节锂离子和锂聚合物电池一体保护芯片

前言 目前市场上电池保护板&#xff0c;多为分体方案&#xff0c;多数场合使用没有问题&#xff0c;部分场合对空间有进一步要求&#xff0c;或者你不想用那么多器件&#xff0c;想精简一些&#xff0c;那么这个芯片就很合适&#xff0c;对于充电电池来说&#xff0c;应在使用…

ABC352

A link\(x\)停不到,\(y\)能停到。 要先判断是从前往后还是从后往前。点击查看代码 #include<bits/stdc++.h>using namespace std;signed main(){int n,x,y,z;cin >> n >> x >> y >> z;if(x <= y){if(z > x&&z <= y) cout <…

初识C语言——第九天

ASCII定义 在 C 语言中&#xff0c;每个字符都对应一个 ASCII 码。ASCII 码是一个字符集&#xff0c;它定义了许多常用的字符对应的数字编码。这些编码可以表示为整数&#xff0c;也可以表示为字符类型。在 C 语言中&#xff0c;字符类型被定义为一个整数类型&#xff0c;它占…

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列…

SSH远程访问及控制

SSH远程访问及控制 目录SSH远程访问及控制一、SSH远程管理1、SSH的概述二、配置OpenSSH1服务器1、sshd_config配置文件的常用选项设置2、实例操作三、sshd服务支持登录验证方式有:密码验证和密钥对验证,可以设置只使用其中一种,也可以都启用3.1 密码验证:3.2 密钥对验证:四…

8086 汇编学习 Part 9

端口的读写 CPU 的邻居CPU 内部的寄存器 内存单元 端口(各种接口卡、网卡,显卡,主板上的接口芯片等)各种芯片工作时,都有一些寄存器由 CPU 读写 从 CPU 角度,将各寄存器当端口,并统一编制 CPU 用统一的方法与各种设备通信读写端口的指令在对 \([0,255]\) 的端口进行读写…

安卓LayoutParams浅析

目录 前言一、使用 LayoutParams 设置宽高二、不设置 LayoutParams2.1 TextView 的 LayoutParams2.2 LinearLayout 的 LayoutParams 三、getLayoutParams 的使用四、setLayoutParams 的作用五、使用 setWidth/setHeight 设置宽高 前言 先来看一个简单的布局&#xff0c;先用 x…

区域文本提示的实时文本到图像生成;通过一致性自注意力机制的视频生成工具保持视频的一致性;专门为雪佛兰汽车设计的客服聊天机器人

✨ 1: StreamMultiDiffusion StreamMultiDiffusion是首个基于区域文本提示的实时文本到图像生成框架&#xff0c;实现了高速且互动的图像生成。 StreamMultiDiffusion 旨在结合加速推理技术和基于区域的文本提示控制&#xff0c;以克服之前解决方案中存在的速度慢和用户交互性…

复旦微JFM7VX690计算后IO接口模块,用于雷达信号处理、数据处理等需要高速密集计算的应用场景

计算后IO接口模块 1 介绍 1.1 产品概述 计算后IO接口模块主要由复旦微JFM7VX690型FPGA、国产以太网收发器YT8521、国产BMC芯片GD32F450、国产CPLD芯片EF2L45BG256B、国产内存颗粒等主要芯片组成&#xff0c;采用标准6U VPX尺寸设计。 本计算后IO接口模块主要用于雷达信号处…

多模态大语言模型和 Apple 的 MM1

原文地址&#xff1a;multimodal-large-language-models-apples-mm1 2024 年 4 月 13 日 抽象是计算机科学中最关键的概念之一&#xff0c;具有一些最强大的影响。从简单的角度来看&#xff0c;抽象就是将某一事物应用于多种不同情况的能力。例如&#xff0c;如果你创造了一种…

安卓 app icon大小 安卓app界面尺寸大小

移动应用的界面设计画布尺寸设计多大&#xff08;特别是Android&#xff09;、图标和字体大小怎么定、需要设计多套设计稿么、如何切图以配合开发的实现&#xff1f; 本篇将结合iOS和android官方的设计规范、搜集的资料以及工作中的摸索&#xff0c;来分享移动应用界面设计中的…

鸿蒙开发仿咸鱼TabBar

鸿蒙开发自定义TabBar&#xff0c;实现tabBar 上中间按钮凸起效果 第一步、定义数据模型 export default class TabItemData{defaultIcon: ResourceselectedIcon: Resourcetitle: stringisMiddle: booleanconstructor(defaultIcon:Resource, selectedIcon:Resource, title:st…

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网&#xff08;IoT&#xff09;设备中的典型应用案例包括但不限于以下几个方面&#xff1a; 1. 环境监测系统&#xff1a; 使用传感器来监测温度、湿度、气压等环境因素&#xff0c;并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…

Educational Codeforces Round 165 (Rated for Div. 2) (C、D)

1969C - Minimizing the Sum 题意&#xff1a; 思路&#xff1a;观察到操作数很小&#xff0c;最值问题操作数很容易想到dp&#xff0c;用表示第个元素&#xff0c;操作了次的最小值总和&#xff0c;转移的时候枚举连续操作了几次即可&#xff0c;而连续操作了几次即将全部变成…

STM32G474 CMAKE VSCODE FREERTOS 导入

一. 文件准备 1. 首先下载 freertos FreeRTOS - Free RTOS Source Code Downloads, the official FreeRTOS zip file release download 2. 移动 FreeRTOS-Kenel 到 moto_control 文件夹下。 3. 将 FreeRTOSConfig.h 放到 /Core/Inc 下面 4. 由于 FreeRTOSConfig.h 中使用了…

缓存分享(1)——Guava Cache原理及最佳实践

Guava Cache原理及最佳实践 1. Guava Cache是什么1.1 简介1.2 核心功能1.3 适用场景 2. Guava Cache的使用2.1 创建LoadingCache缓存2.2 创建CallableCache缓存2.3 其他用法 3.缓存失效回收策略3.1 基于容量回收3.2 定时回收3.3 基于引用回收3.4 显式清除 4、缓存失效回收时机5…