为什么@Inject作为jar文件导入到另一个项目后不起作用?



我有一个基于Maven的Java EE项目:core-project。 在这个项目中,我使用@Inject,所有事情都按预期工作。 但是在将此项目作为依赖项导入到另一个项目后,parent-project,注入的字段为空。 为什么将 jar 文件导入其他项目后,注入不起作用?

如果您的字段为空,这意味着无法解析匹配的 bean。 如果它们在另一个包中,则需要一个文件beans.xml(可以为空)。

来自 Java EE 6 教程:

配置 CDI 应用程序

使用 CDI 的应用程序必须具有名为 bean.xml 的文件。这 文件可以完全为空(它只有某些有限的内容 情况),但它必须存在。对于 Web 应用程序, bean.xml 文件必须位于 WEB-INF 目录中。对于 EJB 模块或 JAR 文件,bean .xml 文件必须位于 META-INF 目录中。

因此,请确保您的core-projectparent-project中有beans.xml。对于马文:

从: https://stackoverflow.com/a/13057183/1838233

对于 EJB 和 JAR 包装,您应该将 bean .xml 放入 src/main/resources/META-INF/.对于 WAR 包装,您应该放置 beans.xml in src/main/webapp/WEB-INF/

另一个原因可能是您的 Bean 带有@Alternative@Specializes注释。在这种情况下,您需要指定 bean 作为 bean 中的替代品.xml:

<beans ... >
<alternatives>
<class>sample.package.YourAlternativeBean</class>
</alternatives>
</beans>

有关此内容的更多信息,请参阅 http://docs.oracle.com/javaee/6/tutorial/doc/gjsdf.html。

最新更新