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

捆绑包中未解决的约束OSGI导入包缺少版本号无法导入捆绑包

端木狐若
2023-03-14

提前感谢。我有问题启动一个osgi捆绑包,它给出了这个错误消息:包/捆绑包将不安装。它编译,并构建好,当部署到Karaf时,它不会加载和抱怨丢失的布线包,看起来像是正在导出和导入。但是缺少一个版本id。

执行命令时出错:无法启动bundle mvn:com。通用电气。数字的passthru/passthrumt1。dataserviceimpl/1.0.1-SNAPSHOT在功能部件passthru-mt1-application-1.0.1-SNAPSHOT中:bundle passthrumt1中存在未解决的约束。dataserviceimpl[298]:无法解析298.0:缺少要求[298.0]osgi。装电线。包裹(osgi.willing.package=com.ge.digital.passthru.dataservice)

清单显示它正在导入包,并且正在导出,我唯一能找到的是导入包没有版本号。这可能是我的问题吗?有什么想法如何解决?

Manifest-Version: 1.0
Bnd-LastModified: 1524070286656
Build-Jdk: 1.8.0_91
Built-By: 212555427
Bundle-ManifestVersion: 2
Bundle-Name: PassThru MT1 :: Data Service Impl
Bundle-SymbolicName: passthrumt1.dataserviceimpl
Bundle-Version: 1.0.1.SNAPSHOT
Created-By: Apache Maven Bundle Plugin
Export-Service: com.ge.digital.passthru.dataservice.PDXDataService
Import-Package: com.ge.digital.passthru.dataservice,com.ge.digital.passt
 hru.entities;version="[1.0,2)",com.ge.digital.passtrhu.dataservice;vers
 ion="[1.0,2)",org.apache.camel;version="[2.17,3)",org.apache.camel.buil
 der;version="[2.17,3)",org.apache.camel.component.file;version="[2.17,3
 )",org.apache.camel.model;version="[2.17,3)",org.osgi.service.blueprint
 ;version="[1.0.0,2.0.0)",org.slf4j;version="[1.7,2)"
Tool: Bnd-1.50.0

这是我的POM

<!-- GE Internal Dependencies -->
<dependency>
  <groupId>com.ge.digital.passthru</groupId>
  <artifactId>passthrumt1.dataservice</artifactId>
  <version>${project.version}</version>
</dependency>
<dependency>
  <groupId>com.ge.digital.passthru</groupId>
  <artifactId>passthrumt1.entities</artifactId>
  <version>${project.version}</version>
</dependency>

<!-- Fuse Dependencies -->
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-core</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-blueprint</artifactId>
</dependency>
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-ftp</artifactId>
</dependency>

<!-- logging -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
</dependency>
<plugins>

  <!-- to generate the MANIFEST-FILE of the bundle -->
  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>${bundle-plugin-version}</version>
    <extensions>true</extensions>
    <configuration>
      <instructions>
        <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
        <Private-Package>com.ge.digital.passthru.dataservice.impl.*</Private-Package>
        <Import-Package>
        com.ge.digital.passtrhu.dataservice,
        com.ge.digital.passthru.entities,
        *
        </Import-Package>
      </instructions>
    </configuration>
  </plugin>

</plugins>

共有1个答案

叶明辉
2023-03-14

我想这可以追溯到旧的maven回购刷新与fuse的事情,你需要删除. m2/repository/xxx目录和fusehome/data目录的内容,并重新开始。

现在一切看起来都很好。

    PassThru MT1 :: Data Service (297)
    ----------------------------------
    Created-By = Apache Maven Bundle Plugin
    Manifest-Version = 1.0
    Bnd-LastModified = 1524090455529
    Build-Jdk = 1.8.0_91
    Built-By = NSK1212555427A$
    Tool = Bnd-1.50.0

Bundle-ManifestVersion = 2
Bundle-SymbolicName = passthrumt1.dataservice
Bundle-Version = 1.0.1.SNAPSHOT
Bundle-Name = PassThru MT1 :: Data Service

Export-Package =
        com.ge.digital.passthru.dataservice;uses:=com.ge.digital.passthru.entities;version=1.0.1.SNAPSHOT
Import-Package =
        com.ge.digital.passthru.entities;version="[1.0,2)"


JBossFuse:admin@FLEET TEST ENV> headers 298

PassThru MT1 :: Data Service Impl (298)
---------------------------------------
Created-By = Apache Maven Bundle Plugin
Manifest-Version = 1.0
Bnd-LastModified = 1524090458281
Build-Jdk = 1.8.0_91
Built-By = NSK1212555427A$
Tool = Bnd-1.50.0

Bundle-ManifestVersion = 2
Bundle-SymbolicName = passthrumt1.dataserviceimpl
Bundle-Version = 1.0.1.SNAPSHOT
Bundle-Name = PassThru MT1 :: Data Service Impl

Export-Service =
        com.ge.digital.passthru.dataservice.PDXDataService

Import-Package =
        com.ge.digital.passthru.dataservice;version="[1.0,2)",
        com.ge.digital.passthru.entities;version="[1.0,2)",
        org.apache.camel;version="[2.17,3)",
        org.apache.camel.builder;version="[2.17,3)",
        org.apache.camel.component.file;version="[2.17,3)",
        org.apache.camel.model;version="[2.17,3)",
        org.osgi.service.blueprint;version="[1.0.0,2.0.0)",
        org.slf4j;version="[1.7,2)"
 类似资料:
  • 我还不是一个有经验的OSGi用户,因此我会遇到一些问题。 我正在尝试使用作为外部提供程序,因为我不希望我的包包含所有这些类。 但是,当我运行这组包(my和)时,我得到以下错误: 错误:Bundle org.apache.serviceMix.bundles.hadoop-client[56]错误启动文件:bundles/org.apache.serviceMix.bundles.hadoop-cl

  • 我有一个使用OSGi-(felix)、SpringDM、hibernate和maven的项目。当我安装捆绑包时,它是正常的,当我运行捆绑包id时的输出是: 这是我在启动此捆绑包时看到的: 这是我的beans.xml: 这是我的pom文件: 此外,在felix中存在一个完整的捆绑错误。

  • 以前部署的JDOM的OSGi包究竟是如何解决这些相同的依赖关系的?它们从来没有在捆绑进口包中列出?此外,如果我试图将这些作为项目的依赖项包含并嵌入它们,只会加剧问题。救命啊!

  • 在完成教程后,我有一个带有OSGi的Web应用程序客户端捆绑包(WAB),我想使用quartz调度程序中的软件包来完成特定任务。我也使用Maven,我把以下依赖项: org.quartz-scheduler quartz 2.2.1 编译 org.quartz-scheduler quartz-jobs 2.2.1 编译 我已经在Maven存储库中进行了检查,似乎一切都很好,石英罐中的包/罐子在M

  • 我正在尝试在fuse服务器上部署一个捆绑包,但对其进行了一些更改。我添加了unirest依赖项来执行REST调用。 该版本在本地计算机和 Jenkins 上工作正常,但捆绑包会引发错误,并且无法在 fuse 服务器上部署。 它抛出以下错误: 以下是我的pom.xml:

  • 我是Apache karaf和OSGI的新手。我正在尝试编写和运行一个非常简单的捆绑包。但是我在启动该捆绑包时遇到了这个错误: 执行命令时出错:在捆绑包上执行命令时出错:无法解析karaf[86](R 86.0):缺少需求[karaf[86](R 86.0)]osgi。装电线。包裹(osgi.wiring.package=bundle)未解决的需求:[[karaf[86](R 86.0)]osgi