Eclipse工作空间:用途和原因是什么?

160

我看过、阅读过并思考了使用Workspaces的不同方式(按项目,按应用程序(多资产或非多资产),按程序语言,按目标(Web开发、插件等)等),但我仍然怀疑最佳方法是什么。

有人能详细而不是一页长地深入探讨一下吗?

这涉及许多子问题,我不知道应该问哪些具体的子问题,因为我肯定不知道Eclipse(和Workspaces)的所有方面,但我会尝试给出一个我正在寻找的例子:

  • 为什么需要?
  • Eclipse开发团队期望它被用作什么?
    • 其他/大多数人怎么想?
    • 你怎么想?
    • ... ?
  • 为什么?
  • 是否存在配置冲突与共享优点?
  • 有任何文件空间原因吗?
  • 性能如何?
  • ... ?

我所说的是一个开发人员的最小使用情况,他使用不同的语言和协议,不一定都在一个项目中使用(例如,对于某些项目,他可能使用Php,Javascript和XML,对于其他项目,他可能使用C#,对于其他项目,他可能使用Java和SQL等)

编辑2012-11-27:别误会我。我不怀疑Workspaces的用途,我只是想按其原意使用它,否则如果有人认为有更好的方法,我也可以考虑。所以,“为什么需要?” 的意思是:最佳用途是什么?而“为什么?” 实际上是针对“为什么需要?” ,换句话说:告诉我你的答案的原因。


14
我还是不明白。对于那些已经知道“为什么”的人来说,这显然很“合理”,而他们很难理解这对其他人来说并不明显。 - Rafael Eyng
1
我也不太明白,并且我也不完全同意下面的一切,也没有完整的参考资料。这就是为什么我还没有接受答案的原因。 *当然,在那些不涉及观点或个人实践的情况下,我是能够理解的。 - e-motiv
5个回答

54

我将提供一个在Java世界感到非常不舒服的人的视角,我想这也是你的情况。

是什么

工作区是一个将以下内容组合在一起的概念:

  1. 一组(某种方式)相关的项目
  2. 所有这些项目相关的一些配置信息
  3. Eclipse本身的一些设置

这是通过创建一个目录并将能够告诉Eclipse这些信息的文件放入其中(您不必这样做,它已为您完成)来实现的。您唯一需要明确执行的操作是选择这些文件将被放置的文件夹。而且,这个文件夹不需要与您放置源代码的文件夹相同 - 最好不要。

以上每个项目的探索如下:

  1. 一组(某种方式)相关的项目

Eclipse似乎总是与特定的工作区关联打开,即,如果您在工作区A中,并决定切换到工作区B(文件 > 切换工作区),Eclipse会关闭并重新打开。所有与工作区A相关联的项目(并出现在项目资源管理器中)将不再显示,与工作区B相关联的项目现在将出现。因此,似乎必须将一个项目与工作区关联,才能在Eclipse中打开它。

请注意,这并不意味着项目源代码必须在工作区内。工作区将以某种方式与您磁盘上项目的物理路径有关(谁知道怎么搞的?我已经在工作区里寻找了一些指向项目路径的文件,但没有成功)。

因此,一个项目可以同时存在于多个工作区中。所以最好将您的工作区和源代码分开。

  1. 所有这些项目相关的一些配置信息

我听说,诸如 Java 编译器版本(例如 1.7 - 我不知道“版本”这个词是否正确)等内容是工作区级别的配置。如果你在 Eclipse 中编译工作区内的多个项目,则所有项目都将使用相同的 Java 编译器进行编译。

  1. 一些 Eclipse 自身的设置

类似键绑定之类的某些内容也保存在工作区级别。因此,如果你定义 ctrl+tab 可以智能切换选项卡(而不是堆叠它们),那么这个绑定只与当前工作区相关联。如果你想在另一个工作区中使用相同的键绑定(我想你会!),那么似乎需要在工作区之间导出/导入它们(如果是这样,那么这个 IDE 是基于一些非常奇怪的前提构建的)。这里有一个链接可以了解更多信息。

此外,工作区似乎在不同的 Eclipse 版本之间不一定兼容。这篇文章建议你在工作区的名称中包含 Eclipse 版本的名称。

更重要的是,一旦选择了一个文件夹作为工作区,请不要触碰其中的任何文件,否则你将遇到一些麻烦。

我认为使用它的好方法

(实际上,当我写这篇文章时,我还不知道如何以正确的方式使用它,这就是我在这里试图整理答案的原因)

  1. 为你的项目创建一个文件夹:
    /projects

  2. 为每个项目创建一个文件夹,并将项目的子项目分组放置其中:
    /projects/proj1/subproj1_1
    /projects/proj1/subproj1_2
    /projects/proj2/subproj2_1

  3. 为你的工作区创建一个单独的文件夹:
    /eclipse-workspaces

  4. 为你的项目创建工作区:
    /eclipse-workspaces/proj1
    /eclipse-workspaces/proj2


1
我承认最后一节需要进一步说明。如果一个子项目并非项目本身,那么它是什么?这些子项目如何组成整个父项目的一部分而在不使用整个父项目的情况下被用于不同的工作区?我需要先找到答案以改进回答。 - Rafael Eyng
3
这个回答对整个问题有所贡献。然而,它有点过于关注文件夹,并且缺少一些参考和论据。尽管如此,它仍然很有信息量。唉,这些回答变得越来越难了,因为它们都有所贡献,我开始认为我永远不会能够接受一个回答。我希望没有人在这里非常在意分数,我们可以不选任何一个最佳答案,结束讨论? - e-motiv
1
我来自“MS side”解决方案/项目列表。仅此而已,无需解释。一切正常。打开一个解决方案非常简单:Open/Solution。没有更多要解释的了,一切都很好。但是Eclipse中这种奇怪的方法让我抓狂。通常情况下,我会处理由一些子项目(UI层、域层、测试项目/单元测试)组成的项目。在我看来,为这样的一个项目设置一个工作区是有意义的(与您类似,但我不理解第4条...;-))。 - hfrmobile
第四项旨在表明不同的项目将拥有独立的工作区。项目1有几个子项目,项目2也是如此。而项目1和2各自拥有一个独立的工作区。 - Rafael Eyng
在复制/备份项目时,我们需要连同工作区文件夹一起复制吗? - Atul

