Osgi 导入包解析之间的差异:=可选且完全没有依赖关系

Osgi 导入包解析之间的差异:=可选且完全没有依赖关系,osgi,Osgi,我已经仔细阅读了在“Import-Package”指令中使用可选解决方案,但并不真正理解其中的原因。另外,可选与完全不指定依赖项之间有什么区别?如果您说它是可选的,那么从其他捆绑包导出时可能会出现这种情况。如果您根本不导入它,它将永远无法用于捆绑包。 那么,你需要它做什么? 如果捆绑包中确实有可选部分,则可以导入可选依赖项。然而,当你使用它时,你必须检查它们是否在那里 如果找不到可选的导入,OSGi不会抱怨,但是如果捆绑包使用了根本没有导入的东西,JVM会抱怨。如果您根本没有指定导入包,那么捆绑

我已经仔细阅读了在“Import-Package”指令中使用可选解决方案,但并不真正理解其中的原因。另外,可选与完全不指定依赖项之间有什么区别?

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


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

如果您根本没有指定导入包,那么捆绑包就无法访问该包,即使它可用并由其他捆绑包导出

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


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

如果我使用了未导入的东西(如果是,何时?安装时?),OSGi会抱怨吗?还是JVM会抛出ClassNotFound异常?另外,如何在运行时检查包是否存在/导出?JVM会抱怨,对不起。您可以使用OSGi控制台进行检查,具体取决于您使用的OSGi实现。请参见:如果没有导入,我肯定无法访问该包。但在运行时(在我的代码中)查询包是否已启用的问题仍然存在……该链接似乎已经过时。是否有更新的链接可用?