如何将重复实体提取为共享模块并在多个Spring项目中使用?
提取重复实体类至公共项目的实现步骤
1. 创建公共Jar项目
新建一个纯Java Maven/Gradle项目(无需Spring Boot Web等额外模块,仅作为公共模型库),命名比如common-model,配置好项目的groupId、artifactId和版本号(示例:com.ronyt.common:common-model:1.0.0)。
2. 配置公共项目依赖
根据实体类的依赖,在公共项目的构建文件中添加必要依赖:
- Maven示例(
pom.xml):
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ronyt.common</groupId> <artifactId>common-model</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <dependencies> <!-- Lombok:保证实体类注解正常生效 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> <!-- Jackson:支持JSON序列化/反序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> <scope>provided</scope> </dependency> </dependencies> </project>
- Gradle示例(
build.gradle):
plugins { id 'java' } group 'com.ronyt.common' version '1.0.0' repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.30' annotationProcessor 'org.projectlombok:lombok:1.18.30' compileOnly 'com.fasterxml.jackson.core:jackson-databind:2.15.2' }
3. 迁移实体类及关联枚举
将两个项目中重复的实体类,以及它依赖的Hand枚举,完整迁移到公共项目的对应包路径下:
- 实体类放在与原项目一致的包(比如
com.ronyt.common.model.entity),避免修改业务项目的引用路径 Hand枚举放在com.ronyt.common.model.enums,保持原包结构不变
4. 发布公共项目到仓库
- 本地测试:在公共项目根目录执行
mvn install(Maven)或gradle publishToMavenLocal(Gradle),将Jar包安装到本地Maven仓库。 - 正式环境:推送到公司私有Maven仓库(如Nexus、Artifactory),方便两个业务项目统一拉取。
5. 在业务项目中引入公共依赖
在两个Spring项目的构建文件中,添加公共项目的依赖:
- Maven示例:
<dependency> <groupId>com.ronyt.common</groupId> <artifactId>common-model</artifactId> <version>1.0.0</version> </dependency>
- Gradle示例:
implementation 'com.ronyt.common:common-model:1.0.0'
6. 清理与验证
- 删除两个业务项目中原来的重复实体类和
Hand枚举 - 启动业务项目,测试接口调用、JSON序列化/反序列化等功能,确保编译和运行无异常
内容的提问来源于stack exchange,提问作者Rony Tesler
相关产品推荐
相关产品推荐

