8

作为团队的一员,我正在从事一个 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”,因为这不是该项目的选项:)

4

4 回答 4

10

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
于 2009-01-30T12:05:46.420 回答
1

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

例如,创建一个名为“00-swt-provider”的项目(因此它位于顶部)并让它引用“00-swt-provider-carbon”、“00-swt-provider-win32”或“00-swt-”之一提供者-gtk”。

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

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

于 2009-01-30T12:56:52.697 回答
0

简单地配置您自己的实例,并且对于您环境的这一组件,您不将其保存在源代码管理中怎么样?

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

于 2009-01-30T12:17:20.407 回答
0

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

于 2009-03-10T20:56:31.633 回答