首页 > 解决方案 > CDI:注入由依赖项生成的 bean

问题描述

我正在创建一个 Maven 依赖项,它有一个MessageHandler类。除此之外还有一个 MessageHandlerProduceer 类:

public class MessageHandlerProducer {

    @Produces
    public MessageHandler messageHandler() {
        return new MessageHandler();
    }
}

在核心项目中列出了依赖项,当我尝试注入MessageHandlerbean 时,出现以下错误:

Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: javax.enterprise.inject.UnsatisfiedResolutionException: Unsatisfied dependency for type com.example.MessageHandler and qualifiers [@Default]

标签: javamavencdiquarkus

解决方案


在多模块设置中,我们需要兄弟模块提供的 bean 信息。生成这些信息的最简单方法是通过jandex-plugin.

对于 Maven,应将以下代码段添加到提供生产者的模块中:

<build>
  <plugins>
    <plugin>
      <groupId>org.jboss.jandex</groupId>
      <artifactId>jandex-maven-plugin</artifactId>
      <version>1.1.0</version>
      <executions>
        <execution>
          <id>make-index</id>
          <goals>
            <goal>jandex</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

对于 gradle,可以使用以下代码段:

plugins {
    id 'org.kordamp.gradle.jandex' version '0.11.0'
}

这两个片段均取自上面链接的文档,仅包含在内以使此答案自包含。这些归功于Red Hat,因为他们是 quarkus 的维护者,并在上面链接的文档中提供了片段。


推荐阅读