Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >现在的工程结构能满足你的需求吗?

现在的工程结构能满足你的需求吗?

作者头像
田维常
发布于 2019-09-12 07:32:59
发布于 2019-09-12 07:32:59
1K00
代码可运行
举报
运行总次数:0
代码可运行

创建单模块工程相信很多人都手到擒来。但如果项目很大,功能很多,你还能继续使用单模块工程吗?项目过大,结构肯定也越来越复杂这时候如果你继续使用单模块工程,进展就会遇到各种问题。同时维护起来也是很麻烦的事情。这个时候你就可以考虑将功能细化,使用多模块工程来替代单模块了。

一、使用maven多模块工程的好处

  1. 复杂项目拆分成多个模块多模块的划分可以降低代码之间的耦合性,方便维护。
  2. 多模块可以根据工程拆分,也可以根据菜单拆分,具体可根据公司要求。结构拆分清晰了,那么公司团队中每个人负责的代码模块也就清晰了。不会出现两个人改了同一段代码,如果功能出现问题责任追踪也很方便。
  3. 方便代码的重用。如果你有一个新的swing项目需要用到app-dao和app-service,添加对它们的依赖即可,你不再需要去依赖一个WAR。比如app-util,就可以作为成公司的一份基础工具类库,供所有项目使用。这是模块化最重要的一个目的。
  4. 解决了包的问题。maven将包的依+赖关系定义在了pom.xml中,所有jar包放在.m2里。这样的话,我们首先不会出现包冲突的问题,其次,解决了我们去找包、去包的问题。
  5. 5.方便、快捷。一键重新编译、一键清理编译代码、一键打包等。总之怎么方便怎么来哇。

二、如何创建maven多模块项目

我们可以粗略的将java代码做Dao、Service和Controller三层划分。

Controller层可以用于:请求转发(route)、视图渲染(view render)。

业务逻辑的实现最终会放到Service和Dao层。

1.创建工程

1.1点击FIle >> New >>Project >>maven

点击Next根据要求选择路径,填写项目名称,一路傻瓜式的Next。

1.2建立好工程之后,删除src文件只保留pom文件

1.3 然后点击File >> New >> module 创建其他模块,此时pom文件会发生变化

创建主项目工程-Web工程,该工程为web工程,并打war包,创建方式也不再是maven。

步骤:父工程右键 >> new Module >> Spring Initializer。

选择需要的模块(这里添加web):

1.4创建好的项目结构如下:

1.5在最外层pom引入SpringBoot依赖

pom.xml依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>blm.server</groupId>
    <artifactId>multi-boluome</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>web</module>
        <module>service</module>
        <module>dao</module>
        <module>domain</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <kotlin.version>1.0.6</kotlin.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--引入mock框架-->
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>1.10.19</version>
        </dependency>
        <!--rabbitmq-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.2.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- The plugin rewrites your manifest -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.3.0.RELEASE</version>
                <configuration><!-- 指定该Main Class为全局的唯一入口 -->
                    <mainClass>iflyer.IflyerApplication</mainClass>
                    <layout>ZIP</layout>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                        </goals>
                        <!--可以生成不含依赖包的不可执行Jar包-->
                        <!-- configuration>
                          <classifier>exec</classifier>
                        </configuration> -->
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

2.为每个层添加依赖

dao层依赖domain,service依赖dao和domain,web层依赖service、dao、domain

2.1点击File --> Project Structure 打开

2.2依次添加依赖,点击右侧的+号 >> Module Dependency

添加每个层所需要的依赖

2.3dao层依赖

2.4 Service层依赖

2.5 web层依赖

2.6 domain层依赖

到这里工程就搭建好了。构建模块其实不难,如何把它打包成一个执行jar才是难点。

三、如何打包成一个执行jar包。

