我created a library bundle for commons-lang3
,这工作得很好。我可以构建这个包,添加一个依赖关系,然后在我的插件中使用这个包中的所有类。如何在OSGi/Equinox/Eclipse中附加库包的源代码?
但我没有在调试器中看到源代码。
什么是最简单的方法来创建此库包的源包?
PS:库包是一个包含原始JAR文件的插件; Eclipse不会再次编译源代码,它只是将现有的JAR添加到类路径中。
我created a library bundle for commons-lang3
,这工作得很好。我可以构建这个包,添加一个依赖关系,然后在我的插件中使用这个包中的所有类。如何在OSGi/Equinox/Eclipse中附加库包的源代码?
但我没有在调试器中看到源代码。
什么是最简单的方法来创建此库包的源包?
PS:库包是一个包含原始JAR文件的插件; Eclipse不会再次编译源代码,它只是将现有的JAR添加到类路径中。
如果您将源文件添加到他们自己的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插件文件夹即可。
您可以在包的OSGI-OPT/src
路径下包含源代码;那么他们会被Eclipse调试器看到(不知道其他IDE,因为我只使用Eclipse)。我发现这比创建单独的源代码包简单得多,因为一个人工制品比两个人更容易管理,如果您使用Bnd或Bndtools构建,我们默认会创建类似此类的包。
在极少数情况下,当您需要部署到资源受限的环境时,您可以简单地从该软件包中删除OSGI-OPT
目录;此名称是可选数据的约定,可以在不影响捆绑包操作的情况下将其删除。
顺便提一下,我们的方法受到UNIX可执行文件(通常包含额外的调试符号)和strip命令的启发,该命令会在需要时删除它们以创建较小的可执行文件。
只是为了确保我正确理解你的意思:它足以将源JAR解压并将文件复制到文件夹“OSGI-OPT/src”中?我不必将文件夹添加到'build.properties'或'MANIFEST.MF'? – 2012-03-16 09:54:09
是的,如果你碰巧使用了bnd,只需要添加-sources:true – 2012-03-16 15:39:11
如果在pom.xml中使用maven-bundle-plugin,请执行<_sources> true。还要确保你已经设置
所以我需要创建一个*第二个*包,我不能简单地将源添加到库包? – 2012-03-15 14:06:41
我只见过它做为2捆,这对我来说很有意义,因为你通常不想在完成的应用程序中部署源代码。您可以将源代码和'Eclipse-SourceBundle'条目添加到您的库包中,但我没有尝试过。 – 2012-03-15 14:16:47
@NickWilson实际上,我通常希望在完成的应用程序中部署源代码。这样做有很多好处,如果我正在构建一个封闭源代码的商业应用程序,我只会*不*这样做。请参阅下面的答案,以便将源代码包含在主包中。 – 2012-03-16 00:52:30