DeltaSpike 接口配置不可注入

DeltaSpike interface configuration not injectable

我正在按照 DeltaSpike documentation 创建一个绑定配置属性的可注入接口。

@Configuration(prefix = "application.")
public interface AppConfig {

    @ConfigProperty(name = "name", evaluateVariables = false)
    String getApplicationName();
}

我已经尝试通过 BeanProvider#getContextualReference@Inject 使用它。

@Inject
public Framework(final AppContext context, final BeanManager beanManager, AppConfig app) {
    this.appContext = context;
    this.beanManager = beanManager;
    logger.info("Initialization application with name {}.", app.getApplicationName());
}
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type AppConfig with qualifiers @Default

我也收到警告:
Unsatisfied dependency: no bean matches the injection point

我试过摆弄 beans.xml 文件和 build.gradle 中的依赖项,但无济于事,与文档相比,我不确定自己做错了什么。

有人能给我指出正确的方向吗?

问题不在于 DeltaSpike,而在于 Weld,即该项目所依赖的 CDI 实现。

问题是由 Gradle 分别构建 mainresource 引起的,因此首先需要修改资源输出以将它们放在一起。这会将资源输出设置到 类 目录。

sourceSets {
    main {
        output.resourcesDir = output.classesDirs.singleFile
    }

    test {
        output.resourcesDir = output.classesDirs.singleFile
    }
}

然后,运行 使用 Gradle 而不是 IDE 的应用程序,为此,添加并配置 application 插件。这将创建一个名为 run 的 Gradle 任务。

plugins {
    id "application"
    id "java"
    id "io.spring.dependency-management" version "1.0.9.RELEASE"
}

application {
    mainClassName = "org.example.app.Main"
}

如果使用 DeltaSpike 注释,他们可能需要修改 beans.xml 以找到 all 而不是 annotated

更多信息:
https://discuss.gradle.org/t/application-plugin-run-task-should-first-consolidate-classes-and-resources-folder-or-depend-on-installapp-or-stuff-like-weld-se-wont-work/1248

包含最小 DeltaSpike / Weld / Gradle 项目的存储库:
https://gitlab.com/SethFalco/mini-deltaspike