39
整个工作区的目的是将通常组成应用程序的一组相关项目进行分组。工作空间框架归结为eclipse.core.resources插件,其设计本身就很有意义。
项目具有特定的性质,构建器附加到特定项目上,当您在一个项目中更改资源时,您可以实时查看同一工作区中其他项目中的编译或其他问题。因此,我建议采用不同的工作空间来处理您所涉及的不同项目,但如果没有eclipse工作空间,集合项目和配置的概念将不存在,毕竟这是一个IDE工具。
如果这听起来不合理,请问Net Beans或Visual Studio如何解决这个问题?这是相同的主题。 Maven是一个很好的例子,将一组相关的Maven项目检出到工作区中,可以让您实时开发并查看错误。如果没有工作空间,您会建议使用什么? RCP应用程序可能是一个不同的兽类,具体取决于它的用途,但从真正的IDE角度来看,我不知道是否有比工作空间或项目环境更好的解决方案。以上是我的想法。- Duncan

1
但感谢您的回答。这很有道理,至少我知道它应该是什么意思。您能否给我更多细节和可能是关于您第一句话的链接(到eclipse)? - e-motiv
6
我不同意“工作区的目的是将一组通常构成应用程序的相关项目分组在一起”。假设我正在开发两个应用程序,我需要两个工作区吗?真麻烦!所有自定义的透视图、键绑定、自动文本和其他偏好设置都与工作区相关。每次开始一个新的应用程序时都要重新创建它们!在我看来,你应该有两个工作区:dev 和最新发布的版本。在工作区内,你可以为每个应用程序创建一个工作集。这就是工作区和工作集的正确使用方式。 - John Henckel
2
John,如果你的工作区中有两个应用程序是RCP应用程序,并且每个应用程序都需要不同的目标平台或不同的Java编译器兼容级别,那么你该怎么办?除非你的应用程序需要完全相同的运行时配置,否则将两个应用程序放在一个工作区中会导致问题。我理解你喜欢使用一组常见的首选项,这就是为什么有首选项导出/导入功能,这样你就可以设置新的工作区并导入你的组织或个人首选项和其他设置。 - Duncan Krebs
1
有趣的观点@JohnHenckel!虽然我在使用工作集时遇到了一些麻烦。它们似乎只能与Eclipse的某些功能一起使用,但我想你可以手动设置它们(就像我昨天在任务视图中所做的那样,它给我提供了所有项目的所有任务)。您是否也可以对库函数、自动完成、现有方法等进行设置?我还对您如何使用工作集感兴趣。 @DuncanKrebs,我不知道首选项的导入/导出功能。谢谢!这确实解决了如何使用工作区的大问题。 谢谢你们两个。请继续提出争论/见解! - e-motiv
1
我刚刚转移到了Eclipse。以前,我一直在使用一个叫做“文件夹”的新颖操作系统概念。文件夹是我在文件系统中放置项目的地方。它可以有子文件夹。甚至可以在一个父文件夹中放置多个相关项目的文件夹。那么,如果没有Eclipse,我会使用文件夹、基本文本编辑器,并从命令行编译和运行。因此,你的回答似乎希望我们都知道“工作区”有多有用,但也许你应该熟悉“文件夹”。 - Gabriel Staples
显示剩余3条评论

