Glassfish:Weld不会从一个jar中的类注入到WEB-INF / lib中相邻jar中的类

时间:2011-06-22 07:52:51

标签: java-ee glassfish java-ee-6 cdi

在Glassfish 3.1上部署时,我在使用依赖注入(使用CDI / Weld)在战争中使用的库中时遇到了麻烦。我有两个库,比如说:

WEB-INF/lib/library1.jar
WEB-INF/lib/library2.jar

library1包含一个公共类,比如说“InjectMe”。 Library2包含另一个公共类,比如“InjectionTarget”,注入站点如“@Inject public InjectMe injectMe”;

部署失败,并显示:

WELD-001408 Unsatisfied dependencies for type [InjectMe] with qualifiers [@Default] at injection point [[field] @Inject packagename.InjectionTarget.injectionSite].

这两个档案都是带有META-INF / beans.xml的有效CDI档案。

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

如果我手动解压缩library1和library2,将它们的类直接放入WEB-INF / classes,部署成功并且注入按预期工作。

这让我完全疯了。我正在重组我的模块,以便jar子包用maven-dependency-plugin解压缩并存档为合并的jar,然后我依赖于我的战争。但这非常令人毛骨悚然。

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

2 个答案:

答案 0 :(得分:3)

也许你遇到了这个错误?

https://issues.jboss.org/browse/WELD-846

http://java.net/jira/browse/GLASSFISH-15721

http://java.net/jira/browse/GLASSFISH-15735

我认为Glassfish 3.1.1-b04和更新版本使用Weld 1.1.1.Final,它被标记为底层Weld bug的修复版本。使用该确切版本进行测试可能足以确认它。

答案 1 :(得分:3)

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

如果您正在阅读本文,则可能存在类似问题。检查您的weld-osgi-bundle版本:

asadmin list-modules | grep org.jboss.weld.osgi-bundle

(Windows用户:使用findstr而不是grep,但命令保持不变)。

你应该得到结果:

Module : org.jboss.weld.osgi-bundle:1.1.1.Final

如果您看到旧版本,请按照此处的说明更新weld-osgi-bundle:

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

即使您不使用Seam,这些说明也适用。 Weld 1.1.1修复了CDI中的几个重要错误。为什么Glassfish 3.1.2还没有发布,因为它们是重要的修复,这超出了我的范围。