如何为特定的O / S平台指定Eclipse .classpath条目?

时间:2009-01-30 11:48:21

标签: java eclipse swt classpath

我正在开展SWT项目,作为团队的一部分。我们不断打破彼此构建环境,因为Eclipses .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 个答案:

答案 0 :(得分:9)

Eclipse将允许您定义类路径变量,以便您可以保持.classpath相同,但每个开发人员都会根据平台配置她的Eclipse。您至少可以对.classpath文件进行版本控制。您必须将存储SWT jar的位置的目录结构更改为每个平台的jar名称不会更改的位置。此菜单位于:“窗口 - &gt;首选项 - &gt; Java-&gt;构建路径

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

实施例

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

的.classpath

    SWT_PLATFORM/SWT.JAR

答案 1 :(得分:1)

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

E.g。创建一个名为“00-swt-provider”的项目(因此它排在最前面)并让它引用“00-swt-provider-carbon”,“00-swt-provider-win32”或“00-swt-provider”之一-gtk”。

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

我们在内部使用它的一个变体 - 它适用于我们。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

SWT通过对.classpath文件进行版本控制来完成此操作,但是通过版本添加多个单独的.classpath_ *文件,其中附加了操作系统和窗口系统,例如: .classpath_win32_win32。因此,当您从存储库中检出源时,您需要将相应的类路径文件复制到.classpath并重新编译项目。