如何在OSGi / Equinox / Eclipse中附加库包的源代码?

时间:2012-03-15 13:16:29

标签: eclipse osgi bundle equinox

created a library bundle for commons-lang3,这很有效。我可以构建bundle,添加一个依赖项,然后在我的插件中使用这个bundle中的所有类。

但是我没有看到调试器中的源代码。

为此库包创建源包的最简单方法是什么?

PS:库包是一个包含原始JAR文件的插件; Eclipse不会再次编译源代码,它只是将现有的JAR添加到类路径中。

2 个答案:

答案 0 :(得分:5)

您可以在捆绑包的OSGI-OPT/src路径下包含来源;然后他们将被Eclipse调试器看到(不确定其他IDE,因为我只使用Eclipse)。我发现这比创建一个单独的源包更简单,因为一个artefact比两个更容易管理,如果你用BndBndtools构建,我们默认创建这样的包。

在极少数情况下,当您需要部署到资源受限的环境时,您只需从捆绑包中删除OSGI-OPT目录;此名称是可选数据的约定,可以在不影响捆绑包操作的情况下将其删除。

顺便提一下,我们的方法受到UNIX可执行文件的启发,这些可执行文件通常包含额外的调试符号,strip命令会删除它们以在需要时创建较小的可执行文件。

答案 1 :(得分:1)

如果将源文件添加到自己的jar中,则使用“Eclipse-SourceBundle”条目创建META-INF / MANIFEST.MF文件,该条目指定库包的符号名称。以下是我从Felix jar中得到的一个例子:

Manifest-Version: 1.0
Eclipse-SourceBundle: org.apache.felix.main;version="4.0.1";roots:="."
Bundle-Version: 4.0.1
Bundle-Name: Apache Felix Framework
Bundle-ManifestVersion: 2
Bundle-Vendor: The Apache Software Foundation
Bundle-SymbolicName: org.apache.felix.main.source

为了能够在Eclipse中查看源,请确保此源jar位于PDE目标中(Windows-> Preferences-> Plugin Development-> TargetPlatform)。如果您将Eclipse本身用作目标平台,只需将其放入您的eclipse插件文件夹即可。