maven多模块项目搭建,maven多模块构建

首页 > 教育 > 作者:YD1662024-05-17 18:53:58

④ 修改 Module name 增加横杠提升可读性,点击「 Finish 」

maven多模块项目搭建,maven多模块构建(9)

⑤ 同理添加「 demo-dao 」、「 demo-common 」、「 demo-web 」子模块,最终得到项目目录结构如下

|-- demo |-- .gitignore |-- pom.xml |-- demo-biz | |-- pom.xml | |-- src | |-- main | | |-- java | | |-- resources | |-- test | |-- java |-- demo-common | |-- pom.xml | |-- src | |-- main | | |-- java | | |-- resources | |-- test | |-- java |-- demo-dao | |-- pom.xml | |-- src | |-- main | | |-- java | | |-- resources | |-- test | |-- java |-- demo-web |-- pom.xml |-- src |-- main | |-- java | |-- resources |-- test |-- java 4.3 整理父 pom 文件中的内容

① 删除 dependencies 标签及其中的 spring-boot-starter 和 spring-boot-starter-test 依赖,因为 Spring Boot 提供的父工程已包含,并且父 pom 原则上都是通过 dependencyManagement 标签管理依赖包。

注:dependencyManagement 及 dependencies 的区别自行查阅文档

② 删除 build 标签及其中的所有内容,spring-boot-maven-plugin 插件作用是打一个可运行的包,多模块项目仅仅需要在入口类所在的模块添加打包插件,这里父模块不需要打包运行。而且该插件已被包含在 Spring Boot 提供的父工程中,这里删掉即可。③ 最后整理父 pom 文件中的其余内容,按其代表含义归类,整理结果如下:

<!-- 基本信息 --> <modelVersion>4.0.0</modelVersion> <packaging>pom</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <!-- 项目说明:这里作为聚合工程的父工程 --> <groupId>com.example.demo</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 继承说明:这里继承Spring Boot提供的父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.2.RELEASE</version> <relativePath/> </parent> <!-- 模块说明:这里声明多个子模块 --> <modules> <module>demo-biz</module> <module>demo-common</module> <module>demo-dao</module> <module>demo-web</module> </modules> <!-- 属性说明 --> <properties> <java.version>1.8</java.version> <demo.version>0.0.1-SNAPSHOT</demo.version> </properties> 4.4 简易 HTTP 接口测试

准备工作都完成之后,通过一个简易的 HTTP 接口测试项目是否正常运行。

① 首先在 demo-web 层创建 com.example.demo.web 包并添加入口类 DemoWebApplication.java

注:com.example.demo.web 为多级目录结构并非单个目录名

package com.example.demo.web; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author linjian * @date 2019/1/15 */ @SpringBootApplication public class DemoWebApplication { public static void main(String[] args) { SpringApplication.run(DemoWebApplication.class, args); } }

② 其次在 demo-web 层的 pom 文件中添加必要的依赖包

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

② 然后在 com.example.demo.web 包中添加 controller 目录并新建一个 controller,添加 test 方法测试接口是否可以正常访问。

package com.example.demo.web.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author linjian * @date 2019/1/15 */ @RestController @RequestMapping("demo") public class DemoController { @GetMapping("test") public String test() { return "Hello World!"; } }

③ 最后运行 DemoWebApplication 类中的 main 方法启动项目,默认端口为 8080,访问 http://localhost:8080/demo/test 即可测试接口

maven多模块项目搭建,maven多模块构建(10)

4.5 配置模块间的依赖关系

通常 JAVA Web 项目会按照功能划分不同模块,模块之间通过依赖关系进行协作,下面将完善模块之间的依赖关系。

① 首先在父 pom 文件中使用「 dependencyManagement 」标签声明所有子模块依赖

<!-- 依赖管理:这里统一管理依赖的版本号 --> <dependencyManagement> <dependencies> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-biz</artifactId> <version>${demo.version}</version> </dependency> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-common</artifactId> <version>${demo.version}</version> </dependency> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-dao</artifactId> <version>${demo.version}</version> </dependency> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-web</artifactId> <version>${demo.version}</version> </dependency> </dependencies> </dependencyManagement>

注:${demo.version} 定义在 properties 标签中

② 其次在 demo-biz 层中的 pom 文件中添加 demo-dao 及 demo-common 依赖

<dependencies> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-common</artifactId> </dependency> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-dao</artifactId> </dependency> </dependencies>

