gpt4 book ai didi

osgi - Unresolved 要求 : osgi. 组件

转载 作者:行者123 更新时间:2023-12-04 00:06:31 25 4
gpt4 key购买 nike

我正在尝试在 Karaf 上开发一个包含 REST API 和来自定制服务的调用的 OSGi WAB。然而,出于某种奇怪的原因,OSGi 框架提示一个不满意的能力,osgi.component .

我想知道 :

  • 我该如何解决这个问题?
  • 什么是osgi.component捆?为什么需要?
  • 为什么 maven-bundle-plugin(因此也 bnd)在条目“Require-Capability”中声明它?
  • 如果我需要在 OSGi 框架上安装它,我在哪里可以找到它?

  • 一些附加信息:
  • Karaf 版本:4.0.7;
  • Maven 捆绑插件:3.2.0;
  • 操作系统:Windows 10 64 位;
  • IDE:Eclipse NEON ;

  • 一些提供附加信息的代码:

    整个错误:

    Error executing command: Error executing command on bundles: Error starting bundle 96: Unable to resolve com.massimobono.karaf.examples.user-fully-rest [96](R 96.0): missing requirement [com.massimobono.karaf.examples.user-fully-rest [96](R 96.0)] osgi.extender; (&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0))) Unresolved requirements: [[com.massimobono.karaf.examples.user-fully-rest [96](R 96.0)] osgi.extender; (&(osgi.extender=osgi.component)(version>=1.3.0)(!(version>=2.0.0)))]



    list 文件:
    Manifest-Version: 1.0
    Bundle-SymbolicName: com.massimobono.karaf.examples.user-fully-rest
    Archiver-Version: Plexus Archiver
    Built-By: massi
    Bnd-LastModified: 1479908575162
    Bundle-ActivationPolicy: lazy
    Bundle-ManifestVersion: 2
    Import-Package: com.massimobono.karaf.examples.user;version="[0.0,1)",
    com.massimobono.karaf.examples.user.service;version="[0.0,1)",javax.w
    s.rs;version="[2.0,3)",javax.ws.rs.core;version="[2.0,3)"
    Require-Capability: osgi.extender;filter:="(&(osgi.extender=osgi.compo
    nent)(version>=1.3.0)(!(version>=2.0.0)))",osgi.service;filter:="(obj
    ectClass=com.massimobono.karaf.examples.user.service.UserService)";ef
    fective:=active,osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Service-Component: OSGI-INF/com.massimobono.karaf.examples.user.ui.ful
    lyrest.UserRest.xml
    Tool: Bnd-3.2.0.201605172007
    Originally-Created-By: Maven Integration for Eclipse
    Export-Package: com.massimobono.karaf.examples.user.ui.fullyrest;uses:
    ="javax.ws.rs,javax.ws.rs.core";version="0.0.1"
    Bundle-Name: user-fully-rest Maven Webapp
    Bundle-Version: 0.0.1.SNAPSHOT
    Created-By: Apache Maven Bundle Plugin
    Build-Jdk: 1.8.0_91

    休息基类:
    package com.massimobono.karaf.examples.user.ui.fullyrest;

    import java.time.LocalDateTime;

    import javax.ws.rs.DELETE;
    import javax.ws.rs.GET;
    import javax.ws.rs.PUT;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;

    import org.osgi.service.component.annotations.Component;
    import org.osgi.service.component.annotations.Reference;

    import com.massimobono.karaf.examples.user.User;
    import com.massimobono.karaf.examples.user.service.UserService;
    import com.massimobono.karaf.examples.user.service.UserServiceException;

    @Path("user")
    @Component(immediate=true)
    public class UserRest {

    @Reference
    private volatile UserService userService;

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String getUserNumber() {
    try {
    return String.format("<h1>Total users: %d</h1>", this.userService.size());
    } catch (UserServiceException e) {
    return String.format("Couldn't fetch total users because %s", e.getMessage());
    }
    }

    @PUT
    @Path("add/{name}/{surname}")
    @Produces(MediaType.TEXT_HTML)
    public String add(@PathParam("name") String name, @PathParam("surname") String surname) {
    try {
    User u = new User(name, surname, LocalDateTime.now());
    this.userService.addUser(u);
    return String.format("<h1>New user with id %d</h1>", u.getId());
    } catch (UserServiceException e) {
    return String.format("<h1>Couldn't fethc total users because %s</h1>", e.getMessage());
    }
    }

    @DELETE
    @Path("remove/{id}")
    @Produces(MediaType.TEXT_HTML)
    public String remove(@PathParam("id") int id) {
    User u;
    try {
    u = this.userService.getUser(id);
    this.userService.removeUser(u);
    return String.format("<h1>User name=%s surname=%s removed correctly</h1>", u.getName(), u.getSurname());
    } catch (UserServiceException e) {
    return String.format("<h1>Couldn't remove user because %s</h1>", e.getMessage());
    }

    }

    }

    感谢您的任何回复

    最佳答案

    How can I solve this issue?



    您的 Karaf 运行时很可能缺少 SCR。您可以使用 feature:install scr 安装它

    What is osgi.component bundle? Why is needed?



    这不是捆绑,而是要求。基本上它说你的包需要知道如何通过声明性服务处理和注册其中定义的组件的 SCR(或其他东西)。

    Why maven-bundle-plugin (thereby also bnd), declares it inside the entry "Require-Capability"?



    因为它看到您正在使用声明式服务并且知道它们不会工作,除非您在运行时有一些东西可以理解它们的声明方式并知道如何管理它们的生命周期。如果不存在该要求(我认为 bnd 的早期版本就是这种情况),那么您的捆绑包启动时不会出现问题,但服务仍不会注册/激活。

    If I need to install it on the OSGi framework, where may I find it?



    在 Karaf 中,它可用作功能(请参阅第一个问题的答案)。在普通的 OSGi 运行时(Felix、Equinox 等)中,您需要手动安装它。 It's available in Maven central .

    关于osgi - Unresolved 要求 : osgi. 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40790543/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com