spring boot 多模块项目的构建以及配置文件的读取

SpringBoot多模块构建实战

 

 

在目前的开发过程中,我们有一个服务需要用到第三方的硬件API,目前初步的想法是把这块服务单独做成一个模块来集成到项目中。那么就会涉及到springboot项目多模块构建,打包的问题。在此分享一下我填坑的解决办法。让我们开始吧。

基本配置:

1.创建父文件项目multiboot

在IDEA开发工具中,采用spring Initializr新建项目时生成的项目结构如下:

红框中的文件都是没必要的,为了项目看起来整洁,我们将其删除,同时src目录也是没用的,我们只留下如下的目录结构:

2.将其父级设置为Spring Boot启动父级:

<project...>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version&
### 配置资源过滤以确保子模块正确读取`codegen.yml` 在Spring Boot多模块项目中,子模块可能无法正确读取非标准资源文件(如`codegen.yml`),这通常是由于资源路径未正确配置或构建插件未包含该文件所致。为解决此问题,需要对Maven的资源过滤机制进行适当调整。 #### 1. 显式声明资源目录 Maven默认只将`src/main/resources`中的内容作为资源目录。如果`codegen.yml`位于其他位置,例如`src/main/custom-resources`,则应在子模块的`pom.xml`中显式声明资源目录: ```xml <build> <resources> <resource> <directory>src/main/custom-resources</directory> </resource> </resources> </build> ``` 此配置确保Maven在构建过程中将指定目录下的资源文件包含到最终的JAR包中[^1]。 #### 2. 使用资源过滤插件 为了更灵活地控制资源加载,可以使用`maven-resources-plugin`并启用资源过滤功能。在子模块的`pom.xml`中添加以下配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.1</version> <configuration> <encoding>UTF-8</encoding> <nonFilteredFileExtensions> <extension>yml</extension> </nonFilteredFileExtensions> </configuration> </plugin> </plugins> </build> ``` 此配置允许Maven在处理资源时保留`.yml`文件的内容不变,并将其正确打包进JAR中[^1]。 #### 3. 确保Spring Boot插件正确配置 如果使用了`spring-boot-maven-plugin`,请确认其配置是否包含必要的依赖和资源。可以在父模块或子模块的`pom.xml`中添加如下配置以确保资源被正确包含: ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> ``` 该配置确保构建过程中所有资源文件都会被正确打包,并可在运行时通过类路径访问。 #### 4. 验证资源是否成功打包 构建完成后,可通过解压JAR文件或使用`jar`命令验证`codegen.yml`是否被正确包含: ```bash jar tf target/sub-module.jar | grep codegen.yml ``` 若输出中显示`codegen.yml`存在于类路径下,则说明资源已成功打包。 #### 5. 正确加载资源文件 在代码中应使用类加载器从类路径中加载资源文件。例如: ```java InputStream inputStream = getClass().getClassLoader().getResourceAsStream("codegen.yml"); ``` 若返回值为`null`,则表示资源未被正确加载,需检查构建配置。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值