这个问题是关于以一种可移植的方式(例如,应该在 Thorntail 2.4.0 和 Wildfly 15 上运行。
这是Thorntail建议的原始实现
@Inject
@org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue("swarm.port.offset")
private Optional<String> portOffset;
这在WildFly 15中不起作用,因此我们通过以下方式更改了代码:
@Inject
@ConfigProperty(name="swarm.port.offset")
private Optional<String> portOffset;
只要设置了系统属性,它就会很好地工作。
但是,在Thorntail中,它会生成以下异常:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: 对带有限定符的Optional类型的依赖关系不满意 @ConfigProperty
在注入点[BackedAnnotatedField] @Inject @ConfigProperty 私人com.my-company.core.internal.util.ZookeeperRegistry.portOffset
在com.my-company.core.internal.util.ZookeeperRegistry.portOffset(ZookeeperRegistry.java:0) WELD-001475:以下bean按类型匹配,但没有匹配的bean 限定词: -带有限定符[@Any @ConfigurationValue]的Producer方法[Optional]声明为[[UnbackedAnnotatedMethod] @ConfigurationValue @Dependent @产品 org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjectionPoint)]
非常感谢。
答案 0 :(得分:0)
代码最终在两个环境中运行,并且只有一个pom文件。
我详细介绍了采用的解决方案。
关于Maven依赖关系,无论我们是为Thorntail还是为WildFLy构建,我都包含了这种依赖关系
<dependency>
<groupId>org.eclipse.microprofile.config</groupId>
<artifactId>microprofile-config-api</artifactId>
</dependency>
使用DependencyManagement为Eclipse微概要文件解析实际版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<version>2.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencyManagement>