2012-03-15 193 views
3

created a library bundle for commons-lang3,这工作得很好。我可以构建这个包,添加一个依赖关系,然后在我的插件中使用这个包中的所有类。如何在OSGi/Equinox/Eclipse中附加库包的源代码?

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

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

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

回答

1

如果您将源文件添加到他们自己的jar中,则使用指定库包的符号名称的'Eclipse-SourceBundle'条目创建META-INF/MANIFEST.MF文件。下面是一个例子,我从菲利克斯罐子有:

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中的源确保这个源罐子是在你的PDE目标(Windows的>首选项>插件开发 - >上投放) 。如果您将Eclipse本身用作目标平台,只需将其放入您的eclipse插件文件夹即可。

+0

所以我需要创建一个*第二个*包,我不能简单地将源添加到库包? – 2012-03-15 14:06:41

+0

我只见过它做为2捆,这对我来说很有意义,因为你通常不想在完成的应用程序中部署源代码。您可以将源代码和'Eclipse-SourceBundle'条目添加到您的库包中,但我没有尝试过。 – 2012-03-15 14:16:47

+0

@NickWilson实际上,我通常希望在完成的应用程序中部署源代码。这样做有很多好处,如果我正在构建一个封闭源代码的商业应用程序,我只会*不*这样做。请参阅下面的答案,以便将源代码包含在主包中。 – 2012-03-16 00:52:30

5

您可以在包的OSGI-OPT/src路径下包含源代码;那么他们会被Eclipse调试器看到(不知道其他IDE,因为我只使用Eclipse)。我发现这比创建单独的源代码包简单得多,因为一个人工制品比两个人更容易管理,如果您使用BndBndtools构建,我们默认会创建类似此类的包。

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

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

+0

只是为了确保我正确理解你的意思:它足以将源JAR解压并将文件复制到文件夹“OSGI-OPT/src”中?我不必将文件夹添加到'build.properties'或'MANIFEST.MF'? – 2012-03-16 09:54:09

+0

是的,如果你碰巧使用了bnd,只需要添加-sources:true – 2012-03-16 15:39:11

+0

如果在pom.xml中使用maven-bundle-plugin,请执行<_sources> true。还要确保你已经设置捆绑。 Eclipse中的另一个问题是确保将OSGI-OPT/src包绑定到一些Eclipse项目的类路径中,正如BJ Hargrave在这里解释的“如何在调试时查看运行时捆绑代码?”,2015年2月,https:// groups。 google.com/d/topic/bndtools-users/tW4e-4TUOqw/discussion。 – buzz3791 2016-04-28 14:08:49

相关问题