3.1 在启动类中修改pom文件(也就是web层的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>
    <!-- 为jar包取名 -->
    <finalName>blm-start</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.RELEASE</version>
        </plugin>
    </plugins>
</build>

3.2 在外层pom中构建插件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>
    <plugins>
        <plugin>
            <!-- The plugin rewrites your manifest -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>1.3.0.RELEASE</version>
            <configuration><!-- 指定该Main Class为全局的唯一入口 -->
                <mainClass>com.Application</mainClass>
                <layout>ZIP</layout>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                    </goals>
                    <!--可以生成不含依赖包的不可执行Jar包-->
                    <!-- configuration>
                      <classifier>exec</classifier>
                    </configuration> -->
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java后端技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security项目构建(一)
源码地址 Github 项目构建 [image.png] 依赖关系 [image.png] 代码结构 security:主模块 security-core:核心业务逻辑 security-browse
楠楠
2018/08/29
4110
从零到一搭建基础架构(8)-业务服务接入基础架构
本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究!
柏炎
2022/11/16
3870
从零到一搭建基础架构(8)-业务服务接入基础架构
如何简洁高效的搭建一个SpringCloud2023的maven工程
依赖管理有gradle和maven,在这里选择比较常用和方便的Maven作为工程项目和依赖管理工具来搭建SpringCloud实战工程。主要用到的maven管理方式是多模块和bom依赖管理。
codetrend
2024/03/06
4730
Maven高级篇——多模块管理
👨‍🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:这个社会是存在不公平的,不要抱怨,因为没有用!人总是在反省中进步的! 👋大家好!我是你们的老朋友Java学术趴,今天给大家分享一下分布式开发中必备的技能。Mav
Java学术趴
2022/08/16
2.7K0
Maven详解
使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』
冬天vs不冷
2025/01/21
1320
Maven详解
使用Maven构建的Springboot父子工程的项目打包部署
1、SpringBoot作为微架构的主要实现技术,其发布项目的方式极为简单,只需要在项目中配置好插件,然后打包执行就可以了,并且这个执行不需要特别复杂的配置。
别先生
2020/10/30
2.2K0
使用Maven构建的Springboot父子工程的项目打包部署
Spring Boot - 瘦身大作战:优雅应对Spring Boot Fat Jar
通过启动参数loader.path配置外置依赖包的加载路径。 项目成功启动,说明我们配置的外包依赖包加载生效了
小小工匠
2023/11/26
8640
Spring Boot - 瘦身大作战:优雅应对Spring Boot Fat Jar
大厂Java项目如何进行Maven多模块管理
多模块管理简单地理解就是一个 Java 工程项目中不止有一个 pom.xml 文件,会在不同的目录中有多个这样的文件,进而实现 Maven 的多模块管理
灵魂画师牧码
2020/07/23
5.3K0
大厂Java项目如何进行Maven多模块管理
来一发项目
我会尽力坚持更下去(最近是真的时间很紧,九点下班到家洗漱一下就十一点了,写不了多少东西)
六个核弹
2022/12/23
2370
来一发项目
spring-boot-starter大力出奇迹
​  上篇文章我们已经聊了SpringBoot的启动过程中的各类扩展点,那么从http://start.spring.io上我们生成的demo项目中,到目前就剩下了maven工程的pom.xml还没有进行探索了,那么本文我们就来看看这里面到底都有啥,把大力出奇迹的常见spring-boot-starter来聊一聊,以便更好地使用SpringBoot.
阿豪聊干货
2018/08/09
9890
框架 | SpringBoot项目创建和发布部署步骤
如何创建Spring Boot项目? 1 技术选型 JDK1.7、MYSQL57、Spring Boot、Logback、Mybatis 2 开发工具 Myeclipse、Maven、Linux 3 数据库设计 表名:userinfo 结构如下: CREATE TABLE `userinfo` ( `id` int(20) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `password` varchar(20) D
码神联盟
2018/06/04
5.2K2
SpringBoot 多模块项目实践(附打包方法)
比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。
Java团长
2019/11/10
5K0
IDEA springboot多模块架构
一、项目结构 二、创建过程: 1、创建父类项目选择为pom类型 2、创建web模块 3、创建entity模块、service模块,两个模块创建方式一样 4
用户5899361
2020/12/07
5100
IDEA springboot多模块架构
Springboot打成Jar包及引用第三方Jar包
先前在网上搜索一下,遇到Springboot打包包含第三方Jar包的时候的问题的不同情况还挺多的
itze
2022/10/31
2K0
Springboot打成Jar包及引用第三方Jar包
『互联网架构』软件架构-Spring boot快速开始及核心功能介绍(中)(85)
【注意:执行jar的jdk版本需要与jar打包编译的版本一致。如果配置了环境变量,直接使用java命令打包即可】
IT架构圈
2019/06/19
4530
『互联网架构』软件架构-Spring boot快速开始及核心功能介绍(中)(85)
idea创建springboot父子工程_Springboot框架
在本系列第一篇文章,我们讲解了如何在 IDEA 中搭建第一个 SpringBoot 项目:【SpringBoot】一、创建第一个SpringBoot项目,本篇文章,我们讲解如何在 IDEA 中搭建 SpringBoot 的父子 Module 工程项目
全栈程序员站长
2022/11/08
1.5K0
idea创建springboot父子工程_Springboot框架
SpringBoot创建maven多模块项目(实战)
作者: 西魏陶渊明 博客: https://blog.springlearn.cn/
全栈程序员站长
2022/11/08
5190
SpringBoot创建maven多模块项目(实战)
两种方式实现SpringBoot脚手架的依赖配置
在基于Spring Boot脚手架创建项目时,通常会直接将spring-boot-starter-parent作为<parent>,如下示例:
编程随笔
2024/04/10
2530
springboot第3集:springboot中创建多个模块创建,关联,后续如何打包呢
在Spring Boot中,创建多个模块并关联它们的最佳实践是使用Maven或Gradle进行构建。以下是使用Maven先创建父pom.xml:
达达前端
2023/10/08
1.2K0
【微服务】Nacos实现服务间的调用 后端程序猿必经之路
之前的文章讲诉了Nacos的具体功能,那么有了理论肯定是不够的,这一次我们来利用Nacos实现简单的服务之间简单的调用,对于Nacos不是很了解可以先去看看 【微服务】 Nacos的入门级使用 后端程序猿必经之路。 话不多说,开整开整
小王不头秃
2024/06/19
1.4K0
【微服务】Nacos实现服务间的调用 后端程序猿必经之路
推荐阅读
相关推荐
Spring Security项目构建(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验