sprinboot多模块项目搭建

作者:ZCF1024
来源:CSDN
原文:https://blog.csdn.net/zcf980/article/details/83040029

原文有一个地方写错(demo-base 的 pom 文件声明父项目),这里修改了。


项目源码: 链接: https://pan.baidu.com/s/1Gp9cY1Qf51tG9-5gUZsnHQ 提取码: 5izt

CSDN源码下载: https://download.csdn.net/download/zcf980/10719615

1. 项目介绍: 

    本项目包含一个父工程 demo  和 四 个子模块(demo-base, demo-dao, demo-service, demo-web), demo-base 为其他三个模块的公共内容, 四个模块都依赖父模块, demo-dao 依赖 demo-base;   demo-service 依赖 demo-dao, 间接依赖 demo-base;   demo-web 依赖 demo-service, 间接依赖demo-base和demo-dao

sprinboot多模块项目搭建_第1张图片

2. 搭建思路:

     先创建一个 Spring Initializr工程 demo 作为 父工程, 然后在父工程再建四个子 Module (demo-base, demo-demo-dao, demo-service), 其实他们就是四个普通的Spring Initializr工程

3.开始搭建

   首先,创建一个Spring Initializr项目 和 子Module

            sprinboot多模块项目搭建_第2张图片

 

!!!!注意:  修改demo 的 pom 文件中的打包方式为 pom 

sprinboot多模块项目搭建_第3张图片

好戏开始:

刚才演示创建成一个SpringBoot 工程, 下面正式开始演示搭建多模块

(1) 第一步, 删除刚才创建工程里的文件, 只保留(.idea文件夹 , 和项目 pom 文件, 以及一个 *.iml 文件 )

sprinboot多模块项目搭建_第4张图片

sprinboot多模块项目搭建_第5张图片

 

(2)第二步, 创建子 Module (demo-base, demo-dao,  demo-service 和 demo-web)  先创建demo-base子工程

 sprinboot多模块项目搭建_第6张图片

 

创建好了 demo-base 子项目 , 为子工程 demo-base 生命父工程以及 为 父工程声明子 Module(在 demo 和 demo-base 的 pom 文件中添加如下代码)

     ---->在 demo-base 中 声明父工程, 注意:此时demo-base继承的是 SpringBoot提供的父工程, 需要修改

           中的版本信息, 修改成父项目 demo 的版本信息(直接将父项目 demo 的pom文件 中的版本信息复制粘贴到 mode-base             中即可)

    sprinboot多模块项目搭建_第7张图片

 --- 声明父工程


   
   
   
   
  1. <parent>
  2. <groupId>demo groupId>
  3. <artifactId>demo artifactId>
  4. <version>0.0.1-SNAPSHOT version>
  5. <relativePath/>
  6. parent>

    ----声明子 Module   


   
   
   
   
  1. <modules>
  2. <module>demo-base module>
  3. modules>

  修改后的父工程 demo 的 pom 文件


   
   
   
   
  1. xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0 modelVersion>
  5. <groupId>demo groupId>
  6. <artifactId>demo artifactId>
  7. <version>0.0.1-SNAPSHOT version>
  8. <packaging>jar packaging>
  9. <name>demo name>
  10. <description>Demo project for Spring Boot description>
  11. <parent>
  12. <groupId>org.springframework.boot groupId>
  13. <artifactId>spring-boot-starter-parent artifactId>
  14. <version>1.5.16.RELEASE version>
  15. <relativePath/>
  16. parent>
  17. <modules>
  18. <module>demo-base module>
  19. modules>
  20. <properties>
  21. <project.build.sourceEncoding>UTF-8 project.build.sourceEncoding>
  22. <project.reporting.outputEncoding>UTF-8 project.reporting.outputEncoding>
  23. <java.version>1.8 java.version>
  24. properties>
  25. <dependencies>
  26. <dependency>
  27. <groupId>org.springframework.boot groupId>
  28. <artifactId>spring-boot-starter artifactId>
  29. dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot groupId>
  32. <artifactId>spring-boot-starter-test artifactId>
  33. <scope>test scope>
  34. dependency>
  35. dependencies>
  36. <build>
  37. <plugins>
  38. <plugin>
  39. <groupId>org.springframework.boot groupId>
  40. <artifactId>spring-boot-maven-plugin artifactId>
  41. plugin>
  42. plugins>
  43. build>
  44. project>

