我正在使用OSGi开发Eclipse。我使用一个Eclipse OSGi运行时配置测试代码。
代码在那里运行得很好,但是当我将包导出为jars并尝试在另一个环境(例如pax-runner)中使用它们时,我在运行时得到了ClassNotFound异常。这些包安装得很好,没有任何错误。我在equinox上执行命令:"diag bundle-number“,它对每个包都说:”没有未解决的约束“。
我想知道是否有工具/方法可以知道,对于给定的.jar包,它是否需要任何外部库,这在manifest.mf中没有描述。
发布于 2010-09-03 07:58:56
如果在运行时找到了Import-Package中列出的所有包(以及Require-Bundle中列出的包),您的包就会被解析。如果解析后得到ClassNotFoundException或者NoClassDefFoundError,说明Import-Package的内容是错误的。
看一看Bnd tool by Peter Kriens。这将对从您的类编译的字节码执行静态检查,以发现确切的依赖项,并为您生成Import-Package语句。一般来说,如果你使用Bnd,你应该永远不会看到ClassNotFound/NoClassDefFound,除非通过名称动态加载类,例如使用Class.forName()。
发布于 2010-08-31 22:35:29
JBoss刚刚发布了一个非常棒的关于依赖项的开源诊断工具:http://jboss.org/tattletale
其中一个功能是通过自省来分析jar文件,以找到所有缺少的依赖项。
发布于 2010-08-31 22:34:10
我曾经做过这样的事情(我通过IKVM交叉编译Java到.NET,但需要Jars之间的依赖关系)我使用JarAnalyzer创建了依赖关系图。
https://stackoverflow.com/questions/3609982
复制相似问题