idea 多个maven微服务同一个窗口_maven多模块合并打包



目录

1. 在IDEA创建多模块MavenSpringBoot项目 2

2. 部分注解及细节解释说明 2

部分代码解释一 2

部分代码解释二 2

部分代码解释三 4

3. 创建项目前介绍 5

概述一 5

概述二 6

4. 开始创建多模块项目 7

第一步:父项目模块创建 7

第二步:子项目模块创建-web模块 11

第三步:子项目模块创建-entity模块 16

第四步:子项目模块创建-dao模块 17

第五步:子项目模块创建-service模块 18

第六步:四个模块创建展示 20

第七步:web模块创建请求接口-UserController及启动增加注解 21

第八步-关于配置文件说明(application.yml) 22

5. 项目工程完成 24

6. 项目工程测试 24

启动测试遇到的问题总结 26

7. 具体代码已上传gitee 26

  1. 在IDEA创建多模块MavenSpringBoot项目

部分注解及细节解释说明

部分代码解释一


首先,了解下maven项目的三种打包方式: 
①.war 打包为war包项目时,可以放在tomcat下运行 
②.jar 打包成jar包就是要使用java -jar xxx.jar方式来运行,最常见的就是SpringBoot项目 
③.pom 它只是用来做依赖管理,打包成的项目并不能直接运行。 
- 比如Springboot项目的父依赖以及再住上的依赖打包方式就是pom,因为它们只做依赖管理。


部分代码解释二


①. IDEA使用Spring Initializr与Maven创建项目的区别? 
- 位置:(菜单栏【File】→【New】→【Project】,如"图1"所示。
- 首先说明下,两者都可以创建Maven项目,本质上没多大区别,只在pom依赖的引入时间上有所不同。 

--------------------------------------------- 

②. Spring Initializr与Maven区别 
- 使用“spring initializr”创建项目,可以直观的手动勾选依赖,项目创建成功后pom.xml中会自带依赖--如"图2"所示。 
- 使用“Maven”创建项目,需要自己在pom.xml文件夹中添加依赖。
- (Maven适合网络环境差的情况下使用)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_02


(图1)


idea 多个maven微服务同一个窗口_创建yml没有绿色_03


(图2)

部分代码解释三


①. 父项目作为用来存放web模块,entity模块,service模块,dao模块的一个空模块。 
- 父项目就是刚开始使用IDEA创建的一个空项目模块。
②. 父级项目的packing(打包方式)必须设置为"pom"

③. dependencies 和 DependencyManagement 的区别 
- dependencies 在当前项目中引入依赖,如果子项目继承了该项目,也会在子项目中引入依赖。 
- DependencyManagement 只是声明依赖,并不实际引入,因此子项目需要显式声明需要用到的依赖。 
- 如果在子项目中声明依赖,是不会从父项目中继承下来的,只有在子项目中写了该依赖项,并且没有执行具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。 
- 如果子项目指定了版本号,那么会使用子项目中指定的jar版本。  

④. 在父项目中的pom.xml中模块信息写法如下:    
<groupId>com.lzk</groupId>          //模块组ID名字     
<artifactId>web</artifactId>        //模块名     
<version>0.0.1-SNAPSHOT</version>   //模块版本号    
<packaging>pom</packaging>          //模块的打包方式pom

 ⑤. 在子模块中的pom.xml中模块信息写法如下:    
<groupId>com.lzk</groupId>          //模块组ID名字
<artifactId>service</artifactId>    //模块名     
<version>0.0.1-SNAPSHOT</version>   //模块版本号    
<packaging>jar</packaging>         //模块的打包方式jar


创建项目前介绍

概述一


①. 首先:创建一个Multi-module2父项目。
- (作用:用来存放创建的多模块项目)。 
②. 其次:在Multi-module2父项目下,创建web模块+dao模块+entity模块+service模块。 
- 以下对每个子模块作用的解释说明:
web模块:里面存放(启动类和接口访问类)       
entity模块:里面存放(实体类及其他Model类)       
dao模块:里面存放(访问数据库接口或业务逻辑实现)       
service模块:里面存放(做为中转站,将web模块的请求转发给dao来处理,并将返回结果返回给web模块) 

③. 最后:将四个模块所需要的依赖分别写入本模块的pom.xml里面,利用web模块启动类来启动项目。
- **注意**:application.yml配置文件放置在web子模块的"resources"文件下,
其他模块可以将"Application启动类"和"resources的application配置文件"删掉,仅留下web模块的启动类和配置文件)。
- application.yml配置文件在本项目工程中,我放置在web子模块的"resources"文件下,其实也可以放置在dao子模块的"resources"文件下。


概述二


这里使用IDEA来演示多模块创建案例,分别需要创建的子模块包含:
①. Web模块:控制层(请求处理层)--启动类 Web模块:是启动类所在的模块。 
Web模块:所以我们把配置文件 启动类以及SpringBoot集成maven的插件都放在这个项目模块中。 
因此我们要再Web模块(pom.xml)中添加以下依赖:  
    <build>
        <plugins>
            <plugin>
                <!--该插件主要用途:构建可执行的JAR -->
                <!--spring-boot-maven-plugin 插件配置在启动类所在的模块-->   
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 ------------------------------------------------------------- 

