2012-03-15 184 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

相關問題