首页 > 其他分享 >Maven构建多模块项目(按层去分)

Maven构建多模块项目(按层去分)

时间:2024-11-26 12:57:51浏览次数:10  
标签:hz service jar boot Maven 模块 按层 com

标签(空格分隔): springboot

为什么要构建多模块项目

( 1 )不同方面的代码之间相互耦合,这时候一系统出现问题很难定位到问题的出现原因,即使定 位到问题也很难修正问题,可能在修正问题的时候引入更多的问题。 ( 2 )多方面的代码集中在一个整体结构中,新入的开发者很难对整体项目有直观的感受,增加了 新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构(通常在项目较大 且开发时间较长时这是很难做到的)。 ( 3 )开发者对自己或者他人负责的代码边界很模糊,这是复杂项目中最容易遇到的,导致的结果 就是开发者很容易修改了他人负责的代码且代码负责人还不知道,责任追踪很麻烦。 将一个复杂项目拆分成多个模块是解决上述问题的一个重要方法,多模块的划分可以降低代码之 间的耦合性(从类级别的耦合提升到 jar 包级别的耦合),每个模块都可以是自解释的(通过模块 名或者模块文档),模块还规范了代码边界的划分,开发者很容易通过模块确定自己所负责的内 容 模块划分与依赖关系 dao 层依赖 model service 层依赖 dao 、 model 、 utils web 层依赖 service 、 model 、 utils controller 层依赖 service 、 model

IDEA创建SpringBoot的多模块项目

建立父工程

( 1 )在 IDEA 工具栏选择 File->New->Project ( 2 )选择 Spring Initializr, 默认选择 Default ,然后点击 Next: 这时把没用的 .mvn 目录, src 目录, mvnw 还有 mvnw.cmd 都删除,最终只保留 .gitignore 和 pom.xml , 若是 web 项目,可在该 pom.xml 里添加以下依赖:
<!--web特征-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

创建子模块

选择Maven,点击Next

填写以下内容,点击Next

填写Module,点击Finish

同理添加boot-controller,boot-dao,boot-service,boot-view子模块

@SpringBootApplication(scanBasePackages = {
"com.hz.controller",
"com.hz.service"
})
@MapperScan("com.hz.dao") //扫描DAO 将数据源注入
@EnableTransactionManagement //开启事务
public class bootApplication {
public static void main(String[] args) {
SpringApplication.run(bootApplication.class, args);
}
}
application.yml
server : port : 80 spring : datasource : username : root password : root url : jdbc : mysql : //127.0.0.1 : 3308/smbms? useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC driverClassName : com.mysql.jdbc.Driver resources : static-locations : classpath : /templates,classpath : /static/ thymeleaf : suffix : .html prefix : classpath : /templates/ encoding : utf-8 cache : false # 开发状态下不开启 mybatis : mapper-locations : classpath : mapper/*.xml type-aliases-package : com.hz.pojo configuration : log-impl : org.apache.ibatis.logging.stdout.StdOutImpl

在boot-dao中引用boot-common

<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>

 在boot-service中引入boot-dao,boot-common

<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在 boot-controller 中引入 boot-service , boot-common
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在 boot-view 中引入 boot-controller
<dependency>
<groupId>com.hz</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在父级 pom.xml 中设置编译器与启动类
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--启动类路径-->
<mainClass>com.hz.bootApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
注意: project pom 文件:不是 jar ,是 pom project pom 文件:都是 jar 启动项目访问模板下 index.html ,测试访问成功!!!! maven 执行命令 clean compile install package 打包上线问题 spring-boot 工程打包编译时,会生成两种 jar 包,一种是普通的 jar ,另一种是可执行 jar 。默认情况下, 这两种 jar 的名称相同,在不做配置的情况下,普通的 jar 先生成,可执行 jar 后生成,所以可执行 jar 会覆 盖普通的 jar 在 pom 打包处添加了 configuration 一项
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--启动类路径-->
<mainClass>com.hz.bootApplication</mainClass>
<classifier>exec</classifier>
</configuration>
</plugin>
</plugins>
</build>

