题
我是发展中访束使用蚀。我测试的代码,利用日食访运行配置。
代码作品的现有,而当我出口束为罐,并尝试利用他们在另一种环境(人道,例如)我ClassNotFound例外在运行时间。包装好的,有没有错误。我执行命令在春分:"diag束数",它说:"没有尚未解决的约束"每束。
我想知道如果有一个工具/方法知道,对于给定。罐子束,如果需要任何外部图书馆,其中未述及的清单。mf。
解决方案
如果所有在Import-Package
(和在Require-Bundle
列出的束)中列出的软件包在运行时发现你的束将解决。如果您解析后得到ClassNotFoundException
或NoClassDefFoundError
,这意味着Import-Package
的内容是错误的。
看一看的 BND通过彼得柯瑞恩斯工具。这对从你的类编译字节码的静态检查发现确切相关性,以及它所产生的Import-Package
声明为您服务。一般来说,如果你使用BND,你永远不应该看到ClassNotFound的/ NoClassDefFound除非名称,例如动态加载类与Class.forName()
。
其他提示
的JBoss刚刚释放约依赖性的奇妙开源诊断工具: http://jboss.org/tattletale
的特点之一是通过内省分析jar文件,以找到所有缺失的依赖关系。
我已经做这样的事情一段时间后(I交叉编制Java。净通过IKVM,但需要之间的依赖关系的罐子)我用 JarAnalyzer 创建一个图的依赖关系。
我已经受够了SpringSource的bundlor壳工具成功。有使用它这里说明。你给它一个JAR,与你想从JAR创建新的软件包的名称和版本一起。然后分析了JAR中的类文件,并产生一个模板显明进口它发现于参考文献的任何包。
在硬部件然后找出哪些依赖是可选的,并且依赖于哪个版本的每个包的。一定要仔细阅读网站,发布说明等,为图书馆摸不着头脑。
您会得到“没有悬而未决的约束”,如果包实际上并没有导入任何软件包或需要其他包;至于OSGi运行时而言,捆绑会有用。但只要它访问外部类,如你的情况,你会得到可怕的ClassNotFoundException
。
在Eclipse插件开发环境(PDE)会给你编译错误未在MANIFEST.MF列出您的代码使用的类。 ClassNotFound的异常运行时常常是由于错误地标识包装的产品进口作为可选 - 捆的决心,但他们将无法正常工作。针对编译版本不同的包或包的比你对运行也因这样那样的错误。