2013-10-03 54 views
3

我编写了一个Eclipse插件,在任何文件或文件夹(例如,在导航器视图中)上显示右键单击菜单选项。对于选定的每个文件(以及选定目录内的每个文件),该插件会计算并显示文件的MD5,SHA-1,SHA-256,SHA-384或SHA-512散列。当我在开发过程中进行调试时,该插件完美工作。Eclipse插件在调试时工作,但在安装时不起作用

如果我使用site.xml的网站,把它放在我的服务器上,然后安装到Eclipse(它安装得很好),我看到菜单。我可以计算并显示所选文件的散列,但仅对不适用于所选文件夹的。代码中绝对没有任何改变;它总是以调试模式工作,并且在我安装它时永远不会工作。

我的问题是:我该如何调试?起初,我认为Eclipse的workspace/.metadata/.log文件会提供一些线索,但不会输出错误。我甚至试图添加一些代码,将文件写入桌面,但该文件永远不会被创建。有没有人有任何线索发生了什么事情,或者我应该如何解决这个问题?我从来没有过这么难的时间调试!

作为参考,https://github.com/gfairchild/eclipse-hasher是该项目。所有的源代码都可以在那里看到(它可以作为Eclipse项目导入)。


答案最终涉及两两件事:

  1. 我并没有包括在生成过程中lib目录。我使用的依赖项(Apache Commons Codec)未包含在内,因此它当然不会运行。
  2. 在测试过程中,我曾尝试手动将构建的Hasher插入到eclipse/plugins中。我错误地认为,如果我通过Eclipse界面卸载了Hasher,该文件将被删除。事实并非如此。所以在上个月,我有一个旧版本的Hasher被加载到Eclipse中。这令人难以置信的令人沮丧。好吧。学过的知识。

非常感谢大家提供的帮助!

+0

我刚刚在Eclipse Kepler上测试了你的项目,它工作正常(在IDE和导出时都是如此)。顺便说一句,你的项目缺少MANIFEST.MF(需要运行/导出)。 –

回答

1

我在包装中看到问题。如果你通过任何zip软件打开jar文件,你可以看到缺少lib和images文件夹。您需要在build.properties文件中添加这些文件夹的条目。还需要将库添加到类路径中(额外的类路径条目)如果在进行这些更改后构建插件,它应该在理想情况下工作。

+0

这终于奏效了!我以为我已经包含了lib目录,但我没有。谢谢! – Geoff

+0

很高兴听到您的问题解决了:) – codejammer

2

这有可能是你第一次测试你的插件的目标平台只用IFIle特定的扩展和补充IFolder后,但没有加载的更新插件到Eclipse,因为你并没有增加插件的版本,没”用-clean运行它(Eclipse需要重新加载插件)。

+0

这当然是一个有趣的想法!我会尽快尝试。 – Geoff

+0

好吧,我终于有机会尝试用'-clean'运行Eclipse,但没有解决它。这里还有其他事情要做。 – Geoff

1

您的代码假设ExecutionEvent中的值保持有效,直到您的线程运行,而这可能并非如此。在execute方法中获取所需的所有事件,并将它们传递给工作线程。

而且而非使用object instanceof IFileIFolder使用:

IFile file = (IFile)Platform.getAdapterManager().getAdapter(object, IFile.class); 
IFolder

和相同的。

+0

我刚试过这个,但很遗憾没有修复它(你可以在https://github.com/gfairchild/eclipse-hasher/commit/c7743bca832a8635c61bc1d7c80b3fec2151ee65查看更改。 – Geoff

+1

添加使用适配器管理器来回答 –

+0

好的,我也修复了这个问题(提交https://github.com/gfairchild/eclipse-hasher/commit/65cdc8296c31f39d3cd450b621a43a74a48dae98)。但是,它仍然不起作用!这真是太离奇了。为什么它可以用于文件,但不适用于文件夹? – Geoff

0

您的问题:“我的问题是:我该如何调试?“

我的回答:‘远程调试’

您可能希望谷歌有关的话题,但我建议您阅读以下blog entry,我总是建议当有人问我如何在调试代码这样做,你可以调试你的代码,以防万一你的第一个eclipse安装和你可能用来调试的第二个eclipse实例之间的环境有所不同(根据你的目标平台设置和你的不同,它们可能会有所不同)二次启动配置)

注意:如果您的具体问题是greg指出的线程相关问题但是,在第一个实例安装中调试代码将毫无用处。

相关问题