2012-06-18 31 views
1

免责声明:无论以下为真:(1)Java是我的强项,和(2)我在插件开发亲。)Eclipse插件 - 无法解析的Swing类引用

我的Eclipse插件项目包含5个插件。其中2个编译得很好。这3个不包括对org.eclipse.swt.widgetsorg.eclipse.swt.graphics包中的类的依赖关系。 (非常恼人的)编译时错误消息是:

The type org.eclipse.swt.widgets.Control cannot be resolved. 
It is indirectly referenced from required .class files. 

现在,我已经在这个工作空间中用细齿梳了。我已检查并重新检查以下内容:

  • 类路径。检查! (适当的JRE和JDK位于Windows PATH上。)
  • 相关性。检查! (包含所有库)
  • 构建路径。检查! (使用正确的JRE,导入所有必需的库,构建顺序是正确的。)
  • 导入。检查! (是的,正确的库被导入,如对话框所示。)
  • Manifest.MF。检查! (仔细检查清单文件以确保路径正确,所有三个项目都引用同一个JRE中的同一个文件。)
  • Plugin.XML。检查! (是的,文件很好。)
  • .ClassPath文件。检查! (这里没问题,classpath文件都没问题。)
  • build.properties文件。检查! (这里也没有惊喜。)

我用google搜索和堆叠直到我的眼睛流血。没有任何典型的建议似乎有帮助。

但是我确定,通常的事实将证明是这种情况。 (所有的事情都是平等的,答案通常是简单,愚蠢和痛苦明显的。

有人可以提供一些我还没有看过的东西吗?我非常乐意提供您可能需要的任何信息。

P.S.我可能注意到,有的方式太多地方寻找配置插件的依赖关系?大笨蛋moogly。

回答

7

您的目标平台与环境中可用的swt插件之间存在断开。

  • 在eclipse中,转到帮助 - >首选项 - >目标平台。
  • 选择您的目标平台,然后单击[编辑...]。
  • 在对话框中,选择“环境”选项卡。

“目标环境”中的字段将用于加载您的swt插件。未填写的任何字段将默认为针对当前环境检测到的值。

就你而言,你有一个win32.x86 swt jar。如果您在64位窗口上运行,并且体系结构字段为空,则32位swt jar不会加载。你有两个选择来修复任何差异:

  1. 安装一个eclipse平台包。它将包含所有平台的所有swt罐子。
  2. 使“目标环境”字段与您可用的swt jar匹配。
+1

谢谢!我已升级到64位机器,但将旧项目保留为迁移的一部分。并且升级了Eclipse ......我将体系结构从x86更改为x86_64,并解决了我的问题。 – Bae

+0

我也是;-)但是我在目标环境中也有一个旧的deltapack参考,这使得它更复杂一点。但删除它,并设置架构修复了一切。 – thoni56

1

这基本上意味着它是间接不满意的依赖:从您正在使用需要一些其他的类是类路径:)

现在,我不知道你如何管理对库类的依赖(Maven的或手动),但你可以使用jarfinder.com找到并下载必要的图书馆,如果你没有它已经是一个起点: http://www.jarfinder.com/index.php/java/info/org.eclipse.swt.widgets.Control

如果你使用Maven的时候,你应该查看日志,因为它试图下载所有必要的库,包括依赖关系。因此,如果出现任何问题,应该在日志中指出连接问题或出于某种其他原因不可能下载人工制品。

+0

奇怪的是,我使用JarFinder来查看问题文件*的确是在类路径中。它想要的文件是'org.eclipse.swt.win32.win32.x86_3.5.2.v3557f-RCP20100710-0200.jar',它明确包含在每个不能编译的插件中的MANIFEST.MF中。 –

+0

值得注意的是,我们特定的JRE是由Lotus Notes(curses!)提供的,因此JAR文件名称中存在细微变化。 –

+0

我的猜测是,你正在寻找的jar可能是swt.jar:http://www.jarfinder.com/index.php/jars/versionInfo/452 另外我个人的建议是如果可能的话,迁移到Maven因为它通过依赖管理让生活变得更加轻松。 – Morfic