当前位置: 首页 > 知识库问答 >
问题:

容器找不到。jar中的CDI bean(未满足的依赖项)

方嘉言
2023-03-14

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

在Web项目中(这些类被移除),所有的类都照常工作,而所有的类都保留在这些项目上──简单和复杂对象(带有生产者和设置的对象)的注入都正常工作。

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

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

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());
    }
}

Java EE7,CDI 1.1,WELD 2.1,server WildFly 8.1

共有1个答案

通安宁
2023-03-14

经过一段时间的尝试,我找到了解决方案&我将beans.xml放在项目根文件夹内的META-INF文件夹上,它成功了!这与WELD文档中关于如何在JAR中使用CDI bean的描述背道而驰,其中指出将beans.xml放置在src/main/resources/meta-inf中,但这是可以的。也许在某些Maven项目中,这是真的。

[UPDATE]这是因为我使用Eclipse的export jar向导而不是使用Maven来构建jar。在src/main/resources/META-INF中使用Maven应该可以很好地与beans.xml配合使用。

希望这能帮助其他人在这种情况下也。

 类似资料:
  • 我试图从java调用一个使用C样式字符串的C函数。当我使用C风格的字符串时,程序执行得很好,但正如我声明std::string时,不知何故,它再也找不到依赖库了。我在eclipse环境中检查了includes文件夹,它确实包含 这是我的本地文件: 这段代码可以很好地从java编译并运行良好,但只要我尝试使用std::string版本(注释),代码就会编译并创建动态库,但在运行java代码时,我会遇

  • 我正在尝试实现一个quarkus-extension用于授权/认证。我使用现有的< code > quar kus-small rye-jwt-abx -扩展作为例子。一切似乎都很好,除了我不能注入< code>Principal: 我得到了 对 java.security.主体和限定符类型未满足的依赖关系 [@Default] 注入

  • 我试图编写一个简单的Java程序,通过JNI调用C函数来打印“Hello World”。一切编译都没有错误,但当我运行程序时,我得到一个“UnsatisfiedLinkError:找不到依赖库”。 根据Dependency Walker和dumpbin的说法,唯一的依赖项是“kernel32.dll”,在C:\Windows\System32及其依赖项中,也在System32中。 使命感 返回时没

  • 我正在尝试创建一个带有Wildfly和数据库连接的EJB Web项目,以持久化我的类“article”。但当我启动我的应用程序时,我得到了错误 包装服务; ArticleDaoImpl

  • 我有一个属性XML文件,如下所示: 我该怎么解决这个?