2015-11-27 104 views
0

我使用Eclipse Luna爲RCP和RAP開發人員創建一個eclipse插件4.4.2。這個插件是使用maven(和tycho)構建的。編碼是在java,javascript和html中完成的。對於圖形部分,一個html文件用於:eclipse插件的html文件的路徑

String INDEX_HTML = "main/resources/res/www/index.html"; 
String basePath= ClassName.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 
File mHtmlFile = new File(basePath + INDEX_HTML); 
mBrowser.setUrl(mHtmlFile.toURI().toString()); 

我指定的類含有本都在plugin.xml中。 (告訴我是否需要plugin.xml的內容來解決這個問題)

現在的問題是,當我生成項目並將生成的jar放入Eclipse的dropins時,它會顯示消息「無法顯示頁面」 。 (而jar包含'main/resources/res/www'中的html文件)。 當我對html文件的路徑進行硬編碼時,它可以很好地工作。

請告訴我如何解決這個問題,而不用硬編碼html文件的路徑。

回答

1

如果這僅僅是不引用其他資源的插件,你可以用得到一個「文件」類型URL一個HTML:

Bundle bundle = ... your plugin bundle 

URL url = FileLocator.find(bundle, new Path("file path in the plugin"), null); 

url = FileLocator.toFileURL(url); 

FileLocator.toFileURL可提取的jar文件並放在臨時位置。

如果您需要的HTML引用其他資源,在插件MANIFEST.MF使用

Eclipse-BundleShape: dir 

。這將構建插件作爲目錄而不是jar,這樣插件中的文件可以被引用而不需要複製。

注意:如果您正在使用'特徵'構建,'feature.xml'中的'unpack'選項將覆蓋包形狀。

可以使用得到Bundle

Bundle bundle = FrameworkUtil.getBundle(getClass()); 

(這必須在一個類中的插件來運行)

您還可以使用:

Bundle bundle = Platform.getBundle("plugin id"); 

可以使用得到任何捆綁。

+0

我們的項目不使用OSGi包...它使用maven作爲jar來構建。 – Anonymous

+0

如果它是適用的Eclipse插件,那麼如何構建它並沒有什麼區別。 –

+0

我們對OSGi沒有太多的想法。你能指定一下應該寫成什麼:Bundle bundle = ?? (因爲我們還沒有爲我們的項目創建一個捆綁包) – Anonymous

0

Web瀏覽器不知道如何從jar文件中顯示網頁。您需要使用FileLocator之類的實用程序在運行時複製HTML文件。一個調用find()該jar文件中的該文件的URL,另一個用於解壓縮並返回該副本的file: URL。

http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fcore%2Fruntime%2FFileLocator.html&anchor=toFileURL(java.net.URL)

+0

它不在瀏覽器上運行。它是一個eclipse插件,只能在Eclipse平臺上運行。 – Anonymous

+0

它仍然適用。 – nitind

+0

這是一個maven-plugin,它沒有捆綁,我們正在構建它並創建它的jar。這個解決方案是可能的嗎? – Anonymous