②. Entity模块:实体模型层 
③. Service模块:业务层 
④. Dao模块:数据层
**下面开始创建多模块项目**


第一步:父项目模块创建


打开IDEA-->点击+Create New Project
-->创建一个用来存放存放web子模块,entity子模块,service子模块,dao子模块的父项目空模块--如"图3"所示。 
分别步骤如下: 
①. 选择Spring Initializr,Initializr默认选择Default,点击Next--如"图4"所示。 
②. 填写输入框,点击Next(Group:定义包名,Artifact:定义项目名)--如"图5"所示。
- ("图5"界面的-->Group表示:项目组名,artifact表示:项目名) 

③. 这步不需要选择直接点Next(这一步只需要选择对应的版本就可以了,其他的可选可不选)--如"图6"所示。 
④. 点击Finish创建项目(此页面一般默认,需要编辑自行修改)--如"图7"所示。 
⑤. 最终得到项目结构如下--如"图8"所示。
⑥. 删除无用的.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.gitignore和pom.xml--如"图9"所示。
- 保留如下目录结构--"图9"


idea 多个maven微服务同一个窗口_maven多模块合并打包_04


(图3)


idea 多个maven微服务同一个窗口_maven多模块合并打包_05


(图4)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_06


(图5)


idea 多个maven微服务同一个窗口_创建yml没有绿色_07


(图6)


idea 多个maven微服务同一个窗口_maven多模块合并打包_08


(图7)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_09


(图8)


idea 多个maven微服务同一个窗口_创建yml没有绿色_10


(图9)


***此时父项目空模块就创建成功了,接下去创建子项目模块***


第二步:子项目模块创建-web模块


①. 创建子模块与上面创建父项目模块方式基本一致。 
- 在刚才这个项目的根文件夹上鼠标右键,new->module->选择maven项目,点击Next--如"图10,图11"所示。 
- 一定要在刚才这个项目的根文件夹上创建,因为这样它会自动为我们写好依赖关系(pom依赖关系),不然还要自己写。 
**注意**:这时注意选择它的父依赖,如果没有就点击右边按纽选择刚才创建的parent-module,填入子项目模块名,点击Next--如"图12"所示。
 
②. 在选择好在磁盘上的文件夹目录,默认情况下是正确的,直接跳过就好了,点击Finish即可--如"图13"所示。 
- (Module file localion:这里的子项目模块一定要在父项目的目录里面) 

③. 此时就在parent-module父项目模块下,创建成功子项目模块--如"图14"所示。
④. 创建成功的子项目模块web,就会在父项目模块的pom.xml自动添加如下一句: 
<modules>
   <module>web</module>
</modules> 

⑤. 以及在web子项目模块下的pom.xml自动添加如下的父依赖:
- (就是刚才创建的parent-module项目)
<parent>    
   <artifactId>parent-module</artifactId>  
   <groupId>com.lzk</groupId>   
   <version>0.0.1-SNAPSHOT</version>
</parent>

⑥. 此时这个web的项目就创建好了,我们将这个子项目做为项目入口。
- (在web子项目模块里面,应该要写一个springBoot的启动类来启动项目,只有这一个web项目要写,其他的不用写)--如"图15"所示。  
⑦. 作为web层,我们还要在web模块pom.xml中引入springboot-web的依赖
<dependency>   
   <groupId>org.springframework.boot</groupId> 
   <artifactId>spring-boot-starter-web</artifactId> 
</dependency>

 --------------------------------------------------- 

⑧. web子模块需要在resources文件下创建一个application.yml配置文件,用来配置数据库连接。 
- application.yml配置文件--如"图A"所示。


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_11


(图10)


idea 多个maven微服务同一个窗口_创建yml没有绿色_12


(图11)


idea 多个maven微服务同一个窗口_创建yml没有绿色_13


(图12)


idea 多个maven微服务同一个窗口_创建yml没有绿色_14


(图13)


idea 多个maven微服务同一个窗口_创建yml没有绿色_15


(图14)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_16


(图15)


idea 多个maven微服务同一个窗口_创建yml没有绿色_17


(图A)

第三步:子项目模块创建-entity模块


①. 接下去创建entity模块-->
- 在父项目(Multi-module)下鼠标右键,new->module->选择maven项目建entity模块。 
(创建步骤和创建web模块步骤同-"图10~图14"),除了web模块,其他模块无需"图15"的启动类。

- 在父项目模块下创建的好dao层-->会自动帮我们在父项目的pom.xml中添加一下子模块依赖: 
<modules>
   <module>entity</module>
