Quarkus startup error: "multiple (but same) scope type annotations" in dependency

Quarkus startup error: "multiple (but same) scope type annotations" in dependency

有谁知道为什么在启动 quarkus 时会抛出这个错误? (多模块maven项目。每个模块都有一个通过jandex maven插件生成的Jandex-Index。)

quarkus-universe-bom 依赖项从版本 1.2.1.Final 更新到 [=15 后发生错误=]1.3.1.Final。使用 1.3.0.Final 会导致相同的结果。

Caused by: io.quarkus.builder.BuildException:
Build failure: Build failed due to errors
        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#registerBeans threw an exception: javax.enterprise.inject.spi.DefinitionException: Producer method io.agroal.api.AgroalDataSource createDataSource_4c279770c59fa93dcf179ab15a1363f01f14f595() declares
multiple scope type annotations: javax.enterprise.context.ApplicationScoped, javax.enterprise.context.ApplicationScoped
        at io.quarkus.arc.processor.Beans.multipleScopesFound(Beans.java:363)
        at io.quarkus.arc.processor.Beans.createProducerMethod(Beans.java:223)
        at io.quarkus.arc.processor.BeanDeployment.findBeans(BeanDeployment.java:763)
        at io.quarkus.arc.processor.BeanDeployment.registerBeans(BeanDeployment.java:206)
        at io.quarkus.arc.processor.BeanProcessor.registerBeans(BeanProcessor.java:122)
        at io.quarkus.arc.deployment.ArcProcessor.registerBeans(ArcProcessor.java:262)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at io.quarkus.deployment.ExtensionLoader.execute(ExtensionLoader.java:938)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:273)
        at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
        at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2027)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1551)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1442)
        at java.base/java.lang.Thread.run(Thread.java:834)
        at org.jboss.threads.JBossThread.run(JBossThread.java:479)

我能够找到问题所在。感谢@Guillaume Smet 为我指明了正确的方向!

我使用了以下数据源设置:

# Datasource
quarkus.datasource.db-kind=mysql
quarkus.datasource.url=${DATASOURCE_CONNECTION_URL:jdbc:mysql://localhost:3306/apprds?useUnicode=true&characterEncoding=UTF-8}
quarkus.datasource.transactions=xa
quarkus.datasource.driver=com.mysql.cj.jdbc.MysqlXADataSource
quarkus.datasource.username=${DATASOURCE_USERNAME:root}
quarkus.datasource.password=${DATASOURCE_PASSWORD:admin}
quarkus.hibernate-orm.dialect=org.hibernate.dialect.MySQL5Dialect
quarkus.hibernate-orm.database.charset=UTF-8
quarkus.hibernate-orm.log.sql=false

不知道第一行(我知道它在那时是完全多余的)不仅多余而且还导致了问题。 只需删除

quarkus.datasource.db-kind=mysql

解决了问题。

正如所说,无论如何,数据源已完全指定。

我的假设是,额外的驱动程序规范等只会覆盖 "db-kind" 选项提供的任何默认值,并且它们可以共存。 https://quarkus.io/guides/datasource 中的文档以一种引导我从 "db-kind" 选项开始的方式编写。我后来为驱动程序添加了额外的配置条目,并且在 Quarkus 1.2 中运行良好。1.Final.

如果这显然不应该得到支持,那么文档可能会在某个时候指出这一点。至少我现在找不到相关的声明..