在 Glassfish 3.1 上部署时,我在 war 中使用的库中使用依赖注入(inject)(使用 CDI/Weld)时遇到问题。我有两个图书馆,说:
WEB-INF/lib/library1.jar
WEB-INF/lib/library2.jar
library1 包含一个公共(public)类,例如“InjectMe”。 Library2 包含另一个公共(public)类,例如“InjectionTarget”,其注入(inject)站点如“@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,部署成功并且注入(inject)按预期工作。
这正在迅速让我完全发疯。我即将重组我的模块,以便使用 maven-dependency-plugin 解压缩 jar 子包并归档为合并的 jar,然后我将依赖于我的 war 。不过,这很可怕。
想法?这不应该“正常工作”吗?
最佳答案
也许你遇到了这个错误?
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 错误的修复版本。使用该确切版本进行测试可能足以确认它。
关于jakarta-ee - Glassfish:Weld 不会从一个 jar 中的类注入(inject)到 WEB-INF/lib 中相邻 jar 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6436630/