Quarkus多模块应用测试报错:Not an entity [Customer类]
Quarkus多模块应用测试报错:Not an entity [class org.agoncal.quarkus.jpa.Customer]
针对你遇到的测试失败问题,以下是具体排查和解决步骤:
1. 统一Jakarta/Javax注解与依赖
Quarkus 3及以上版本完全基于Jakarta EE规范,混用旧的Javax注解会导致Hibernate无法识别实体:
- 检查
Customer类的@Entity注解,确保是jakarta.persistence.Entity,而非javax.persistence.Entity。 - 确认Customer模块的pom.xml中引入的是Jakarta持久化API依赖:
<dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <scope>provided</scope> </dependency> - 同步vintage-store模块的所有JPA相关依赖,确保全为Jakarta版本,避免javax和jakarta依赖共存。
2. 验证模块间依赖配置
确保vintage-store模块正确引入Customer模块的依赖,且范围满足测试需求:
<dependency> <groupId>org.agoncal.quarkus</groupId> <artifactId>customer-module</artifactId> <version>${project.version}</version> <scope>compile</scope> </dependency>
3. 配置实体类扫描范围
如果Customer实体不在vintage-store模块的默认扫描路径下,需要手动指定扫描范围:
- 在vintage-store模块的
application-test.properties中添加:quarkus.hibernate-orm.packages=org.agoncal.quarkus.jpa - 或者在
CustomerRepository类上添加Jakarta的@EntityScan注解:import jakarta.persistence.EntityScan; import io.quarkus.hibernate.orm.panache.PanacheRepository; @EntityScan("org.agoncal.quarkus.jpa") public class CustomerRepository implements PanacheRepository<Customer> { // 仓库实现代码 }
4. 检查测试类与持久化配置
- 确保测试类使用
@QuarkusTest注解,保证测试环境正确加载Quarkus上下文及依赖模块的实体。 - 若自定义了
persistence.xml,确认文件中显式声明了Customer实体:<persistence-unit name="test"> <class>org.agoncal.quarkus.jpa.Customer</class> <!-- 其他持久化配置 --> </persistence-unit>
5. 分步构建模块
先单独构建Customer模块,再构建vintage-store模块,避免依赖模块未正确编译导致类加载异常:
cd customer-module mvn clean install cd ../vintage-store mvn clean install
内容的提问来源于stack exchange,提问作者Jan D.M.
相关产品推荐
相关产品推荐

