java - 另一个jar中的生产者可以用于bean注入(inject)吗?

标签 java jakarta-ee jboss-arquillian

我有一个带有记录器生成器的实用程序 jar,并且我正在使用 Arquillian 进行另一个项目进行测试。在项目中,我有一个带有 @Inject Logger logger 的类。当我使用 Arquillian 运行测试时,出现错误:org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependency for type Logger with qualifiers @Default 在注入(inject)点。我之前已经成功地使用当前项目中的生产者来生成记录器 bean,但这是我第一次尝试使用另一个 jar(或依赖项)中的生产者。所以,我想知道生产者是否必须在同一个项目中,或者他们可以在其他 jar 中。预先感谢您。

最佳答案

我认为看到了这个问题——Arquillian 并没有错。

显式 jar 包含 beans.xml 文件,该文件可以为空,或者不包含版本号,或者包含版本号 1.1,并将 bean-discovery-mode 属性设置为 all。如:

对于JavaEE7

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.1" bean-discovery-mode="all">

</beans>

CDI will not manage and inject those beans which are annotated with @Voted

另一种是隐式 bean 存档,它包含一些用范围类型注释的 bean,不包含 beans.xml 文件或包含 bean-discovery-mode 属性设置为已注释。

CDI can only manage and inject beans annotated with a scope type in an implicit archive.

引用Java教程

Packaging CDI Applications

Weld-Doc

关于java - 另一个jar中的生产者可以用于bean注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026394/

相关文章:

java - Tomcat:传递 -XX:MaxPermSize 没有明显效果

Java 程序查找一副牌中四张牌的组合数等于 24

java - 无法在Struts中设置转发

java - 在 spring 中进行改造调用时,当状态码不为 200 时,响应正文为 null

mysql - JPA - 没有名为 {{NAME_HERE}} 的 EntityManager 的持久性提供程序

java - 返回本地或远程的决定

maven - Arquillian 嵌入式 Glassfish 证书已过期

java - 如何在 arquillian 测试中禁用 @DependsOn 注释?

java - 解析 Neo4J 节点/与 JSon 的关系