在32位和64位Linux系统上开发Java Eclipse项目

4

我有一系列相关的项目,已经放在Git控制下(所有这些项目都在同一个工作空间中,即Git仓库的顶层),并从我的桌面电脑(32位)克隆到我的笔记本电脑(64位),以便我可以随时在任何地方处理它们。工作空间 .metadata 文件夹被排除,但是项目文件夹中的所有内容都被跟踪。

当我在笔记本电脑上打开克隆的工作空间时,遇到了一个错误:

Project 'project' is missing required library:
'/usr/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.5.2.v3557f.jar'

显然,64位的eclipse没有32位的库,但我很好奇应该如何解决这个问题。
该库是作为Window Builder SWT/JFace项目模板的一部分添加的。在eclipse插件文件夹中有一个org.eclipse.swt_3.5.2.v3557f.jar ,但将类路径更改为查找它不起作用(奇怪的是找不到SWT)。检查SWT/JFace项目的其余文件,这个特定的库是唯一一个如此平台特定的库。
我将库的两个版本都放在中,这允许代码构建/运行,尽管我必须忽略构建路径错误,并且当我将笔记本电脑上的更改拉回桌面时,这个错误会传播回来。
我能否只是在笔记本电脑上创建64位jar文件到32位名称的软链接,以便类路径可以找到库?还有其他更好的解决方案吗?
更新:看起来这种类型的项目必须依赖于具体的SWT片段,因此,在有更好的解决方案之前,我将在两台机器上将相关片段链接起来,以指导编译器到正确的片段。在其他机器上(尤其是Windows)构建/运行项目将是令人头痛的,但我会在那里建造这座桥梁。

说起来,为什么这个写入类路径的代码要使用特定于平台的路径呢?如果我把它带到Windows机器上,它将无法找到运行所需的任何东西...该死,Google Code页面上的文档说类路径以C:/eclipse/plugins/开头。 - Erik Youngren
4个回答

1

不要对整个工作区进行操作,只需对单个项目进行操作即可。这里运行良好。


这个特定工作区中的所有项目在逻辑上相关,但不足以成为同一个项目。我希望它们在一个代码库中。 - Erik Youngren
您可以通过将每个Eclipse项目单独添加到存储库中来实现。不要添加整个工作区。 - Thorbjørn Ravn Andersen
回想起我为了将它们全部放入存储库而做的事情(就Eclipse而言——如何手动告诉Eclipse一个项目在Git控制下是另一个问题),实际上我正在做这件事。 - Erik Youngren
创建git文件夹并将所有项目放入其中,然后只需将它们添加到任何其他文件夹中。记得忽略bin文件夹。 - Thorbjørn Ravn Andersen

1
你在源代码控制中究竟保存了什么?
最佳实践是只将手写的源文件保存在源代码库中。不要保存二进制文件、生成的文件或IDE设置。
我认为你在64位Eclipse上使用32位Eclipse时遇到了IDE设置的问题。
只需删除工作区中的.metadata目录,并重新导入此Eclipse中的所有项目即可。

当然,将.metadata放在忽略列表中,这样你就不会在下一次提交时覆盖它们。 - Goran Jovic
只留下了项目文件夹和顶层空的README文件,这是第一次提交后剩余的东西。因此,基本上只有源代码和每个项目的配置文件。当我注意到.metadata文件大小为几兆字节时,它被忽略了。 - Erik Youngren
哦,是的,你也应该从项目目录中删除.settings - Goran Jovic
你应该只在代码库中保留源代码、各种 XML 配置文件等内容。只有你的代码,而不是与 IDE 相关的东西。 - Goran Jovic

1
你正在开发哪种类型的项目?Java项目还是插件项目?
如果你正在开发插件项目,你的项目不应该直接依赖于具体的 SWT 片段(例如 SWT.GTK、SWT.WIN32)。它应该依赖于主机插件"org.eclipse.swt",实际上 SWT 的不同片段在不同平台上有不同的实现。
如果你正在开发需要作为第三方要求的 SWT 的 Java 项目,你可以为你的32位和64位Eclipse安装Eclipse Delta包。

现在我们有所进展了。我觉得它包含了一些非常具体的东西,这让我感到很奇怪,但我认为项目模板知道自己在做什么。我开始使用WindowBuilder SWT/JFace Java项目,它会自动添加这些库。用通用的jar替换它会导致它不知道SWT是什么。 - Erik Youngren
@Artanis,首先,SWT的实现机制决定了它不是纯粹的“跨平台”,而是使用JNI调用本地库。然后,WindowBuilder SWT/Jface项目是一个Java项目,它将所有引用的Eclipse插件放入类路径中进行构建和运行。虽然它也需要OSGI jar,但它不使用OSGI来处理类路径。因此,该项目必须依赖于具体的SWT实现进行构建和测试。 - Kane
@Artanis,如果您正在使用WindowTester测试您的rcp项目,我建议您创建一个junit插件测试来处理这个问题。 - Kane

0
为了避免平台问题,您也可以考虑使用Maven。使用Maven 2或3,并可选地组合配置文件,可以相当容易地解决平台问题。 使用一些Eclipse的Maven插件,Maven项目可以直接导入到Eclipse中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接