如何在eclipse插件中引用jar文件中的文件

时间:2011-04-11 14:29:13

标签: eclipse-plugin

我创建了一个eclipse插件,我想在eclipse运行时部署。我有以下包装结构。

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

作为插件作业的一部分,应执行“server.bat”文件。

我将插件打包为.jar文件,包括二进制文件中的resouces文件夹,并放入eclipse“plugins”文件夹。

插件生效,它确实工作正常,但我在执行“server.bat”文件时遇到问题,该文件位于我生成的jar中。错误消息显示:

  

“Windows无法找到”resources \ 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 /配置/ org.eclipse.osgi /捆绑/1分之2392/ .cp /资源/ server.bat

我不确定这是否正确。

希望这很清楚,可以回答这个问题。

或者,请建议其他一些方法,例如创建使用文件夹结构部署插件的功能。我还没有尝试过这个选项。

5 个答案:

答案 0 :(得分:3)

导出插件时遇到了类似的问题。我不得不引用存储在我的插件jar文件中的exe文件。当导出插件时,我无法访问压缩文件,而当我开发插件时可以访问它,因为eclipse在我的“开发文件夹”中查找文件。 为了解决这个问题,我创建了一个插件功能,并在feature.xml的“Included Plug-ins”选项卡中检查了选项

  

安装后解压缩插件存档。

包含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插件文件夹中解压缩。这解决了我的问题。

答案 1 :(得分:1)

您的代码似乎没问题。请注意:

  1. 您需要将fileURL转换为文件路径(即删除“file:/”前缀)。这是非常依赖于平台的 - 尝试依赖org.eclipse.core.runtime.IPath和java.io.Path(我不记得正确的代码,抱歉)
  2. 您需要转义路径,因为它包含空格字符。

答案 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();

当然,我提取了jar并将该目录放到了eclipse的plugins文件夹中。

答案 3 :(得分:0)

使用http://www.vogella.com/blog/2010/07/06/reading-resources-from-plugin/

的第二个解决方案

不要忘记在插件的构建配置中导出要访问的文件。

答案 4 :(得分:0)

我发现Eclipse RCP 4运行良好,这段代码从给定插件中的jar文件中获取了给定的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();