Weld 在库 jar 中找不到 CDI 生产者方法

Weld cannot find CDI producer method in library jar

使用 Wildfly 8.2.0.Final,我相信它使用 Weld 2.2,我在 Maven 多模块项目中用 2 个简单的 类 重现了这个问题。一个产生 javax.ws.rs.client.Client,另一个产生相同的注入点。 Arquillian 部署失败并显示 WELD-001408:不满足的依赖关系。 生产者位于一个库 jar 中,该库 jar 包含在消费者的 WEB-INF/lib 中。生产者在 META-INF 中有一个 beans.xmldiscovery-mode=annotation,消费者在 WEB-INF 中有一个 discovery-mode=all

重现步骤: 从根目录下载 this project 和 运行 mvn clean install

这是一个严重的错误。有一些 other SO 帖子关于 Weld 未满足的依赖项,但其中大部分是因为缺少 beans.xml。对于 CDI 1.2,beans.xml 是可选的,尽管我的示例确实有一对。有什么想法吗?

完整披露:也发布在 Weld 论坛 255328

经过几天尝试在另一个项目中重现该问题,但没有成功,我将原始项目缩减为 CDI 产品和消费者,并将代码发布在 JBoss 论坛中,还打开了一个 JIRA WELD-1921。 Martin Kouba 发现问题是使用了错误的 Produces 注解引起的!我没有 javax.enterprise.inject.Produces,而是 javax.ws.rs.Produces。这显然不是故意的,一定是我在 Eclipse 中自动导入包并以某种方式选择了错误的包时发生的! 还有一些其他问题,但没有什么是我无法解决的。非常感谢 Martin。