IDEA SpringBoot多模块项目搭建详细过程

项目源码: 百度网盘: https://pan.baidu.com/s/1oIAr771eOZzxlVsW8gbjJA 提取码: x3zt

                   CSDN下载: SpringBoot多模块例子-v2.0(建议下载)-Java文档类资源-CSDN下载

关于项目打包的问题,在文章的最后已给出解决方案(上面的源码也已做了更新):更新时间2019-12-4 11:00

参考博客:Maven详解之聚合与继承_桐桐-Dragon的博客-CSDN博客_maven 聚合

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

2. 搭建思路

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

3. 开始搭建

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

            

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

            

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

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

     

            

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

            

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

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

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

           

 ---> 声明父工程


   
   
  1. <parent>
  2. <groupId>demo </groupId>
  3. <artifactId>demo </artifactId>
  4. <version>0.0.1-SNAPSHOT </version>
  5. <relativePath/> <!-- lookup parent from repository -->
  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. <!-- 父项目 demo 的版本信息 -->
  6. <groupId>demo </groupId>
  7. <artifactId>demo </artifactId>
  8. <version>0.0.1-SNAPSHOT </version>
  9. <packaging>pom </packaging>
  10. <name>demo </name>
  11. <description>Demo project for Spring Boot </description>
  12. <!-- 继承说明:这里继承SpringBoot提供的父工程 -->
  13. <parent>
  14. <groupId>org.springframework.boot </groupId>
  15. <artifactId>spring-boot-starter-parent </artifactId>
  16. <version>1.5.16.RELEASE </version>
  17. <relativePath/> <!-- lookup parent from repository -->
  18. </parent>
  19. <!-- 声明子模块 -->
  20. <modules>
  21. <module>demo-base </module>
  22. </modules>
  23. <properties>
  24. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  25. <project.reporting.outputEncoding>UTF-8 </project.reporting.outputEncoding>
  26. <java.version>1.8 </java.version>
  27. </properties>
  28. <dependencies>
  29. <dependency>
  30. <groupId>org.springframework.boot </groupId>
  31. <artifactId>spring-boot-starter </artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot </groupId>
  35. <artifactId>spring-boot-starter-test </artifactId>
  36. <scope>test </scope>
  37. </dependency>
  38. </dependencies>
  39. <build>
  40. <plugins>
  41. <plugin>
  42. <groupId>org.springframework.boot </groupId>
  43. <artifactId>spring-boot-maven-plugin </artifactId>
  44. </plugin>
  45. </plugins>
  46. </build>
  47. </project>

修改后的 demo-base 的 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. <!-- demo-base 的版本信息 -->
  6. <groupId>demo </groupId>
  7. <artifactId>demo-base </artifactId>
  8. <version>0.0.1-SNAPSHOT </version>
  9. <packaging>jar </packaging>
  10. <name>demo-base </name>
  11. <description>Demo project for Spring Boot </description>
  12. <!-- 声明父项目 -->
  13. <parent>
  14. <groupId>org.springframework.boot </groupId>
  15. <artifactId>spring-boot-starter-parent </artifactId>
  16. <version>1.5.16.RELEASE </version>
  17. <relativePath/> <!-- lookup parent from repository -->
  18. </parent>
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8 </project.build.sourceEncoding>
  21. <project.reporting.outputEncoding>UTF-8 </project.reporting.outputEncoding>
  22. <java.version>1.8 </java.version>
  23. </properties>
  24. <dependencies>
  25. <dependency>
  26. <groupId>org.springframework.boot </groupId>
  27. <artifactId>spring-boot-starter-data-jpa </artifactId>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.springframework.boot </groupId>
  31. <artifactId>spring-boot-starter-web </artifactId>
  32. </dependency>
  33. <dependency>
  34. <groupId>mysql </groupId>
  35. <artifactId>mysql-connector-java </artifactId>
  36. <scope>runtime </scope>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.boot </groupId>
  40. <artifactId>spring-boot-starter-test </artifactId>
  41. <scope>test </scope>
  42. </dependency>
  43. </dependencies>
  44. <build>
  45. <plugins>
  46. <plugin>
  47. <groupId>org.springframework.boot </groupId>
  48. <artifactId>spring-boot-maven-plugin </artifactId>
  49. </plugin>
  50. </plugins>
  51. </build>
  52. </project>

 创建demo-dao, demo-service  创建方法一样, 这里只演示demo-dao的创建

          

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

         

