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

时间:2017-05-13 05:49:16

标签: cdi java-ee-7

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

1 个答案:

答案 0 :(得分:1)

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

来自The Java EE 6 Tutorial

  

配置CDI应用程序

     

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

因此,请确保beans.xmlcore-project中有parent-project。对于Maven:

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

  

对于EJB和JAR打包,您应该将beans.xml放入   SRC /主/资源/ META-INF /。对于WAR包装,您应该放置   src / main / webapp / WEB-INF /

中的beans.xml

另一个原因可能是您的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