【问题标题】:maven-bundle-plugin embed dependency failed to deploy bundle into OSGi containermaven-bundle-plugin 嵌入依赖项无法将捆绑包部署到 OSGi 容器中
【发布时间】:2013-02-28 11:23:58
【问题描述】:

我有一个 Maven 项目泛光灯。它在 Eclipse 中运行良好。然后我使用 bundle-plugin 生成包并将所有依赖项嵌入到带有<embed-dependenciy> 的单个目标包中。这是 pom.xml:

<groupId>net.floodlightcontroller</groupId>
<artifactId>floodlight</artifactId>
<version>master</version>
<packaging>bundle</packaging>
<build>
  <plugins>
    <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
     <instructions>
        <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
        <Embed-Transitive>true</Embed-Transitive>
        <Bundle-Activator>net.floodlightcontroller.core.Activator</Bundle-Activator>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
    </instructions>
  </configuration>
  </plugin>
 </plugins>
<build>

我已经检查了目标结构。包括所有依赖项。然后我检查 manifest.mf:

Import-Package:  
COM.jrockit.reflect,COM.newmonics.PercClassLoader,com.google.protobuf,com.informix.jdbc,
com.kenai.jnr.x86asm,groovy.lang,javax.annotation,javax.jms,javax.mail,
javax.mail.internet,javax.management,javax.naming,javax.net,javax.net.ssl,javax.script,
*
*
*

我想知道为什么它仍然导入这么多包,因为我已经将所有依赖项嵌入到单个包中。当我将捆绑包部署到 OSGi 容器并启动它时,出现错误:

Unable to start bundle 402: Unresolved constraint in bundle floodlight [402]: 
Unable to resolve 402.0: missing requirement [402.0] osgi.wiring.package;   
(osgi.wiring.package=COM.jrockit.reflect)

COM.jrockit.reflect 是导入包中列出的第一个包。但它没有在导出包中列出。运行时需要这个包吗?谁能帮帮我?

【问题讨论】:

    标签: java eclipse maven osgi bundle


    【解决方案1】:

    许多 jar 在代码中的依赖项比在 pom.xml 中声明的要多,这是一种可悲的做法。它们通常位于“桥接”环境的部分代码中。 IE。当 jar 在例如 jrockit 或 groovy 中执行时,它可以利用它,但核心代码并不真正需要这种依赖。此外,应该可能从您的应用服务器导入 javax 包。这些通常在 Maven 的“提供”范围内。

    一般来说,您可以将这些依赖项设为可选,并祈祷没有指向它的核心代码路径。您可以使用以下命令在 bnd 中将它们设为可选:

    <_import-package>
       javax.*, 
       COM.jrockit.*;
         COM.newmonics.*; 
         com.google.protobuf;
         com.informix.jdbc;
         com.kenai.jnr.x86asm;
         groovy.lang; 
           resolution:=optional, 
       *
    </_import-package>
    

    不要忘记末尾的“*”,它为正常导入提供了掩码。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 2010-11-25
      • 2015-10-04
      • 2012-04-20
      • 2018-10-24
      • 1970-01-01
      • 2018-09-20
      • 2015-03-12
      • 2016-09-21
      相关资源
      最近更新 更多