(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/*   删除

         

         

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

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


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

   
   

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

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


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

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

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

          

下面贴上代码:  给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. }

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

 创建输数据库 test

 修改配置文件: 将 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

           

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

           

直接运行会报错

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

         

移动: 

         

运行成功!!!!!!! 

          

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

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

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

项目打包遇到的问题:

      1. 打包时需使用:mvn clean package -Dmaven.test.skip=true 忽略测试进行打包。测试代码不会影响项目发布,但是会影响项目的打包。

      2. 项目打包报错:Non-resolvable parent POM for demo:demo-base:0.0.1-SNAPSHOT: Could not find artifact 
demo:demo:pom:0.0.1-SNAPSHOT and 'parent.relativePath' points at no local POM

          解决方法:修改父项目,子Module:demo-base,demo-dao,demo-service,demo-web的 pom 文件,删除<parent></parent>标签的这句 <relativePath/> <!-- lookup parent from repository -->

      3. 项目打包报错:[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.5.16.RELEASE:
repackage (default) on project demo-base: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.5.16.RELEASE:repackage failed: Unable to find main class -> [Help 1]

          原因:这是 demo-base 找不到主类的问题。因为此项目为多模块项目,但并不是每一个子模块都需要打成可执行的 Jar 包,如此项目中实际需要打成可执行的Jar 包的只有demo-web,且我们在构建项目之前已经将出demo-web外的项目的启动类即主类删了。所以此处会报错。

          解决方法:修改处demo-web外的项目:父项目demo,demo-base、demo-dao、demo-service 的 pom 文件,删除其中关于打包的配置。

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要搭建一个多模块Spring Boot项目,可以按照以下步骤: 1. 创建一个Maven项目,并选择“Create a simple project(创建一个简单项目)”选项。 2. 在pom.xml文件中添加以下插件: ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` 这个插件可以将Spring Boot项目打包成一个可执行的jar文件。 3. 在项目根目录下创建一个子模块,比如叫做“web”。可以使用以下Maven命令创建子模块: ``` mvn archetype:generate -DgroupId=com.example -DartifactId=web -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ``` 这个命令会在根目录下创建一个名为“web”的子模块。 4. 在子模块的pom.xml文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 这个依赖会让子模块成为一个Spring Boot Web应用程序。 5. 在子模块中创建一个Spring Boot应用程序,比如叫做“WebApplication”。可以创建一个似于以下的: ```java @SpringBootApplication public class WebApplication { public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } } ``` 这个使用了Spring Boot的@SpringBootApplication注解,这个注解会自动配置Spring应用程序。 6. 在子模块中创建一个Controller,比如叫做“HelloController”。可以创建一个似于以下的: ```java @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello World!"; } } ``` 这个Controller定义了一个名为“/hello”的路由,并返回了一个字符串。 7. 运行项目。可以使用以下Maven命令运行项目: ``` mvn spring-boot:run ``` 这个命令会启动Spring Boot应用程序,并在控制台输出日志。可以在浏览器中访问“http://localhost:8080/hello”来测试应用程序。 8. 添加其他子模块。可以按照以上步骤添加其他子模块,比如一个数据库模块、一个服务模块等等。这样就可以将应用程序拆分成多个模块,每个模块负责不同的功能。 注意事项: - 每个子模块都应该有一个唯一的artifactId。 - 如果子模块之间有依赖关系,可以在pom.xml文件中添加相关的依赖。 - 可以在根目录的pom.xml文件中添加公共依赖,这些依赖会被所有子模块继承。 - 如果使用了Spring Cloud等微服务框架,可以将每个子模块打包成一个独立的服务,然后使用注册中心来管理它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值