</modules> 
③. entity模块用来存放实体类,因此我们只需要创建一个实体类即可--如"图16"所示。
- 这里的User上面头部注解@Entity表示:使用Hibernate自动帮我们在数据库创建User这个表.
- @Getter和@Setter:表示自动帮我们在底层创建Get和Set方法.

④. 此时在entity模块的操作就完成了!


idea 多个maven微服务同一个窗口_maven多模块合并打包_18


(图16)

第四步:子项目模块创建-dao模块


①. 接下去创建dao模块--> 
- 在父项目(Multi-module)下鼠标右键,new->module->选择maven项目建dao模块。 
(创建步骤和创建web模块步骤同-"图10~图14"),除了web模块,其他模块无需"图15"的启动类。

- 在父项目模块下创建的好dao层-->会自动帮我们在父项目的pom.xml中添加以下子模块依赖:
<modules>
   <module>dao</module>
</modules> 
②. dao模块用来操作数据库表的数据,这里我们使用Jpa来实现持久化,只需继承Jpa接口即可--如"图17"所示。 
- (因为Jpa底层自带操作数据的的"增删改查方法")
- Jpa详情可参考此链接: 

③. 由于dao需要依赖entity模块,将查询到的数据映射到User实体类上,因此需要要本模块的pom.xml导入entity模块依赖。
<dependency>    
   <groupId>com.lzk</groupId>   
   <artifactId>entity</artifactId>   
   <version>0.0.1-SNAPSHOT</version> 
</dependency> 
④. 此时在dao模块的操作就完成了!


idea 多个maven微服务同一个窗口_maven多模块合并打包_19


(图17)

第五步:子项目模块创建-service模块


①. 接下去创建service模块-->


idea 多个maven微服务同一个窗口_maven多模块合并打包_20


(图18)


idea 多个maven微服务同一个窗口_创建yml没有绿色_21


(图19)

第六步:四个模块创建展示


①.此时我们在Multi-module项目下创建的四个模块(web,entity,dao,service)就创建完成了。
②. 模块展示,如"图20"所示。


idea 多个maven微服务同一个窗口_maven多模块合并打包_22


(图20)

第七步:web模块创建请求接口-UserController及启动增加注解


①. 在web模块中添加一个UserController类,提供给客户或前端页面发起请求的入口--"图21"所示。
②. 需要在WebApplication启动类加上@ComponentScan(value = "com.lzk")注解。--如"图22"所示。
 (@ComponentScan注解是对整个项目下的com.lzk包进行扫描,不然会出现UserService或UserRepository找不到的情况)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_23


(图21)

第八步-关于配置文件说明(application.yml)


①. **注意**:配置文件application.yml不管是放在web或dao子模块下的"resources"文件下,都可以正常执行。 
②. application.yml配置文件代码如下:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/usermodule?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: root123
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
------------------------------------------------------------- 
③. application.yml配置文件是放在web模块还是dao模块呢? 
- 首先:不管是放在web模块是dao模块都可以。 
- 其次:如果有两个相同名字的application.yml配置文件,会优先执行web模块里面的配置文件,
因为web模块包含启动类,是项目的入口。     
- 最后:如果web模块里面没有application.yml配置文件,dao里面有配置文件,则会读取dao模块里面的application.yml配置文件。    
因此优先顺序是:先读取web模块配置文件,若web模块不存在配置文件,则读取dao模块的配置文件。


项目工程完成


①. 最终的项目结构图示-"图22"


idea 多个maven微服务同一个窗口_创建yml没有绿色_24


(图22)

项目工程测试


①. 使用web子模块的WebApplication类来启动项目-"图23-图24" 
②. Run表示正常启动项目。 
③. Debug表示使用调试模式启动项目。 
④. 接下去打开数据库:查看我们User表,以及里面的数据-"图25" 
(User表中的数据,可以手动在数据库表中添加进去) 
接下去打开游览器,输入:http://localhost:8080/user/list-"图26"
 ("图26"就查询出数据库对应的所有数据出来了!)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_25


(图23)


idea 多个maven微服务同一个窗口_maven多模块合并打包_26


(图24)


idea 多个maven微服务同一个窗口_idea批量添加第三方的jar_27


(图25)


idea 多个maven微服务同一个窗口_创建yml没有绿色_28


(图26)

启动测试遇到的问题总结


①. 代码写好后,在web模块下运行Application.main()时,可能会报错:错误代码大致显示为:
Description:     
-------------Field UserService in com.lzk.modules.UserController required a bean of type 'com.lzk.modules.service.UserService' that could not be fonnd.  
②. 说明@Service没有扫描到,因此应该在WebApplication.java类上添加扫描注解@ComponentScan("com.lzk"),即可成功扫描,实现启动!


----------------------------------------------------------------------

具体代码已上传gitee

一山/Multi-module2gitee.com

idea 多个maven微服务同一个窗口_maven多模块合并打包_29



**注意**:以上纯属个人学习笔记,整理分享出来,希望对大家有帮助!!

--- 对于有不同观点的大V欢迎评论指点,一起成长,一起进步!!---