【问题标题】:Why @Inject not work after import as a jar file to another project?为什么@Inject 在作为 jar 文件导入到另一个项目后不起作用?
【发布时间】:2017-10-12 11:30:42
【问题描述】:

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

【问题讨论】:

  • 表示你的父项目中没有激活CDI。可能是beans.xml 不见了?
  • 看起来父项目没有启用 CDI。由于您尚未共享您的部署结构,因此无法提供更多帮助。

标签: cdi java-ee-7


【解决方案1】:

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

来自The Java EE 6 Tutorial

配置 CDI 应用程序

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

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

来自:https://stackoverflow.com/a/13057183/1838233

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

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

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

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

【讨论】:

猜你喜欢
  • 2020-12-31
  • 2015-08-22
  • 1970-01-01
  • 2012-11-05
  • 2012-10-11
  • 2021-12-19
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多