修改后的 demo-base 的 pom 文件

修改后的 demo-base 的 pom 文件 



    4.0.0
 
    
    demo
    demo-base
    0.0.1-SNAPSHOT
    jar
 
    demo-base
    Demo project for Spring Boot
 
	
        demo
        demo
        0.0.1-SNAPSHOT
         
	
 
    
        UTF-8
        UTF-8
        1.8
    
 
    
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            org.springframework.boot
            spring-boot-starter-web
        
 
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    
 
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
 
 

 创建demo-web 模块与demo-dao创建除了第4步, 完全相同需要 添加 web依赖, 在创建过程的第4步需要添加 web 依赖

sprinboot多模块项目搭建_第8张图片

 

(4) 第三步 保留demo-web的启动类 和 配置文件, 其他项目的启动类都删除, 整个项目只需要一个启动类和一个配置文件 

demo-base:    /demo/demo-base/src/main/java/demobase/demo/DemoBaseApplication.java   删除

                      /demo/demo-base/src/main/java/resource/*   删除

demo-dao:    /demo/demo-dao/src/main/java/demodao/demo/DemoDaoApplication.java   删除

                     /demo/demo-dao/src/main/java/resource/*   删除

demo-service:    /demo/demo-service/src/main/java/demoservice/demo/DemoServiceApplication.java   删除

                          /demo/demo-service/src/main/java/resource/*   删除

sprinboot多模块项目搭建_第9张图片

sprinboot多模块项目搭建_第10张图片

(5)第四步 在 demo-dao 中添加 demo-base 的依赖信息, 在 demo-service 中添加 demo-dao 的依赖信息, 在 demo-web 中添加 demo-service 的依赖信息,  依赖信息添加到 各 pom 文件下的   节点下

 添加依赖信息后的 demo-dao 的依赖信息


   
   
   
   
  1. <dependency>
  2. <groupId>demo groupId>
  3. <artifactId>demo-base artifactId>
  4. <version>0.0.1-SNAPSHOT version>
  5. <scope>compile scope>
  6. dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot groupId>
  9. <artifactId>spring-boot-starter artifactId>
  10. dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot groupId>
  13. <artifactId>spring-boot-starter-test artifactId>
  14. <scope>test scope>
  15. dependency>
  16. dependencies>
添加依赖信息后的 demo-service 的依赖信息

   
   
   
   

   
   
   
   
  1. <dependency>
  2. <groupId>demo groupId>
  3. <artifactId>demo-dao artifactId>
  4. <version>0.0.1-SNAPSHOT version>
  5. <scope>compile scope>
  6. dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot groupId>
  9. <artifactId>spring-boot-starter artifactId>
  10. dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot groupId>
  13. <artifactId>spring-boot-starter-test artifactId>
  14. <scope>test scope>
  15. dependency>
  16. dependencies>

添加依赖信息后的 demo-web 的依赖信息


   
   
   
   
  1. <dependency>
  2. <groupId>demo groupId>
  3. <artifactId>demo-service artifactId>
  4. <version>0.0.1-SNAPSHOT version>
  5. <scope>compile scope>
  6. dependency>
  7. <dependency>
  8. <groupId>org.springframework.boot groupId>
  9. <artifactId>spring-boot-starter-web artifactId>
  10. dependency>
  11. <dependency>
  12. <groupId>org.springframework.boot groupId>
  13. <artifactId>spring-boot-starter-test artifactId>
  14. <scope>test scope>
  15. dependency>
  16. dependencies>

(6)第五步 编写测试代码

    编写好代码后三个模块的目录结构(demo-base还未用上, 但实际项目中很有用): 

 

sprinboot多模块项目搭建_第11张图片  下面贴上代码: 

            给demo-dao 添加

  Demo.java


   
   
   
   
  1. package demo.demodao;
  2. import javax.persistence.*;
  3. @Entity(name = "demo") //设置实体名, 在数据库中是表名
  4. public class Demo {
  5. @Id
  6. @GeneratedValue(strategy = GenerationType.AUTO) //设置自动增长
  7. @Column(name = "id")
  8. private Integer id;
  9. @Column(name = "name") //设置数据库字段名
  10. private String name;
  11. @Column(name = "id")
  12. private Integer id;
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public Integer getId() {
  20. return id;
  21. }
  22. public void setId(Integer id) {
  23. this.id = id;
  24. }
  25. }

  DemoRepository.java 


   
   
   
   
  1. package demo.demodao;
  2. import org.springframework.data.jpa.repository.JpaRepository;
  3. public interface DemoRepository extends JpaRepository<Demo, Integer> {
  4. }

  DemoService.java


   
   
   
   
  1. package demo.demoservice;
  2. import demo.demodao.Demo;
  3. import java.util.List;
  4. public interface DemoService {
  5. Demo addOne(Demo demo);
  6. }

 DemoServiceImpl.java


   
   
   
   
  1. package demo .demoservice .impl;
  2. import demo .demodao .Demo;
  3. import demo .demodao .DemoRepository;
  4. import demo .demoservice .DemoService;
  5. import org .springframework .beans .factory .annotation .Autowired;
  6. import org .springframework .stereotype .Service;
  7. @ Service
  8. public class DemoServiceImpl implements DemoService {
  9. @ Autowired
  10. private DemoRepository demoRepository;
  11. @ Override
  12. public Demo addOne(Demo demo) {
  13. return this .demoRepository .save( demo);
  14. }
  15. }

 DemoController.java  


   
   
   
   
  1. package demo.demoweb;
  2. import demo.demodao.Demo;
  3. import demo.demoservice.DemoService;
  4. import org.springframework.beans.factory. annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind. annotation.GetMapping;
  7. import org.springframework.web.bind. annotation.ResponseBody;
  8. @Controller
  9. public class DemoController {
  10. @Autowired
  11. private DemoService demoService;
  12. @ResponseBody // 返回 Json 数据
  13. @GetMapping("add")
  14. private Demo add(){
  15. Demo demo = new Demo();
  16. demo.setName( "姓名");
  17. demo.setId( 1);
  18. return demoService.addOne(demo); // 成功返回 保存后的 demo
  19. }
  20. }

第六步: 创建数据库, 修改配置文件

 创建输数据库 test

sprinboot多模块项目搭建_第12张图片

 修改配置文件: 将 demo-web Resource目录下 application.properties 文件名改为 applicatin.yml并添加以下内容:


   
   
   
   
  1. spring:
  2. datasource:
  3. # jdbc:mysql://localhost:3306/test 数据库地址
  4. url: jdbc: mysql:/ /localhost:3306/test?useUnicode= true&characterEncoding=UTF- 8&useSSL= false
  5. username: root # 数据库用户名
  6. password: xxxxxx # 数据库密码
  7. driver- class-name: com.mysql.jdbc.Driver # 数据库驱动
  8. jpa:
  9. hibernate:
  10. ddl- auto: create-drop # create-drop 如果实体对应的表已存在,先删除再创建,否则直接创建
  11. # !!!注意: 第一次运行时可设置为 create-drop, 这样就不需要手动创建数据库表, 但是后面运行务必设置为none

sprinboot多模块项目搭建_第13张图片

(7) 第七步: 大功告成, 运行项目

     sprinboot多模块项目搭建_第14张图片

直接运行会报错

 已解决:将启动类 DemoApplication 移动到 demo 包下

sprinboot多模块项目搭建_第15张图片

移动: 

sprinboot多模块项目搭建_第16张图片

运行成功!!!!!!! 

 sprinboot多模块项目搭建_第17张图片

项目搭建过程中遇到的问题:  

      Error:(3, 20) java: 程序包demo.demodao不存在 

解决方法, 在控制台执行 mvn clean

你可能感兴趣的:(springboot)