【问题标题】:OSGi maven-bundle-plugin leaving out my packageOSGi maven-bundle-plugin 忽略了我的包
【发布时间】:2017-01-02 00:35:41
【问题描述】:

我在 Fuse 中有一个 CXF Web 服务应用程序,它在骆驼上下文 xml 文件中引用了一个 jar,该 jar 包含我从 WSDL 生成的文件。

<cxf:cxfEndpoint id="LookupEndpoint"
                 address="${my.LookupUri}"
                 serviceClass="com.whatever.IWebService"
                 wsdlURL="wsdl/MyWsdl.wsdl"/>  

com.whatever.* 在我的&lt;Import-Package&gt; 列表中。 jar 在我的 Maven 依赖项中。我可以说import com.whatever.IWebService;,它不会抱怨。

但是 maven-bundle-plugin 没有在 MANIFEST.MF 中包含这个包

它包括我要求的所有其他包。但不是这个。所以在 Fuse 中,当我部署它时,我得到 ClassNotFoundException,指的是 context.xml 类加载。

这很令人沮丧。有没有办法强制插件导入某个包?因为他们的自动魔法依赖求解器忽略了我的&lt;Import-Package&gt;

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>${version.maven-bundle-plugin}</version>
            <extensions>true</extensions>

            <configuration>
                <manifestLocation>src/main/resources/META-INF</manifestLocation>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Bundle-Version>${project.version}</Bundle-Version>

                     <Import-Package> 
                     *, 
                     com.imports.this.one.fine*,
                     com.imports.this.one.just.fine*,
                     com.imports.does.not.import.this.one.*,
                    </Import-Package> 

                    <Export-Package>
                    com.something.export.*
                    </Export-Package>

                </instructions>
            </configuration>
        </plugin>

【问题讨论】:

    标签: maven osgi jbossfuse fuseesb maven-bundle-plugin


    【解决方案1】:

    当您将&lt;Import-Package&gt; 与通配符一起使用时,会为所有匹配通配符包中的代码所依赖的包生成一个 OSGi Import-Package 标头。

    如果 maven-bundle-plugin 没有为您期望的包生成导入,则意味着您的包中的代码实际上并未引用该包。

    而不是导入这个包,它不应该包含在包中吗?为什么要导入它?

    【讨论】:

    • 嗨 Neil,我们的想法是我们将 WSDL 及其生成的类存储在 bundle jar 中。但它们只是像共享库。然后我们有服务,它使用共享库中的类公开端点。 (它有效。)但前提是包在 MANIFEST.MF 中。我现在将检查在某处的代码中随机实例化服务类是否可以解决此问题...
    • 就是这样。 ObjectFactory of = new ObjectFactory(); ***** OSGi 的儿子。谢谢大佬
    • 不确定我是否高兴你称 OSGi 为“***** 的儿子”!首先,问题根本不是 OSGi,而是其中一个构建工具 maven-bundle-plugin。其次,它所做的事情是有据可查的,而且非常合理。
    • @NeilBartlett 我认为 OP 在抱怨他的问题,然后向 OSGi 祈祷它的存在 :-)
    猜你喜欢
    • 2016-07-20
    • 2011-05-21
    • 2013-02-10
    • 2011-06-18
    • 2011-03-06
    • 1970-01-01
    • 2010-11-25
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多