无法构建 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
我正在尝试将一个小型企业(多模块)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
``
我认为那些第三方公司 类 没有正确的注释可以被 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