为CDI指定beans.xml的自定义路径

时间:2017-12-07 09:35:12

标签: java java-ee cdi

当我使用Spring并希望编写单元测试时,我可以通过各种方式指定自定义上下文配置,例如,通过提供context.xml的不同路径。

但如果我想在同一个maven模块中使用自定义依赖项配置进行测试,我不知道如何为CDI做到这一点。

关于这一点,文档是very strict

  

对于EJB模块或JAR文件,beans.xml部署描述符if   现在,必须在META-INF目录中。

如果源中已经有/META-INF/beans.xml,我就不能将不同的一个放入测试资源中(它将被忽略)。

有没有办法配置Weld / CDI,可能是通过使用一些系统变量来改变beans.xml的路径?

1 个答案:

答案 0 :(得分:1)

  

对于EJB模块或JAR文件,beans.xml部署描述符(如果存在)必须位于META-INF目录中。

这是事实,但是这涉及到已创建/打包的JAR,然后您将其用作应用程序的依赖项。但是你的应用也可以拥有自己的beans.xmlbeans.xml只是一种定义一个bean存档和某些结构(拦截器,装饰器......)存档中的方法。这意味着,例如,除非您在该应用程序的beans.xml中指定,否则将不会在您的应用程序中启用通过该{JAR库中的beans.xml启用的拦截器。因此,您在文档和您要求的测试之间看到的链接可能不正确/相关。但不确定我是否让你在那里。

  

有没有办法配置Weld,可能是通过使用一些系统变量来改变beans.xml的路径?

不,没有。但在EE中,您主要使用Arquillian进行测试,并允许您(除其他外)定义测试部署。在那里,您可以包含您想要的任何自定义beans.xml。这也是Weld / CDI TCK测试大多数时间使用的。