文前知识
- 子项目可以继承父项目的依赖, 前提是需要使用parent标签指定父项目
- 子项目可以单独引入依赖, 依赖只对当前子项目有效
- 子项目中没有页面打包方式可以为jar, 有页面打包使用war
创建父工程
就按正常创建springboot项目就行
把src文件夹删除,以下红框的都可以删除,.gitignore如果用不上git也可以删除
创建子工程
挑一个模块出来详细说,其他模块都是同样道理,就不赘述了。
右键项目新建Module
新建model模块存放各种对象。 注意最后的Package:开始会把sparrow_model也带上,我们把它去掉
创建完成后我们按以下几个步骤来:
- 把启动类删除
- 修改pom文件<parent>标签中内容改为我们自己建的父工程
- 标明打包方式为jar <packaging>jar</packaging>
- 添加这个模块所需要的依赖
接下来,先clean,再install
【注意】:web模块的主程序类不要删除,作为全局的唯一入口
其他按上述步骤依次创建好
主程序所在模块
说一下主程序所在模块的不同点:
首先就是组件扫描,接口层肯定需要用到服务和实体类
这样我们在pom中引入另外两个模块,在使用其他模块的服务时就不会报未定义了。
然后添加打包信息
<!--多模块打包:只需在启动类所在模块的POM文件:指定打包插件 -->
<build>
<!-- 设置最终打包的名称-->
<finalName>sparrow-1.1</finalName>
<plugins>
<plugin>
<!--该插件主要用途:构建可执行的JAR -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--指定Main Class为全局的唯一入口-->
<mainClass>com.sparrow.web.SparrowWebApplication</mainClass>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<!--设置自己目录下的配置文件-->
<resource>
<!--下方resources的文件夹名字要和自己项目的文件夹名确认一致才行 很多人就是忽略了名字不一致 -->
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
</build>
修改父工程
子模块都创建完成后,修改父模块的pom文件
- 添加<packaging>pom</packaging>
- 添加子模块信息
- 添加依赖管理,我这里随便加的
Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
服务测试
在sparrow_model中新增User类
@Data
public class User {
private Integer id;
private String name;
}
那么我在服务层想用的话,就要在sparrow_service的pom文件中加上
在sparrow_service中模拟了一下查询数据
@Service("userService")
public class UserServiceImpl implements UserService {
@Override
public User getUserById(Integer id) {
User user = new User();
user.setId(1);
user.setName("花无缺");
return user;
}
}
再把这个服务暴露给接口层,在sparrow_web中新增UserController
@RestController
@RequestMapping("/v1/user")
public class UserController {
@Autowired
UserService userService;
@GetMapping("/{id}")
User getUserById(@PathVariable("id")Integer id){
return userService.getUserById(id);
}
}
直接启动主程序类,请求接口
打包部署
找到父工程,先clean,再package
在文件夹中找到打包好的jar包
在这个jar的根目录下执行java -jar sparrow-1.1.jar
补充知识
jar包和war包的区别:
- war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。
- war包是做好一个web应用后,通常是网站,打成包部署到容器中;jar包通常是开发时要引用通用类,打成包便于存放管理。
- war是Sun提出的一种Web应用程序格式,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织;classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)可以打包成jar放到WEB-INF下的lib目录下。JAR文件格式以流行的ZIP文件格式为基础。与ZIP文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用