我正在开展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”,因为这不是这个项目的选项:)
答案 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并重新编译项目。