2011-04-11 96 views
3

我已經創建了一個eclipse插件,並且我想在eclipse運行時進行部署。我有下面的包結構。如何從eclipse插件中的jar文件中引用文件

com.myplugin 
    | 
    ---resources 
     | 
     ---server.bat 

作爲插件作業的一部分,應該執行「server.bat」文件。

我將插件打包爲.jar文件,包括二進制文件中的resouces文件夾並放入eclipse「plugins」文件夾中。

插件生效,它工作正常,但我執行「server.bat」文件時出現了問題,該文件位於我生成的jar文件中。該錯誤消息說:

「Windows無法找到‘資源\ server.bat’,確保輸入名稱正確 並再試一次。」

我相對路徑和絕對路徑的嘗試,但它沒有工作。

這裏是代碼做的工作:

URL url = Activator.getDefault().getBundle().getEntry("/resources/server.bat"); 

String fileURL = FileLocator.toFileURL(url).toString(); 

String commandLine = "cmd.exe /c start " +fileURL; 

Process process= Runtime.getRuntime().exec(commandLine); 

我拿到 「fileURL」 輸出:

文件:/ d:/程序 文件/ IBM/SDP /配置/組織.eclipse.osgi/bundles/2392/1/.cp/resources/server.bat

我不確定這是否正確。

希望這足以說明問題。

或者,請推薦一些其他方式,例如創建功能來部署帶有文件夾結構的插件。我還沒有嘗試過這個選項。

回答

1

您的代碼似乎沒問題。請注意:

  1. 您需要將您的fileURL轉換爲文件路徑(即刪除「file:/」前綴)。這是非常依賴於平臺的 - 嘗試依賴於org.eclipse.core.runtime.IPath和java.io.Path(我不記得正確的代碼,對不起)
  2. 你需要轉義路徑,因爲它包含空間字符。
1

我使用ProcessBuilder進行了工作。下面是代碼片段..

URL url = Platform.getBundle(Activator.PLUGIN_ID).getEntry("resources/server.bat"); 
String fileURL = FileLocator.toFileURL(url).toString(); 
ProcessBuilder pb = new ProcessBuilder("cmd.exe","/c",fileURL); 
pb.redirectErrorStream(true); 
Process p = pb.start(); 
p.destroy(); 

Ofcourse,我提取了jar,並把該目錄插入eclipse的plugins文件夾。

3

我在導出我的插件時遇到過類似的問題。我不得不引用存儲在我的插件jar文件中的exe文件。當插件被導出時,我無法訪問壓縮文件,而當我開發插件時可以訪問它,因爲eclipse會在我的「開發文件夾」中查找文件。 爲了解決我創建了一個插件功能和feature.xml中的「列入插件」選項卡中選中我的選擇

解壓安裝後的插件壓縮的問題。

爲包含exe文件的插件。 使用這個選項,你會發現你的插件文件在eclipse插件文件夾下的文件夾中,你將能夠以常規文件的形式訪問它們。

例如

Bundle bundle = <get a bundle of your plugin>; 
    URL url = FileLocator.find(bundle, new Path(<relative path from plugin root to your file>), null); 
    try { 
     url = FileLocator.resolve(url); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return false; 
    } 

否則,我認爲你應該解壓縮你的罐子。

希望得到這個幫助。

編輯

就像我說的,你可以創建一個特性項目(對於一個例子看看here),當您添加插件,勾選「安裝後解壓插件存檔。」 Eclipse會爲你做這項工作,你會發現你的插件在eclipse插件文件夾中解壓縮。這解決了我的問題。

+0

我也是一個jar文件有和你一樣的問題。我必須訪問要執行的.bat文件,它位於生成的插件.jar中。我沒有找到任何解決方案,但我解壓插件.jar到一個文件夾,並將其放在「/插件」目錄,它的工作。你也可以嘗試相同的...或者如果你知道的方式,請發帖.. – Sebastian 2011-04-14 15:56:50

+0

你是我的救星。你的解決方案有效 我也將它與這條關於構建路徑的建議相結合:http://www.mhaller.de/archives/3-Accessing-resource-files-within-your-Eclipse-plugins.html – cdmihai 2014-02-20 00:02:58

0

我發現這與Eclipse RCP 4運作良好,本代碼把給定的GIF圖片來自那是在給定的插件

public ImageDescriptor getImgDesc(final String bundleId, final String fullPath) 
throws IOException { 

    final URL url = new URL("platform:/plugin/" + bundleId + "/" + fullPath); 

    final ImageDescriptor imgDesc = ImageDescriptor.createFromURL(url); 
    return imgDesc; 
} 

....

final ImageDescriptor imgDesc = getImgDesc("com.awe.test","images/Applet24.gif"); 
final Image applet24 = imgDesc.createImage(); 
相關問題