Eclipse工作区与常规目录

时间:2017-09-07 08:23:51

标签: java eclipse

注意:我发现这不是任何问题的副本。我已经做了很多关于这方面的研究(几个小时,可能读整个谷歌关于工作空间 - 这当然是一个比喻),但找不到我的问题的答案。

所以我已经用Java做了一些编程,并且主要使用Eclipse(当我使用Vi之前项目变得越来越复杂)。我一直在默认工作区$HOME/eclipse-workspace工作,因为我从未真正理解工作空间的点。

我回到使用Java编程,安装Eclipse并提示选择一个目录作为工作区,这使我可以使用/home/campovski/eclipse-workspace。在我点击启动之前,但现在我开始变得好奇。这些工作空间是什么,它们用于什么......?

我做了一些研究:

我也按照第一个链接的答案中提供的链接,但没有人给我答案我的问题:

  

目录工作区有什么区别?

如第三个链接所述:工作区可以有任意数量的项目,每个项目都可以存储在某个文件系统的不同位置。好的,这可能很有用,但是将所有项目都包含在一个父目录中而不是工作空间的问题是什么?

如果我们以Matlab为例: enter image description here

左边有一个目录选择菜单,就像在Eclipse中一样。您所在的当前目录被选为工作目录,并且在此目录中声明的任何Matlab函数和脚本都可以在命令窗口中执行。 Eclipse的类比就是从不同的文件夹导入一个函数。

所以我的问题是,除了在工作区中可以有来自不同路径的项目之外,工作空间还有什么比工作空间只是项目,文件夹和文件的集合,就像普通目录一样。 p>

3 个答案:

答案 0 :(得分:4)

简化后,工作空间是Eclipse监控的特殊目录:工作空间目录中的更改可以触发某些内容。

例如,将编译将保存的Java文件,并可能在依赖的Java项目中创建错误标记。只有刷新后才能在Eclipse内部看到Eclipse之外的更改(假设 Window> Preferences:General> Workspace:使用本机挂钩刷新或池被禁用):而不是慢速文件访问,Eclipse存储内部工作空间文件的状态。

从历史的角度来看,工作空间概念可以看作是数据库和文件系统之间的折衷(在IBM VisualAge中可以看作是Eclipse的前身,要编辑的Java源代码存储在数据库)。

另外:

  • Eclipse的多个实例可以并发运行,每个实例都有自己的工作区。

  • Eclipse存储了几乎所有首选项 Window> Preferences ) 工作区(在.metadata子文件夹中)。不同的工作空间可以有不同的偏好。

  • .metadata子文件夹也可用于缓存以加速 Eclipse。

我怀疑使用Eclipse开发Eclipse所需的目标平台( dogfooding )也在决定工作空间概念时发挥了作用(另请参阅Eclipse bug 392652)。

答案 1 :(得分:2)

Workspace就像用户在linux中的homedir一样。

工作区将JRE版本,已安装的服务器绑定在一起,如果您使用的是服务器连接器,则所有数据和临时WAR,EAR都会保存在那里(.metadata / plugins)。切换工作区用于切换工作的上下文:项目,客户端,语言,范例...... Workspace是ECLIPSE引导自身的目录。所有本地依赖项解析都在工作区目录中结束。

VisualStudio的“解决方案”概念甚至不接近工作空间的概念,因为解决方案只是将一个或多个项目分组的父文件夹,并为它们提供一些常见的CLR名称和属性。

我现在使用Eclipse已经至少10年了......我得出了这样的结论:对于使用相同JRE和相同APP服务器的所有项目,我有相同的工作空间。我有不同的Eclipse版本,如果我需要一些特殊的工具(Spring或CDI或PHP或一些异国情调的插件)。所有工作区都位于我的主目录中。

您可以将工作区粘贴/复制到不同的计算机,使用相同的Eclipse版本,它可以开箱即用。

答案 2 :(得分:1)

考虑Java接口和实现该接口的具体类。它与Eclipse工作区和底层目录类似。

工作区作为项目和配置的逻辑容器。该逻辑概念由文件系统上的物理目录实现。它的设计方式实际上(理论上)可以使用除(本地)文件系统之外的其他东西来实现工作空间(类似于VisualAge for Java所做的那样,在@ howlger的答案中引用),尽管我不这样做知道任何这样的实施。

关键是,您在使用Eclipse时与IDE交互的是概念;最好不要把它当作文件系统目录考虑太多。这样做会导致一些假设,如果你足够深入使用它,那么这些假设并不总是成立。回到这个答案的第一句话,你有时可以假设一个特定的接口实现,但如果你不小心,这样做有危险。