Quarkus执行mvn clean install时出现javax.inject.Provider类未找到异常
Quarkus测试报错:java.lang.NoClassDefFoundError: javax/inject/Provider
我在Quarkus项目中编写了Publisher实体类和对应的测试类,执行mvn clean install时测试抛出javax.inject.Provider找不到的异常,但我的代码里并没有直接使用javax相关内容,求解决思路。
Publisher实体类
import io.quarkus.hibernate.orm.panache.PanacheEntity; import jakarta.persistence.Entity; import java.time.Instant; @Entity public class Publisher extends PanacheEntity { // ====================================== // = Attributes = // ====================================== public String name; public Instant createdDate = Instant.now(); // ====================================== // = Constructors = // ====================================== public Publisher(String name) { this.name = name; } public Publisher() { } @Override public String toString() { return "Publisher{" + "name='" + name + '\'' + ", createdDate=" + createdDate + ", id=" + id + '}'; } }
测试类
import io.quarkus.test.TestTransaction; import io.quarkus.test.junit.QuarkusTest; import org.agoncal.quarkus.panache.model.Publisher; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @QuarkusTest public class PublisherRepositoryTest { @Test @TestTransaction public void shouldCreateAndFindPublisher() { Publisher publisher = new Publisher("name"); publisher.persist(publisher); assertNotNull(publisher.id); publisher = publisher.findById(publisher.id); assertEquals("name", publisher.name); } }
异常信息
------------------------------------------------------------------------------- Test set: org.agoncal.quarkus.panache.repository.PublisherRepositoryTest ------------------------------------------------------------------------------- Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.755 s <<< FAILURE! - in org.agoncal.quarkus.panache.repository.PublisherRepositoryTest org.agoncal.quarkus.panache.repository.PublisherRepositoryTest.shouldCreateAndFindPublisher Time elapsed: 0.002 s <<< ERROR! java.lang.RuntimeException: java.lang.NoClassDefFoundError: javax/inject/Provider Caused by: java.lang.NoClassDefFoundError: javax/inject/Provider Caused by: java.lang.ClassNotFoundException: javax.inject.Provider
解决思路
- 排查依赖兼容性:Quarkus 2.x及以上版本全面迁移到Jakarta EE规范,若项目依赖中混入了旧的Java EE(javax)库,会引发API冲突。执行
mvn dependency:tree查看依赖树,确认是否有间接引入javax.inject的依赖。 - 替换为Jakarta版本依赖:如果发现存在javax相关依赖,将其替换为Jakarta EE版本,比如用
jakarta.inject:jakarta.inject-api替代javax.inject:javax.inject-api。 - 修正测试代码错误:测试中
publisher.persist(publisher);是错误用法,PanacheEntity的persist()方法无需传入自身对象,应改为publisher.persist();,避免潜在问题。
内容的提问来源于stack exchange,提问作者Jan D.M.
相关产品推荐
相关产品推荐

