CDI:注入由依赖项生成的 bean

CDI: Injecting a bean produced by a dependency

我正在创建一个 Maven 依赖项,它有一个 MessageHandler class。 旁边还有一个 MessageHandlerProduceer class:

public class MessageHandlerProducer {

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

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

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]

在多模块设置中,我们需要兄弟模块提供的 beans 信息。生成这些信息的最简单方法是 enabling Jandex support through the 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 的维护者,并在上面链接的文档中提供了片段。