【问题标题】:Weld OSGi + Apache Felix = can't find packagesWeld OSGi + Apache Felix = 找不到包
【发布时间】:2014-05-17 11:34:09
【问题描述】:

我将 Apache Felix 和weld-osgi 用于Java SE 应用程序。问题是在注入的 bean 中,我使用包 javax.enterprise.context.ApplicationScoped 中的 @ApplicationScoped。但是weld-osgi-bundle-2.1.2.Final中没有这样的包。

这个包存在于weld-se,但它不在 OSGi 包中。我该如何解决这个问题?

【问题讨论】:

    标签: java jakarta-ee osgi cdi jboss-weld


    【解决方案1】:

    我会尝试将以下依赖项作为单独的包运行:

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>1.1-20130918</version>
    </dependency>
    

    (Maven Central link)

    小心,您需要版本1.1-20130918Version 1.1MANIFEST.MF 中没有 OSGi 标头。您可以解压缩jar 并检查META-INF/MANIFEST.MF 文件中的OSGi 标头,例如Bundle-ManifestVersionBundle-SymbolicName。您还可以在此处查看该捆绑包所需的包,它位于 Import-Packages 标头中。

    如何判断

    检查weld-osgi-bundle on Maven Central(或其pom.xml)的依赖关系。它包含以下内容:

    <dependency>
        <groupId>org.jboss.weld</groupId>
        <artifactId>weld-api</artifactId>
    </dependency>
    

    这个weld-api 指的是上面的cdi-api,它包含了缺失的注解:

    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
    </dependency>
    

    另一种方法是在 Eclipse 中按下 F3(打开声明),同时光标在 ApplicationScoped 注释中,然后在 Project Explorer View 中启用 Link with Editor 并且它将显示ApplicationScoped.classcdi-api-1.1.jar 内。

    查找另一个 jar 的 OSGi 版本

    你可能需要比这个更多的包(传递依赖或者它只是第一个停止安装的包)。 并非所有知名的jar 都有 OSGi 标头,如下所示:

    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>
    

    在那种情况下search for the group id on Maven Central。包含javax.inject 包并具有OSGi 标头的两个结果:

    如果你找不到任何东西,你可以convert any jar to OSGi bundle by hand。实际上,您可以使用 weld-se.jar 来执行此操作,但单独安装依赖项看起来更简洁。

    【讨论】:

    • 感谢您的宝贵时间。我安装了 cdi-api.1.1-20130918 但它现在需要 javax.inject。我再次拥有这个包,但不像 osgi。你能解释一下你是如何找到这个包作为 OSGI 包的吗?我做了什么(根据你写的) - 我检查了 pom 文件 cdi-api 和那里 javax.injectjavax.inject${atinject. api.version}。但是我怎样才能找到不是简单的包而是 osgi 包呢?
    • 我现在做什么我从 maven 复制并检查 manifest.mf 是否是捆绑包。但是效果不好。
    • 谢谢!有时间可以看看stackoverflow.com/questions/22878449/…吗?我只需要一个方向......
    • 我已经回答了另一个问题,如果您想将 CDI 与 OSGi 一起使用,请使用 Pax CDI。它与 OSGi 基金会合作,成为 OSGi 中 CDI 的参考实现。
    • @AchimNierbeck:谢谢!我已经看到并赞成早先:-)
    猜你喜欢
    • 1970-01-01
    • 2018-05-14
    • 2020-07-29
    • 2014-08-16
    • 2017-07-11
    • 2012-06-09
    • 2018-09-11
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多