标签:hz,service,jar,boot,Maven,模块,按层,com
From: https://blog.csdn.net/m0_63233901/article/details/143933261

相关文章

  • 反向代理模块
     1概念  1.1反向代理概念反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。对于客户端来说,反向代理就相当于目标服务器,只需要将反向代理当作目标服......
  • 37. socketserver模块
    一、socketserver模块  SocketServer是标准库中的一个高级模块,它的目标是简化很多样板代码,它们是创建网络客户端和服务器所必须的代码。这个模块中有为你创建的各种各样的类。类描述BaseServer包含核心服务器功能和min-in类的钩子;仅用于推导,这样不会创建这个类的......
  • Python -- PyExecJS模块
    PyExecJS介绍PyExecJS是一个可以使用Python来模拟运行JavaScript的库。使用该模块可以通过python程序调用执行js代码,获取js代码返回的结果!注意事项:电脑必须安装好了nodejs开发环境上述模块才可以生效!环境安装:pipinstallPyExecJS使用步骤:导包:importexecjs......
  • DRANet-RAB模块
    classBasic(nn.Module):def__init__(self,in_planes,out_planes,kernel_size,padding=0,bias=False):super(Basic,self).__init__()self.out_channels=out_planesgroups=1self.conv=nn.Conv2d(in_planes,out_planes,......
  • RT-DETR融合[CVPRW2024]MAN中的MLKA模块及相关改进思路
    RT-DETR使用教程: RT-DETR使用教程RT-DETR改进汇总贴:RT-DETR更新汇总贴《Multi-scaleAttentionNetworkforSingleImageSuper-Resolution》一、模块介绍    论文链接:https://arxiv.org/pdf/2209.14145v2    代码链接:https://github.com/icand......
  • 【JavaEE】Maven的介绍及配置
    目录一、Maven简介二、创建一个Maven项目2.1社区版创建2.2专业版创建三、Maven核心功能3.1项⽬构建3.2依赖管理3.2.1依赖传递3.2.2依赖排除四、MavenHelp插件五、Maven仓库5.1本地仓库5.2中央仓库5.3私有服务器(私服)六、Maven设置国内源6.1配置当前项......
  • Jupyter Notebook无法导入外部模块—引出对环境变量的思考
    JupyterNotebook简介JupyterNotebook是一种交互式的计算环境,允许用户通过Notebook形式创建和共享代码、可视化和文档的组合。它是一个非常流行的数据科学工具,广泛用于数据分析、机器学习。今天主要使用了NumPy——科学计算库;Matplotlib——数据绘图库下文中,为方便起......
  • python中的包和模块(非常详细),零基础入门到精通,看这一篇就够了
    文章目录一、包与模块二、第三方包的安装2.1pipinstall2.2使用curl+管道2.3其他安装方法三、导入单元的构成3.1pip的使用3.2模块的缓存3.3源码包与二进制包四、setup.py的编写零基础入门AI大模型1.学习路线图2.视频教程3.技术文档和电子书4.LLM面试题和面经合......
  • 【FAQ】Harmo【FAQ】HarmonyOS SDK 闭源开放能力 — 公共模块
    1.问题描述:文档哪里能找到所有的权限查看该权限是用户级的还是系统级的。解决方案:您好,可以看一下下方链接是否可以解决问题:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V5https://developer.huawei.com/consumer/cn/doc/harmonyo......
  • 【web】Gin+Go-Micro +Vue+Nodejs+jQuery+ElmentUI 用户模块之vue登录开发以及接口联
    在现代Web应用中,实现用户登录模块是一个关键功能。本文将分为初级、中级、高级阶段,详细说明如何使用Vue、ElementUI进行登录开发,并与Gin、Go-Micro、Node.js进行接口联调。初级用法介绍在初级阶段,主要关注于使用Vue和ElementUI创建一个简单的登录界面,并通过Node.js后端进......