【问题标题】:How can a osgi bundle know about an interface?osgi 包如何知道接口?
【发布时间】:2013-11-08 18:19:39
【问题描述】:

我正在学习使用 apache felix 处理 osgi 包。 我正在使用maven-bundle-plugin 来生成清单文件。

我创建了第一个仅包含一个接口的捆绑包,并将其导出以供其他人使用。 第二个包包含一个实现在第一个包中创建的接口的类。 我将第二个包配置为导入第一个包导出的包。

当我编译第二个包时,我收到一条错误消息,告诉我他无法解析接口。

我不确定我是否理解捆绑包的工作原理......

非常感谢...

[编辑] 更多信息: 使用 maven 编译时出现错误:

[INFO] Compilation failure
....../ServeurImpl.java:[17,36] error: cannot find symbol

ServeurImpl.java(第 17 行):

public class ServeurImpl implements Serveur {

Serveur 是在第一个包中创建的接口。

【问题讨论】:

  • 请发布有关错误的更多详细信息。这是一个maven错误吗?日食错误?您所做的在概念上是正确的,您的错误必须在其他地方。您的 impl pom(不仅是清单)应该对 API pom 具有 maven 依赖性
  • 感谢您的回复。我添加了一些信息。
  • 您确定在您的 ServeurImpl pom 中依赖于 Serveur 工件吗?
  • 需要注意的是,在这个阶段,错误与OSGi无关,它是一种运行时技术。由于构建配置中缺少依赖项,您所拥有的是构建错误。在你真正构建了一些东西之前,不要太担心 OSGi。

标签: java maven osgi bundle


【解决方案1】:

由于您将 API 部署在单独的包中,因此您需要在实现 API 的包的 pom.xml 文件中说明其可用。

在你的 pom.xml 中放这样的东西:

    <dependency>
        <groupId>the.group</groupId>
        <artifactId>Serveur</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>bundle</type>
        <scope>provided</scope>
    </dependency>

'Provided' 表示容器会提供它……你说的是 Felix。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多