我正在使用 Eclipse 开发 OSGi 包。我使用 Eclipse OSGi 运行时配置测试代码。
代码在那里工作正常,但是当我将包导出为 jars 并尝试在另一个环境(例如 pax-runner)中使用它们时,我在运行时遇到 ClassNotFound 异常。 bundle 安装正常,没有错误。我在春分点执行命令:“diag bundle-number”,它说:“没有 Unresolved 约束”对于每个包。
我想知道是否有工具/方法可以知道,对于给定的 .jar 包,它是否需要任何外部库,这在 manifest.mf 中没有描述。
最佳答案
如果在运行时找到 Import-Package
中列出的所有包(以及 Require-Bundle
中列出的包),您的包将被解析。如果解析后出现ClassNotFoundException
或NoClassDefFoundError
,说明Import-Package
的内容有误。
看看 Bnd tool by Peter Kriens .这会对从您的类编译的字节码执行静态检查以发现确切的依赖关系,并为您生成 Import-Package
语句。一般来说,如果你使用 Bnd,你永远不会看到 ClassNotFound/NoClassDefFound,除非按名称动态加载类,例如使用 Class.forName()
。
关于java - 找出任何 .jar 包的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609982/