Jakarta ee 玻璃鱼:Weld won';t在WEB-INF/lib中,从一个jar中的类注入到相邻jar中的类

Jakarta ee 玻璃鱼:Weld won';t在WEB-INF/lib中,从一个jar中的类注入到相邻jar中的类,jakarta-ee,glassfish,java-ee-6,cdi,Jakarta Ee,Glassfish,Java Ee 6,Cdi,在Glassfish 3.1上部署时,我在war中使用的库中使用依赖项注入(带有CDI/Weld)时遇到问题。我有两个图书馆,比如: WEB-INF/lib/library1.jar WEB-INF/lib/library2.jar library1包含一个公共类,比如“InjectMe”。Library2包含另一个公共类,比如“InjectionTarget”,其注入站点类似于“@injectpublic InjectMe InjectMe;” 部署失败,原因是: WELD-001408 U

在Glassfish 3.1上部署时,我在war中使用的库中使用依赖项注入(带有CDI/Weld)时遇到问题。我有两个图书馆,比如:

WEB-INF/lib/library1.jar
WEB-INF/lib/library2.jar
library1包含一个公共类,比如“InjectMe”。Library2包含另一个公共类,比如“InjectionTarget”,其注入站点类似于“@injectpublic InjectMe InjectMe;”

部署失败,原因是:

WELD-001408 Unsatisfied dependencies for type [InjectMe] with qualifiers [@Default] at injection point [[field] @Inject packagename.InjectionTarget.injectionSite].
这两个存档都是有效的CDI存档,带有META-INF/beans.xml

我已经在Glassfish 3.1中更新了weld-osgi-bundle.jar,但仍然看到了这个问题

如果我手动解包library1和library2,将它们的类直接放入WEB-INF/类中,部署就会成功,注入也会按预期工作

这很快让我发疯。我即将重组我的模块,以便用maven dependency plugin解包jar子包,并将其归档为一个合并的jar,然后从war中依赖它。不过,这很可怕


想法?这不应该“正常”吗?

也许你遇到了这个错误


我认为Glassfish 3.1.1-b04和更新版本使用Weld 1.1.1.Final,它被标记为潜在焊接缺陷的修复版本。用这个精确的版本进行测试可能足以证实这一点

这原来是PEBKAC错误。我在台式机和工作站上更新了weld-osgi-bundle.jar,但在笔记本电脑上没有,但我想我也在笔记本电脑上更新了它

如果你正在读这篇文章,你可能会有类似的问题。使用以下工具检查您的weld osgi捆绑包版本:

asadmin list-modules | grep org.jboss.weld.osgi-bundle
(Windows用户:使用findstr而不是grep,但该命令在其他方面保持不变)

您应该得到以下结果:

Module : org.jboss.weld.osgi-bundle:1.1.1.Final
如果看到旧版本,请按照以下说明更新weld osgi捆绑包:

http://seamframework.org/Seam3/CompatibilityHome#H-UpgradingWeldInGlassFish31

即使不使用Seam,这些说明也适用。Weld 1.1.1修复了CDI中的几个重要缺陷。我无法理解为什么Glassfish 3.1.2没有随它一起发布,因为它们是重要的修复程序。

BTW,它似乎在Glassfish 3.2b6上正常工作,所以这可能只是(又一个)Glassfish CDI/Weld错误。你说得很对。我在发布后大约4个小时就确定了,但堆栈溢出直到现在才让我跟进。我有Glassfish 3.1.2.2(构建5),我有一个带有CDI管理bean的web应用程序,它在TomEE 1.5快照上运行良好,它在Glassfish 3.1.2.2上部署良好,但bean根本无法访问。这将是很好的有这个问题得到解决;这件事使我很恼火。