无法构建 quarkus 应用程序:不满足类型的依赖性

Failed to build quarkus application: Unsatisfied dependency for type

我正在尝试将一个小型企业(多模块)RESTEasy JAX-RS 应用程序移植到 Quarkus,但我遇到了以下错误。有许多我无法控制的对公司模块的依赖,但我尝试遵循 Quarkus 的上下文和依赖注入指南 (https://quarkus.io/guides/cdi-reference)。

OS: Ubuntu 18.04 (WSL)

Java: OpenJDK 11.0.8

命令:./mvnw clean install -DskipTests

[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.9.2.Final:build (default) on project <REDACTED>: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR]         [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: javax.enterprise.inject.spi.DeploymentException: Found 4 deployment problems:
...
[ERROR] [3] Unsatisfied dependency for type <REDACTED>.security.cryptography.CryptographyService and qualifiers [@Default]
[ERROR]         - java member: <REDACTED>.request.handlers.ConfigurationFileDownloadHandler#cryptographyService
[ERROR]         - declared on CLASS bean [types=[<REDACTED>.request.handlers.ConfigurationFileDownloadHandler, java.lang.Object], qualifiers=[@Default, @Any], target=<REDACTED>.request.handlers.ConfigurationFileDownloadHandler]

代码本身的DI:

...
import <REDACTED>.security.cryptography.CryptographyService;
...

@ApplicationScoped
public class ConfigurationFileDownloadHandler {

...

    @Inject
    private CryptographyService cryptographyService;
...

依赖在子模块pom文件中声明(如下面mvn dependency:tree可见):

[INFO] +- <REDACTED>.security.cryptography:cryptography-service-api-jar:jar:1.5.1:compile

我还在 <sub-module/src/main/resources 下创建了一个 application.properties 文件,内容如下:

quarkus.index-dependency.cryptography.group-id=<REDACTED>.security.cryptography
quarkus.index-dependency.cryptography.artifact-id=cryptography-service-api-jar

``beans.xml 文件。

我认为那些第三方公司 类 没有正确的注释可以被 Quarkus CDI 进程发现吗?

感谢任何帮助。

Am I right to think that those third-party corporate classes don't have the proper annotation to be discovered by the Quarkus CDI process?

是的,这应该是问题所在,如果 CryptographyService 中没有 CDI 注释,即使它已被 Jandex 索引,也无法注入。

这个问题的解决方案是创建一个生产者来在 bean 工厂内生产一个 CryptographyService bean。

像这样:

@Singleton
public class CryptographyServiceProducer {
    @Produces
    @ApplicationScoped
    public CryptographyService cryptographyService() {
        return new CryptographyService();
    }
}

作为参考,这里有一些关于 CDI bean 生产者的文档:https://quarkus.io/guides/cdi#q-ok-you-said-that-there-are-several-kinds-of-beans