【问题标题】:Developing a Java Eclipse project on both 32bit and 64bit Linux systems在 32 位和 64 位 Linux 系统上开发 Java Eclipse 项目
【发布时间】:2010-12-03 22:05:39
【问题描述】:

我将一系列相关项目置于 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 项目的 .classpath 文件的其余部分,这个特定的库是唯一一个如此特定于平台的库。

我将库的两个版本都放在.classpath 中,这允许代码构建/运行,但我必须忽略构建路径错误,当我拉动笔记本电脑更改时,此错误会传播回我的桌面返回。

我可以将笔记本电脑上的 64 位 jar 符号链接到 32 位名称,以便类路径可以找到该库吗?还有其他更好的解决方案吗?

更新: 看起来这种类型的项目必须依赖于具体的 SWT 片段,所以在有更好的解决方案之前,我将在两台机器上对有问题的片段进行符号链接,以将编译器引导到正确的片段。在其他机器(尤其是 Windows)上构建/运行项目将是 !!Fun!!但我会在到达那里时建造那座桥。

【问题讨论】:

  • 想一想,为什么要编写具有平台特定路径的类路径?如果我把它带到一台 Windows 机器上,它将无法找到它需要运行的 任何 东西......地狱,谷歌代码页面上的文档说类路径以 @987654326 开头@

标签: java eclipse classpath windowbuilder


【解决方案1】:

您在源代码管理中究竟保留了什么?

最佳做法是在源代码库中仅保留手写源文件。不是二进制文件、生成的文件或 IDE 设置。

我认为您的 64 位 Eclipse 的 IDE 设置有问题,无法使用 32 位。

只需删除工作区中的.metadata 目录,然后重新导入此Eclipse 中的所有项目。

【讨论】:

  • 当然,将 .metadata 放在忽略列表中,这样您下次提交时就不会覆盖它们。
  • 只是项目文件夹,以及第一次提交留下的顶级空README。因此,基本上,源和每个项目的配置文件。 .metadata 在我注意到它有几兆字节时被忽略了。
  • 哦,是的,你也应该从你的项目目录中删除.settings
  • 您应该只在您的存储库中保留源代码、各种 xml 配置和类似的东西。只有您的代码,而不是与 IDE 相关的内容。
【解决方案2】:

不要对整个工作区执行此操作。只需对单个项目进行操作即可。在这里工作得很好。

【讨论】:

  • 这个特定工作区中的所有项目在逻辑上都是相关的,但不足以成为同一个项目。我想要它们在一个存储库中。
  • 您可以通过将每个 Eclipse 项目单独添加到存储库中来做到这一点。不要添加整个工作区。
  • 回想一下我为将它们全部放入存储库所做的工作(就 Eclipse 而言——如何手动告诉 eclipse 项目受 git 控制是另一个问题),我当时在事实上就是这样做的。
  • 创建 git 文件夹并将所有项目放在 git 文件夹中,然后将它们都添加到任何其他文件夹中。记得忽略 bin 文件夹。
【解决方案3】:

您正在开发哪种类型的项目? java项目还是插件项目?

如果您正在开发插件项目,您的项目不应直接依赖于具体的 swt 片段(如 swt.gtk、swt.win32)。 swt的实际实现是不同平台的不同片段,应该依赖宿主插件org.eclipse.swt。

如果您正在开发一个需要 swt 作为第三方要求的 java 项目。您可以为 32 位和 64 位 eclipse 安装 eclipse delta 包。

【讨论】:

  • 现在我们正在取得进展。我认为它包含如此具体的东西很奇怪,但我认为项目模板知道它在做什么。我从一个 WindowBuilder SWT/JFace Java 项目开始,它自动添加了这些库。用通用 jar 替换它会导致它不知道 SWT 是什么。
  • @Artanis,首先swt的实现机制决定了它不纯粹是使用jni调用本机库的“跨平台”。那么WindowBuilder SWT/Jface项目就是一个java项目,它把所有引用的eclipse插件都放到classpath中进行构建和运行。它不使用 osgi 来处理类路径,尽管它也需要 osgi jar。所以项目必须依赖于具体的 swt 实现来构建和测试。
  • @Artanis,如果您使用WindowTester 来测试您的rcp 项目,我建议您创建可以很好地处理此类问题的junit 插件测试。
【解决方案4】:

为避免平台问题,您还可以考虑使用 Maven。使用 Maven 2 或 3,可以很容易地解决配置文件平台问题的可选组合。 使用 Eclipse 的一些 Maven 插件,可以直接将 Maven 项目导入 Eclipse。

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 2011-09-02
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2011-10-01
    • 2013-07-27
    相关资源
    最近更新 更多