您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。