当我使用 Gradle 重新构建原来的 Maven 项目时。遇到了异常:
Unsatisfied dependency for type LibraryBean and qualifiers [@Default]
- java member: ServiceImpl#bean
- declared on CLASS bean [types=[ServiceImpl, java.lang.Object], qualifiers=[@Default, @Any], target=ServiceImpl]
在发现注入失败时,检查了我的项目依赖,都是正常的,也能正常导入依赖模块的 Bean,但是在运行时始终诸如不了。
尝试注释所有异常的 Java Bean 声明,这时候正常启动,但是检测 Arc 容器内的 Bean,缺失了模块内的 Bean。
初步判定 Quarkus 在 Gradle 环境下构建,使用 Quarkus.run(...)
启动时 CDI 失败了。
├── rootProject
│ ├── module-library
│ ├── module-service (需要依赖并注入 module-library 模块中的 Bean)
项目的 settings.gradle
pluginManagement {
repositories {
mavenCentral()
gradlePluginPortal()
mavenLocal()
}
plugins {
id "${quarkusPluginId}" version "${quarkusPluginVersion}"
}
}
rootProject.name='rootProject'
include ':module-library'
include ':module-service'
服务(module-service)模块的 build.gradle
dependencies {
implementation project(":module-library")
}
库(module-library)模块声明 Bean
@ApplicationScoped
public class LibraryBean {
public void doSomething() {
System.out.println("Hello");
}
}
服务(module-service)模块注入 Bean
/////////////////// 启动方式 ///////////////////
@QuarkusMain
public class ServiceMain {
public static void main(String... args) {
Quarkus.run(args);
}
}
/////////////////// 注入 Bean ///////////////////
@ApplicationScoped
public class ServiceImpl {
@Inject
LibraryBean bean;
}
几经周转在 stack overflow 上找到了答案
其中提到的解决方案
resources
目录下声明空的 beans.xml
文件,相对路径为 src/main/resources/META-INF/beans.xml
。