温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springboot多模块打包的记录是怎样的

发布时间:2021-09-29 14:46:07 来源:亿速云 阅读:221 作者:柒染 栏目:编程语言
# SpringBoot多模块打包的记录是怎样的 ## 前言 在现代企业级应用开发中,模块化设计已成为提升代码可维护性和团队协作效率的重要手段。SpringBoot作为当下最流行的Java应用框架,其多模块项目结构能够很好地支持复杂业务系统的开发。本文将详细记录一个完整的SpringBoot多模块项目从结构设计到打包部署的全过程,涵盖约9800字的技术细节和实践经验。 --- ## 目录结构 1. [多模块项目设计原理](#一多模块项目设计原理) 2. [项目初始化与父POM配置](#二项目初始化与父pom配置) 3. [子模块划分与依赖管理](#三子模块划分与依赖管理) 4. [模块间通信机制](#四模块间通信机制) 5. [多环境配置管理](#五多环境配置管理) 6. [打包插件深度配置](#六打包插件深度配置) 7. [自定义打包策略](#七自定义打包策略) 8. [常见问题解决方案](#八常见问题解决方案) 9. [性能优化建议](#九性能优化建议) 10. [CI/CD集成实践](#十cicd集成实践) --- ## 一、多模块项目设计原理 ### 1.1 模块化架构优势 - **解耦与复用**:将通用组件(如工具类、实体对象)独立为`common`模块 - **并行开发**:不同团队可同时开发业务模块(如`user-service`、`order-service`) - **依赖隔离**:避免循环依赖,如web模块不应依赖DAO模块 ### 1.2 典型模块划分 ```bash parent-project ├── pom.xml ├── project-common │ └── pom.xml ├── project-dao │ └── pom.xml ├── project-service │ └── pom.xml └── project-web └── pom.xml 

1.3 依赖传递规则

  • <dependencyManagement>统一管理版本号
  • <scope>provided</scope>避免依赖冲突
  • 使用mvn dependency:tree分析依赖树

二、项目初始化与父POM配置

2.1 创建父项目

<!-- parent pom.xml --> <packaging>pom</packaging> <modules> <module>project-common</module> <module>project-dao</module> <module>project-service</module> <module>project-web</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 

2.2 关键配置项

  • 资源过滤:确保application.yml能读取Maven属性
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> 
  • 插件管理:统一所有模块的编译JDK版本
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>11</source> <target>11</target> </configuration> </plugin> 

三、子模块划分与依赖管理

3.1 Common模块配置

<!-- project-common/pom.xml --> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> 

3.2 Web模块依赖示例

<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>project-service</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> 

3.3 依赖冲突解决

  • 使用exclusions排除冲突包
<exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> 

四、模块间通信机制

4.1 接口暴露方式

  • 在service模块定义接口:
public interface UserService { UserDTO getUserById(Long id); } 

4.2 实现类注入

// 在web模块通过@Autowired注入 @RestController public class UserController { @Autowired private UserService userService; } 

4.3 跨模块Bean扫描

@SpringBootApplication(scanBasePackages = { "com.example.web", "com.example.service" }) 

五、多环境配置管理

5.1 Profile配置

# application-dev.yml spring: datasource: url: jdbc:mysql://dev-db:3306/app 

5.2 激活指定Profile

mvn package -Pdev 

5.3 资源过滤

<profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile> 

六、打包插件深度配置

6.1 spring-boot-maven-plugin

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.web.Application</mainClass> <executable>true</executable> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> 

6.2 瘦身打包配置

<configuration> <excludeGroupIds>org.projectlombok</excludeGroupIds> <outputDirectory>target/libs</outputDirectory> </configuration> 

七、自定义打包策略

7.1 分离依赖包

<plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin> 

7.2 打包分类器使用

mvn package -Dclassifier=bin 

八、常见问题解决方案

8.1 模块找不到问题

[ERROR] Failed to execute goal on project web: Could not resolve dependencies for project... 

解决方案: 1. 检查父POM中的<module>声明 2. 执行mvn install安装本地仓库

8.2 主类找不到问题

No main manifest attribute in app.jar 

解决方案

<configuration> <mainClass>com.example.Application</mainClass> </configuration> 

九、性能优化建议

9.1 构建加速

  • 使用-T 1C参数并行编译
  • 配置<skipTests>true</skipTests>

9.2 镜像优化

FROM eclipse-temurin:17-jre-alpine COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] 

十、CI/CD集成实践

10.1 Jenkins流水线示例

pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package -DskipTests' } } } } 

10.2 制品上传

curl -X POST -u $USER:$PASSWORD \ -H "Content-Type: multipart/form-data" \ -F "file=@target/app.jar" \ http://nexus/repository/maven-releases/ 

结语

通过本文的详细记录,我们系统性地梳理了SpringBoot多模块项目的打包全流程。在实际项目中,建议根据团队规范进行适当调整。如需完整示例代码,可访问GitHub仓库

最佳实践提示:定期执行mvn dependency:analyze检查无用依赖,保持项目整洁 “`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI