Java 焊接和试验罐

Java 焊接和试验罐,java,maven,dependency-injection,cdi,weld,Java,Maven,Dependency Injection,Cdi,Weld,我们有一个maven多模块项目,包括以下模块: prj srv prj客户 srv项目包含EJB。在prjsrv/src/test中,我们有EJB的@Alternative实现,在beans.xml的alternations部分中指定。这很有效 项目prj客户将prj srv作为依赖项。此外,它还依赖于类型测试jar、范围测试的prjsrv,因此它可以使用替代的EJB实现进行测试。这也行得通 现在:在prj client/src/main/java中,我们有EJB接口的本地实现(以便我们可以

我们有一个maven多模块项目,包括以下模块:

  • prj srv
  • prj客户
srv项目包含EJB。在prjsrv/src/test中,我们有EJB的@Alternative实现,在beans.xml的alternations部分中指定。这很有效

项目prj客户将prj srv作为依赖项。此外,它还依赖于类型测试jar、范围测试的prjsrv,因此它可以使用替代的EJB实现进行测试。这也行得通

现在:在prj client/src/main/java中,我们有EJB接口的本地实现(以便我们可以缓存数据),并用限定符@Cacheable注释。我想做的是在prj-client/src/test/java中设置测试,以便它们使用我从prj-srv中获得的测试实现(那些不可缓存的,但谁在乎呢,因为它是用于测试的)

我试过:

  • 在prj client/src/test/java中创建一个具有生产者方法(@products@Alternative@Cacheable)的类,但我不知道如何配置beans.xml将其设置为替代方法

  • 在prj srv/src/test/java中创建扩展测试EJB的类,注释@Alternative@Cacheable,并将它们放在alternatives部分的src/test/resources/META-INF/beans.xml中,但weld仍然从src/main/java注入“真正的”可缓存bean


将@Alternative与限定符混合是否存在问题?如何让我的测试使用合格类的替代实现?

刚刚找到了它:我忘了用@Inject标记@Cacheable实现的构造函数。显然,尽管它在beans.xml中被标记为一个备选方案,但由于Weld不知道如何初始化它,所以它没有抛出错误,而是默默地决定忽略该备选方案