2016-08-25 55 views
0

我在Fuse中有一个CXF Web服务应用程序,并且它在驼峰上下文xml文件中获取了一个包含从WSDL生成的文件的jar的引用。OSGi maven-bundle-plugin忽略我的包

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

com.whatever.*是我<Import-Package>名单。该jar在我的maven依赖项中。我可以说import com.whatever.IWebService;,它不会抱怨。

但行家束-插件不包含此包中的MANIFEST.MF

它包含了我所要求的一切我包等。但不是这个。所以在Fuse中,当我部署它时,我得到了ClassNotFoundException,引用了context.xml类的加载。

这是非常令人沮丧的。有没有办法强制插件导入某个包?因为他们的自动神奇依赖求解器无视我<Import-Package>

 <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> 

回答

0

当您使用<Import-Package>使用通配符,则匹配通配符所有包生成一个OSGi导入-Package头在你的包的代码依赖于

如果maven-bundle-plugin没有为你期望的包生成一个导入,这意味着你的包中的代码并不实际引用该包。

而不是导入这个包,它不应该包含在捆绑?你为什么要导入它?

+0

Hi Neil,这个想法是我们将WSDLs及其生成的类存储在捆绑包中。但他们只是像共享库。然后我们有服务,它使用共享库中的类来公开端点。 (它的工作原理。)但是只有当这些包在MANIFEST.MF中。我会检查现在是否随机实例化代码中的服务类修正了这个... – djb

+0

就是这样。 ObjectFactory of = new ObjectFactory(); ***** OSGi的儿子。谢谢你 – djb

+0

不知道我很高兴你把OSGi称为“*****的儿子”!首先,问题不是OSGi,而是其中一个构建工具,maven-bundle-plugin。其次,它所做的事情是有记录的,非常合理。 –