2011-04-11 108 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(); 
相关问题