【问题标题】:How can I specify an Eclipse .classpath entry for specific O/S platform?如何为特定的 O/S 平台指定 Eclipse .classpath 条目?
【发布时间】:2009-01-30 11:48:21
【问题描述】:

我作为团队的一员从事 SWT 项目。我们不断地破坏彼此的构建环境,因为 Eclipse 的 .classpath 文件被检入到版本控制中,并且我们为我们的机器包含了不同的 SWT 库。

根据最后提交的人,.classpath 条目可以是:

<classpathentry kind="lib" path="lib/swt/swt-win32.jar"/>

<classpathentry kind="lib" path="lib/swt/swt-carbon.jar"/>

<classpathentry kind="lib" path="lib/swt/swt-gtk.jar"/>

这些库似乎是互斥的,即您不能一次将它们全部包含在内并让 SWT 解决。所以我们需要以某种方式为每个平台过滤它们......

有人对如何做到这一点有任何想法吗?我最初的想法是将其拆分为自己的“.classpath-swt”文件(被 VCS 忽略),使用 Ant 自动生成它并将其包含在主 .classpath 中,但似乎 Eclipse 不支持拆分.classpath 文件。

我们目前的解决方法是避免提交 .classpath,除非我们确实更改了依赖项,但这仍然意味着每次更改 .classpath 时,很多人都必须修复他们的开发环境。

任何建议都将不胜感激,只要它不是“不要使用 Eclipse”,因为这不是这个项目的一个选项:)

【问题讨论】:

    标签: java eclipse swt classpath


    【解决方案1】:

    Eclipse 将允许您定义类路径变量,因此您可以保持 .classpath 相同,但每个开发人员都会根据平台配置她的 Eclipse。您至少可以对 .classpath 文件进行版本控制。您将不得不将存储 SWT jar 的目录结构更改为每个平台的 jar 名称不会更改的目录结构。此菜单位于:“Window->Preferences->Java->Build Path

    SWTJARDIRECTORY/
        WIN32/
            SWT.JAR
        CARBON/
            SWT.JAR
        GTK/
            SWT.JAR
    

    例如

        SWT_PLATFORM="SWTJARDIRECTORY/GTK", set by developer in Eclipse
    

    .classpath

        SWT_PLATFORM/SWT.JAR
    

    【讨论】:

    • 这在 XML 中看起来如何?其他人看到 XML 中变量的实际使用会很有帮助(并节省您研究 eclipse 如何解析 XML 变量的时间)
    • 看起来您需要“扩展”一个变量(Java 构建路径 > 添加变量 > 扩展)才能在构建路径中使用它。您的 XML 将类型设置为 var:&lt;classpathentry kind="var" path="SWT_PLATFORM/swt.jar"/&gt;
    【解决方案2】:

    您应该将这些库放在一个单独的、易于识别的项目中,而不是放在每个项目中。

    例如创建一个名为“00-swt-provider”的项目(所以它在顶部)并让它引用“00-swt-provider-carbon”、“00-swt-provider-win32”或“00-swt-provider”之一-gtk”。

    其中任何一个都为给定平台导出适当的本机库,并且唯一的链接在 00-swt-provider 中。实际项目仅引用此元项目。

    我们在内部使用它的一个变体 - 它对我们很有效。

    【讨论】:

    • 如果您有多个项目,这是一个好主意,因为您可以在一个步骤中为所有项目设置 SWT 依赖项。但是我们只有一个项目依赖于 SWT,这意味着将项目数量从 1 个增加到 5 个。我认为 classpath 变量是一个更简洁的解决方案。
    • 当我这样做时,以前在自己的类路径中引用该 jar 的其他项目将无法再“看到”该 lib,即使它们依赖于“lib importer”项目和“lib importer” ' 项目的 jar 包含在其 Eclipse 构建路径菜单中,我错过了一步吗?
    【解决方案3】:

    如何简单地配置您自己的实例,而对于您环境的这一组件,您不将其保留在源代码管理中?

    或者,您可以为每个环境存储一个类路径文件,也许在另一个目录和一个 ant 文件中,即 build-setup-env.xml 文件,您可以简单地为每个环境复制一个正确的目标。至于在源代码管理中保留一份副本,您必须确保在更新时将其复制回来。

    【讨论】:

      【解决方案4】:

      SWT 通过对 .classpath 文件进行版本控制,而是通过附加操作系统和窗口系统的多个单独的 .classpath_* 文件来实现这一点,例如.classpath_win32_win32。因此,当您从存储库中检出源代码时,您应该将适当的类路径文件复制到 .classpath 并重新编译您的项目。

      【讨论】:

      • 查看@basszero 的评论以获得更简洁的解决方案。我们考虑了多个 .classpath,但认为这会导致很多潜在的破坏,因为一个平台上的某个人可能会在他们的 classpath 中添加一些东西,而其他的却过时了。
      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2016-06-03
      相关资源
      最近更新 更多