【问题标题】:CDI: Injecting a bean produced by a dependencyCDI:注入由依赖项生成的 bean
【发布时间】:2021-08-29 20:35:43
【问题描述】:

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

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]

【问题讨论】:

  • 这是一个多模块的maven项目吗?如果是这样:您是否在提供上述生产者方法的子模块中使用Jandex
  • 是的,它是一个多模块项目,并且解决了它。非常感谢!

标签: java maven cdi quarkus


【解决方案1】:

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

对于 Maven,应在提供生产者的模块中添加以下 sn-p:

<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,可以使用如下sn-p:

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

这两个 sn-ps 均取自上面链接的文档,仅包含在内以使此答案自成一体。这些人的积分转到Red Hat,因为他们是 quarkus 的维护者,并在上面链接的文档中提供了 sn-ps。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多