③ 之后在 demo-web 层中的 pom 文件中添加 demo-biz 依赖

<dependencies> <dependency> <groupId>com.example.demo</groupId> <artifactId>demo-biz</artifactId> </dependency> </dependencies> 4.6 web 层调用 biz 层接口测试

模块依赖关系配置完成之后,通过 web 层 测试下 biz 层的接口是否可以正常调用。

① 首先在 demo-biz 层创建 com.example.demo.biz 包,添加 service 目录并在其中创建 DemoService 接口类及 impl 目录(用于存放接口实现类)。

package com.example.demo.biz.service; /** * @author linjian * @date 2019/1/15 */ public interface DemoService { String test(); }

package com.example.demo.biz.service.impl; import com.example.demo.biz.service.DemoService; import org.springframework.stereotype.Service; /** * @author linjian * @date 2019/1/15 */ @Service public class DemoServiceImpl implements DemoService { @Override public String test() { return "interface test"; } }

② DemoController 通过 @Autowired 注解注入 DemoService ,修改 DemoController 的 test 方法使之调用 DemoService 的 test 方法

@Autowired private DemoService demoService; @GetMapping("test") public String test() { return demoService.test(); }

③ 再次运行 DemoWebApplication 类中的 main 方法启动项目,发现如下报错

*************************** APPLICATION FAILED TO START *************************** Description: Field demoService in com.example.demo.web.controller.DemoController required a bean of type 'com.example.demo.biz.service.DemoService' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.example.demo.biz.service.DemoService' in your configuration.

原因是找不到 DemoService 类

④ 在 DemoWebApplication 入口类中增加包扫描,设置 @SpringBootApplication 注解中的 scanBasePackages 值为 com.example.demo

@SpringBootApplication(scanBasePackages = "com.example.demo")

⑤ 设置完后重新运行 main 方法,项目正常启动,访问 http://localhost:8080/demo/test 测试接口

maven多模块项目搭建,maven多模块构建(11)

4.7 集成 mybatis

以上接口均是静态的,不涉及数据库操作,下面将集成 MyBatis 访问数据库中的数据。

① 首先父 pom 文件中声明 mybatis-spring-boot-starter 及 lombok 依赖

<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.22</version> </dependency>

② 其次在 demo-dao 层中的 pom 文件中添加上述依赖

<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies>

③ 之后在 demo-dao 层创建 com.example.demo.dao 包,通过 mybatis-genertaor 工具生成 dao 层相关文件( DO 、 Mapper 、 xml ),目录结构如下

|-- demo-dao |-- pom.xml |-- src |-- main | |-- java | | |-- com | | |-- example | | |-- demo | | |-- dao | | |-- entity | | | |-- UserDO.java | | |-- mapper | | |-- UserMapper.java | |-- resources | |-- mybatis | |-- UserMapper.xml |-- test |-- java

④ 然后在 demo-web 层中的 resources 目录 创建 applicatio.properties 文件并在其中添加 datasource 及 MyBatis 相关配置项

spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8 spring.datasource.username = test spring.datasource.password = 123456 mybatis.mapper-locations = classpath:mybatis/*.xml mybatis.type-aliases-package = com.example.demo.dao.entity

注:如果生成的 xml 在 dao 层 resources 目录的子目录中则 mybatis.mapper-locations 需设置为 classpath:mybatis//.xml

⑤ DemoService 通过 @Autowired 注解注入 UserMapper ,修改 DemoService 的 test 方法使之调用 UserMapper 的 selectById 方法

@Autowired private UserMapper userMapper; @Override public String test() { UserDO user = userMapper.selectById(1); return user.toString(); }

⑥ 再次运行 DemoWebApplication 类中的 main 方法启动项目,出现如下报错

*************************** APPLICATION FAILED TO START *************************** Description: Field userMapper in com.example.demo.biz.service.impl.DemoServiceImpl required a bean of type 'com.example.demo.dao.mapper.business.UserMapper' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'com.example.demo.dao.mapper.business.UserMapper' in your configuration.

原因是找不到 UserMapper 类⑦ 在 DemoWebApplication入口类中增加 dao 层包扫描,添加 @MapperScan 注解并设置其值为 com.example.demo.dao.mapper

@MapperScan("com.example.demo.dao.mapper")

⑧ 设置完后重新运行 main 方法,项目正常启动,访问 http://localhost:8080/demo/test 测试接口

maven多模块项目搭建,maven多模块构建(12)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.