gpt4 book ai didi

jakarta-ee - 容器找不到 .jar 中的 CDI bean(不满足的依赖项)

转载 作者:行者123 更新时间:2023-12-04 01:46:13 28 4
gpt4 key购买 nike

我创建了一个 Java 项目作为其他项目的库,减少了项目之间的代码重复。此 lib 项目导出到 jar 包含在 Web 项目中(WAR,而不是 EAR)。

在 Web 项目中(这些类正在被删除),一切都照常工作,而所有类都保留在它们上面——注入(inject) 简单和复杂的对象(具有生产者和设置的对象)正常工作。

在删除 Web 项目的这些类并将具有这些相同类的 jar 添加到 Web 项目(在 Maven 项目中的 pom.xml 中设置此库)之后,一切都正常编译,就像以前一样。但是在启动服务器时,容器在 CDI 启动期间找不到现在存在于 jar 中的类(CDI bean),从而产生这个(著名的)错误:

WELD-001408: Unsatisfied dependencies for type Session with qualifiers (...)

已添加 beans.xml 在 src/main/resources 中的 META-INF 文件夹中(在 WELD 和 CDI 文档中表示)作为项目的根文件夹。

enter image description here

下面是 jar 中的 bean(Session、SessionFactory 和 ExampleLogger)示例,需要注入(inject)到其他项目中(并且在该类在 Web 项目中时正常工作)但现在是 不是 被 CDI 发现:

public class HibernateConnectionFactory {

@Produces
@ApplicationScoped @ConnectionBaseExample
public SessionFactory createSessionFactoryExample() {
Configuration configuration = new Configuration();
configurarSessionFactory(configuration, "baseExampleDS");
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();

return configuration.buildSessionFactory(registry);
}

@Produces
@RequestScoped @ConnectionBaseExample
public Session createSessionExample(@ConnectionBaseExample SessionFactory sessionFactory) {
return sessionFactory.openSession();
}

public void destruirSessionExemplo(@Disposes @ConnectionBaseExample Session session) {
if (session.isOpen()) {
session.close();
}
}
}

public class ExampleLoggerProducer {

@Produces
public ExampleLogger createLogger(InjectionPoint injectionPoint) {
return new ExampleLogger(injectionPoint.getMember().getDeclaringClass());
}
}

问题出现在 Maven 项目和非 Maven 项目中。有没有人遇到过这个问题?有谁知道 中存在的bean 的解决方案吗? jar 被容器发现?提前谢谢您,对英语不好表示抱歉。

Java EE7、CDI 1.1、WELD 2.1、服务器 WildFly 8.1

最佳答案

过了一会儿再试,我找到了解决办法─我把 beans.xml 内的 META-INF 文件夹中项目根目录 文件夹,它工作!这与 WELD 文档中关于如何在 jar 中使用 CDI bean 的描述相反,其中说放置 beans.xml 的位置在 src/main/resources/META-INF 中,但没关系。也许在一些 Maven 项目中,这是真的。

[更新] 这是有效的,因为我使用 Eclipse 的导出 jar 向导而不是使用 Maven 来构建 jar。使用 Maven 应该可以与 src/main/resources/META-INF 中的 beans.xml 一起正常工作。

希望这也可以帮助其他人解决这种情况。

关于jakarta-ee - 容器找不到 .jar 中的 CDI bean(不满足的依赖项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com