【问题标题】:Difference between Import-Package resolution:=optional and no dependency at allImport-Package 解析之间的区别:=可选和完全没有依赖关系
【发布时间】:2013-12-03 13:23:03
【问题描述】:

我已仔细阅读here 以使用“Import-Package”指令中的可选分辨率,但我并不真正理解为什么。另外可选和完全不指定依赖有什么区别?

【问题讨论】:

  • 该链接似乎已过期。有更新的链接吗?

标签: osgi


【解决方案1】:

如果您根本没有指定 Import-Package,那么您的捆绑包将无法访问该包即使它可用并被其他捆绑包导出

如果您选择导入包,那么您的包可以使用它(如果可用),但该包不可用并不会阻止您的包的解析。

您应该避免包级别的可选依赖项。要么你依赖一个包,要么你不依赖。通常,对可选依赖项的需求表明你的包的一致性很差,即它在一个模块中做了太多不相关的事情。

【讨论】:

    【解决方案2】:

    如果你说它是可选的,那么如果它是从其他捆绑包中导出的,它可能会发生。如果您根本不导入它,它将永远无法用于捆绑。 那么,你需要它做什么? 如果您的包中确实有可选部分,则可以导入可选依赖项。但是,您必须在使用时检查它们是否存在。

    如果找不到可选的导入,OSGi 不会抱怨,但如果你的 bundle 使用了根本没有导入的东西,JVM 会抱怨。

    【讨论】:

    • 如果我使用未导入的东西(如果是,何时?安装时),OSGi 会抱怨吗?还是 JVM 会抛出 ClassNotFound 异常?另外,如何在运行时检查一个包是否存在/导出?
    • JVM 会抱怨,抱歉。您可以使用 OSGi 控制台检查它,具体取决于您使用的 OSGi 实现
    • 我明白了:如果没有导入,我肯定无法访问包。但是在运行时(在我的代码中)查询是否启用了包的问题仍然存在......
    猜你喜欢
    • 2012-05-11
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2014-01-28
    相关资源
    最近更新 更多