我创建了一个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
我不确定这是否正确。
希望这很清楚,可以回答这个问题。
或者,请建议其他一些方法,例如创建使用文件夹结构部署插件的功能。我还没有尝试过这个选项。
答案 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)
您的代码似乎没问题。请注意:
答案 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();