文章转自https://blog.csdn.net/zcf980/article/details/83040029

项目源码: 链接: 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

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             中即可)

--- 声明父工程

<parent>
<groupId>demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
    ----声明子 Module

<modules>
<module>demo-base</module>
</modules>
  修改后的父工程 demo 的 pom 文件

<?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>

<!-- 父项目 demo 的版本信息 -->
<groupId>demo</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo</name>
<description>Demo project for Spring Boot</description>

<!-- 继承说明:这里继承SpringBoot提供的父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<!-- 声明子模块 -->
<modules>
<module>demo-base</module>
</modules>

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

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
修改后的 demo-base 的 pom 文件

<?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>

<!-- demo-base 的版本信息 -->
<groupId>demo</groupId>
<artifactId>demo-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo-base</name>
<description>Demo project for Spring Boot</description>

<!-- 声明父项目 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.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>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</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 的依赖信息

<dependencies>

<!-- 添加 demo-base 的依赖 -->
<dependency>
<groupId>demo</groupId>
<artifactId>demo-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
添加依赖信息后的 demo-service 的依赖信息
<dependencies>

<!-- 添加 demo-dao 的依赖 -->
<dependency>
<groupId>demo</groupId>
<artifactId>demo-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
添加依赖信息后的 demo-web 的依赖信息

<dependencies>

<!-- 添加 demo-service 的依赖 -->
<dependency>
<groupId>demo</groupId>
<artifactId>demo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</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>
</dependencies>
(6)第五步 编写测试代码

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

下面贴上代码:

给demo-dao 添加

Demo.java

package demo.demodao;

import javax.persistence.*;

@Entity(name = "demo") //设置实体名, 在数据库中是表名
public class Demo {

@Id
@GeneratedValue(strategy = GenerationType.AUTO) //设置自动增长
@Column(name = "id")
private Integer id;

@Column(name = "name") //设置数据库字段名
private String name;

@Column(name = "id")
private Integer id;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}
}
  DemoRepository.java

package demo.demodao;

import org.springframework.data.jpa.repository.JpaRepository;

public interface DemoRepository extends JpaRepository<Demo, Integer> {

}
  DemoService.java

package demo.demoservice;

import demo.demodao.Demo;

import java.util.List;

public interface DemoService {

Demo addOne(Demo demo);

}
 DemoServiceImpl.java

package demo.demoservice.impl;

import demo.demodao.Demo;
import demo.demodao.DemoRepository;
import demo.demoservice.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class DemoServiceImpl implements DemoService {

@Autowired
private DemoRepository demoRepository;

@Override
public Demo addOne(Demo demo) {
return this.demoRepository.save(demo);
}
}
 DemoController.java

package demo.demoweb;

import demo.demodao.Demo;
import demo.demoservice.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class DemoController {

@Autowired
private DemoService demoService;

@ResponseBody // 返回 Json 数据
@GetMapping("add")
private Demo add(){
Demo demo = new Demo();
demo.setName("姓名");
demo.setId(1);
return demoService.addOne(demo); // 成功返回 保存后的 demo
}

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

创建输数据库 test

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

spring:
datasource:
# jdbc:mysql://localhost:3306/test 数据库地址
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root # 数据库用户名
password: xxxxxx # 数据库密码
driver-class-name: com.mysql.jdbc.Driver # 数据库驱动

jpa:
hibernate:
ddl-auto: create-drop # create-drop 如果实体对应的表已存在,先删除再创建,否则直接创建
# !!!注意: 第一次运行时可设置为 create-drop, 这样就不需要手动创建数据库表, 但是后面运行务必设置为none

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

直接运行会报错

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

移动:

运行成功!!!!!!!

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

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

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

IDEA SpringBoot多模块项目搭建详细过程(转)的更多相关文章

  1. springboot多模块项目搭建遇到的问题记录

    废话不多说,直接上问题报错与解决方法. 问题报错一:(报错信息看下方代码) 问题原因:'com.company.logistics.service.company.CompanyService' 未找 ...

  2. SpringBoot+Mybatis多模块项目搭建教程

    一.前言 框架为SpringBoot+Mybatis,本篇主要记录了在IDEA中搭建SpringBoot多模块项目的过程. 1.开发工具及系统环境 IDE:IntelliJ IDEA 2018.2 系 ...

  3. springboot(一).初识springboot以及基本项目搭建

    初识springboot 以及基本项目搭建 由于新的项目需要搭建后台框架,之前的springmvc架构也使用多次,在我印象中springboot的微服务架构更轻量级更容易搭建,所以想去试试spring ...

  4. maven3常用命令、java项目搭建、web项目搭建详细图解(转)

     转自:http://blog.csdn.net/edward0830ly/article/details/8748986 maven3常用命令.java项目搭建.web项目搭建详细图解 2013-0 ...

  5. SpringBoot多模块项目打包问题

    项目结构图如下: 在SpringBoot多模块项目打包时遇见如下错误: 1.repackage failed: Unable to find main class -> [Help 1] 解决步 ...

  6. 2017-09-26 发布 SpringBoot多模块项目实践(Multi-Module)

    https://segmentfault.com/a/1190000011367492?utm_source=tag-newest 2017-09-26 发布 SpringBoot多模块项目实践(Mu ...

  7. 使用IDEA构建Spring-boot多模块项目配置流程

    使用IDEA构建Spring-boot多模块项目配置流程 1.创建项目 点击Create New Project 在左侧选中Spring Initializer,保持默认配置,点击下一步. 在Grou ...

  8. Centos 6.5 GitLab安装配置搭建详细过程

    GitLab搭建详细过程   一.前提 系统:Centos 6.5 软件版本:gitlab-7.8.4 Selinux:关闭 防火墙规则:先清空(搭建好了后续自己添加相关放行规则) 二.yum源配置和 ...

  9. 记Spring搭建功能完整的个人博客「Oyster」全过程[其二] Idea中Maven+SpringBoot多模块项目开发的设计和各种坑(模块间依赖和打包问题)

    大家好嘞,今天闲着没事干开写写博客,记录一下Maven+SpringBoot的多模块设计和遇到的坑. 多模块设计 简单说明一下截止目前的需求: 需要RESTful API:对文章.标签.分类和评论等的 ...

随机推荐

  1. leetcode — best-time-to-buy-and-sell-stock

    /** * Source : https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock/ * * * Say you have ...

  2. [九]JavaIO之ObjectInputStream 和 ObjectOutputStream

    序列化 序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程 序列化是一种轻量级的持久化,对象都是存活在内存中的,当JVM运行结束,对象便不存在 ...

  3. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  4. springboot情操陶冶-web配置(二)

    承接前文springboot情操陶冶-web配置(一),在分析mvc的配置之前先了解下其默认的错误界面是如何显示的 404界面 springboot有个比较有趣的配置server.error.whit ...

  5. MySQL 笔记整理(2) --日志系统,一条SQL查询语句如何执行

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> 2) --日志系统,一条SQL查询语句如何执行 MySQL可以恢复到半个月内任意一秒的状态,它的实现和日志系统有关.上一篇中记录了一 ...

  6. 教我徒弟Android开发入门(四)

    本期知识点: 两大常用布局的简单介绍 在我们的APP使用第三方库 Android Studio常用快捷键 一.两大常用布局 1.LinearLayout线性布局 线性布局,可以垂直显示或者水平显示,设 ...

  7. Djiango初识

    加载静态文件 在一个网页中,不仅仅只有一个 html 骨架,还需要 css 样式文件, js 执行文件以及一些图片 等.因此在 DTL 中加载静态文件是一个必须要解决的问题.在 DTL 中,使用 st ...

  8. Django---forms表单使用(1)

    使用过Django的同学应该都比较清楚,Django的表单功能是十分强大的,可以完成数据的校验等功能. 下面讲下常用的表单类型.我们讲下创建表单到前台可以正常显示的步骤: 一.创建表单类(可以直接在v ...

  9. gitbook 入门教程之导出电子书

    gitbook 既可以将源码文件单独输出,也可以仅输出单个文件,常见的导出电子书格式主要有三种(ePub, Mobi, PDF),而这三种格式都依赖于系统本身提供的 ebook-convert 工具. ...

  10. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...