4
基本上,工作空间的范围分为两个点。
第一个(主要)点是eclipse本身,与设置和元数据配置(插件ctr)有关。每次创建项目时,eclipse都会收集所有配置并将它们存储在该工作区中,如果在同一工作区中存在冲突的项目,则可能会失去一些功能甚至稳定性。
其次,是开发策略可以采用的第二个(次要)点。 一旦满足了主要范围(并掌握了),并且需要进一步调整项目关系(如库、透视ctr),那么根据开发习惯或可能的语言/框架“行为”启动单独的工作空间可能是合适的。例如,DLTK就像是应该被包含在一个单独的笼子里的野兽。 许多人在论坛上抱怨它停止工作(正确或根本不工作),建议的解决方案是清除当前工作区中等效插件的设置。
就我个人而言,当涉及到单独的工作区时,我更倾向于语言区分,这与使用的插件的当前状态相关。最好保持最少的数量,因为这将在项目变得越来越多且版本控制不是您保留项目的唯一版本时减少挫败感。 最后,如果加载了许多(不必要的)插件,由于存在无关项目,则可能会出现加载速度和性能问题。 底线;没有一个解决方案适用于每个人,也没有一个解决问题的主蓝图。这是随着经验而增长的东西, 越少越好!

DTLK 是什么意思? - user393219
当你放弃文本编辑器转而使用IDE时,最初的驱动力是自动完成和查看库(以及文档),以避免语法错误至少。在任何情况下,您都不会危及此功能。 - Lazaros Kosmidis

1
虽然我已经使用Eclipse很多年了,但这个“答案”只是猜测(今晚我将尝试)。如果它被投票淘汰了,那显然我错了。
Oracle依赖于CMake为其MySQL Connector C源代码生成Visual Studio“解决方案”。在解决方案中有“项目”,可以单独或共同编译(通过解决方案)。每个项目都有自己的makefile,使用不同于其他项目的设置编译其部分解决方案。
同样,我希望Eclipse工作区可以容纳我的相关makefile项目(Eclipse),其中一个主项目的依赖项编译各种唯一的makefile项目作为构建其“解决方案”的先决条件。(我的文件夹结构将如@Rafael所描述)。
因此,我希望使用工作区的一个好方法是模拟Visual Studio将不同的项目组合成一个解决方案的能力。

0

这只是用于构建项目的功能。 显然,Eclipse设计师试图避免为Eclipse设置全局设置,而决定将它们放入工作区。 每个Eclipse应用程序都依赖于每个工作区设置。 这是一个好决定吗?我认为不是。 它缺乏灵活性。期望避免全局设置是幼稚的。 它不允许您拥有单个项目(对Eclipse设计师可能会感到惊讶,但这种情况经常发生)。 但它仍然有效。 许多人使用它。有时他们受苦,但更频繁地一切都好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接