# 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
<dependencyManagement>
统一管理版本号<scope>provided</scope>
避免依赖冲突mvn dependency:tree
分析依赖树<!-- 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>
application.yml
能读取Maven属性<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>11</source> <target>11</target> </configuration> </plugin>
<!-- project-common/pom.xml --> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>
<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>
exclusions
排除冲突包<exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions>
public interface UserService { UserDTO getUserById(Long id); }
// 在web模块通过@Autowired注入 @RestController public class UserController { @Autowired private UserService userService; }
@SpringBootApplication(scanBasePackages = { "com.example.web", "com.example.service" })
# application-dev.yml spring: datasource: url: jdbc:mysql://dev-db:3306/app
mvn package -Pdev
<profile> <id>prod</id> <properties> <env>prod</env> </properties> </profile>
<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>
<configuration> <excludeGroupIds>org.projectlombok</excludeGroupIds> <outputDirectory>target/libs</outputDirectory> </configuration>
<plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> </plugin>
mvn package -Dclassifier=bin
[ERROR] Failed to execute goal on project web: Could not resolve dependencies for project...
解决方案: 1. 检查父POM中的<module>
声明 2. 执行mvn install
安装本地仓库
No main manifest attribute in app.jar
解决方案:
<configuration> <mainClass>com.example.Application</mainClass> </configuration>
-T 1C
参数并行编译<skipTests>true</skipTests>
FROM eclipse-temurin:17-jre-alpine COPY target/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"]
pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package -DskipTests' } } } }
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
检查无用依赖,保持项目整洁 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。