maven-多模块(module)项目搭建

 原因:

很多同学在搭建maven 多模块项目过程中经常会遇到 jar包冲突、子类引入不进jar包,归其原因是分不清楚dependencies与 dependencyManagement的区别。 

目录

一、 DepencyManagement & dependencies区别

二、 工程目录结构

三、 搭建步骤


一、 DepencyManagement & dependencies区别

1、 dependencies: 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)

2、 dependencyManagement里面只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version 和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

二、 工程目录结构

service-服务层

web-控制层

三、 搭建步骤

1、 创建父类工程

  • 选择Spring InitializrInitializr默认选择Default,点击Next

  • 填写坐标

  • 不需要选择Developer Tools,点击Finish

  • 删除无用的.mvn目录、src目录、mvnwmvnw.cmd文件,最终只留.gitignorepom.xml

2、 创建子类工程(Service与web)

  • 选择项目根目录右键呼出菜单,选择New -> Module

  • 选择Maven,点击Next

  • 填写相关信息,点击Next

3、 整理父 pom 文件

  • 删除dependencies标签及其中的依赖,因为Spring Boot提供的父工程已包含,并且父pom原则上都是通过dependencyManagement标签管理依赖包。
  • 删除build标签及其中的所有内容,spring-boot-maven-plugin插件作用是打一个可运行的包,多模块项目仅仅需要在入口类 所在的模块添加打包插件,这里父模块不需要打包运行。而且该插件已被包含在 Spring Boot提供的父工程中,这里删掉即可。

4、 测试

  • web pom加入必须的依赖包
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
  • web层创建com.web包,并添加入口类WebApplication.java
package com.web;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @ClassName: SpringBootWebApplication
 * TODO:类文件简单描述
 * @Version: 0.0.1
 */
@SpringBootApplication
public class SpringBootWebApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootWebApplication.class,args);
    }
}
  • com.web包中添加controller目录并新建一个Testcontroller,添加hello方法测试接口是否可以正常访问
package com.web.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @ClassName: Testcontroller
* TODO:类文件简单描述
* @Version: 0.0.1
*/
@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/hello")
    public String hello(){
        return "Hello World";
   }
}
  • 运行WebApplication类中的main方法启动项目,默认端口为8080,访问http://localhost:8080/test/hello


版权声明:本文为wo9aiwuchunmin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。