一个Eclipse的.classpath/.project文件里面都包含什么内容?

167
我们最近遇到了一个Eclipse项目的问题,其中一个团队成员的Tomcat未能部署应用程序的JAR文件。
我们最终发现,.classpath Eclipse文件与团队中项目正常的成员不同。我们使用一个项目中正常的 .classpath 文件替换了它,然后Tomcat部署就完成了。
出于好奇心和想知道如果有什么问题,以后要寻找什么,请问在 .classpath.project 文件中包含了什么内容?我能添加什么内容,这些内容都表示什么意思?

.classpath文件是特定于Java的吗?这个问题似乎与语言无关,但从这个答案中(https://dev59.com/qmw05IYBdhLWcg3whCNn#14080054)听起来它只与Java有关。 - Casey Kuball
相关的,https://dev59.com/IGYr5IYBdhLWcg3wFGdS - TT--
4个回答

166

Eclipse是一个插件的运行环境。几乎在Eclipse中看到的所有内容都是由安装在Eclipse上的插件所产生的,而不是Eclipse本身。

.project文件由核心Eclipse平台维护,其目标是从通用、与插件无关的Eclipse视图描述项目。项目名称是什么?它引用工作区中的其他项目吗?构建项目使用了哪些构建器?(记住,“构建”的概念不仅适用于Java项目,也适用于其他类型的项目)

.classpath文件由Eclipse的JDT功能(功能 = 插件集)维护。JDT在项目中保存多个这样的“元”文件(请参见项目内的.settings目录);.classpath文件只是其中之一。具体而言,.classpath文件包含JDT功能需要的信息,以便正确编译项目:项目的源文件夹(即要编译的部分),输出文件夹(编译到哪里)和类路径条目(例如工作区中的其他项目、文件系统上的任意JAR文件等)。

盲目地将这些文件从一台计算机复制到另一台计算机可能是有风险的。例如,如果在类路径上放置任意JAR文件(即在工作区之外的位置引用的JAR文件),则会使.classpath文件不可移植,并且必须修改才能实现可移植性。有一些最佳实践可以遵循,以保证.classpath文件的可移植性。


2
@Isaac - 出于好奇,假设我使用 gitMaven 管理我的项目,也就是说,我有一个仓库(项目)的“根”文件夹,其中包含一个单独的 src 文件夹(保存一个简单的“hello world”.java文件)和项目的 pox.xml 文件。所以,如果我正确理解了你的话,没有必要(甚至可能没有必要)在 git 仓库中保留 .project.classpath.settings/ 文件/文件夹(例如将它们添加到 .gitignore 文件中)? - Guy Avraham
3
这取决于您如何使用Eclipse,特别是——您如何初始化工作区。您是否在新的工作区中启动Eclipse,然后使用“导入现有的Maven项目”?如果是这样,那么您是正确的——这些文件实际上都不需要,因为“m2eclipse”已经为您处理了这个问题(或者至少应该是这样)。 - Isaac
@Isaac - 是的,这正是我使用它的方式。感谢您的回复! - Guy Avraham
1
@buncis .project 不应该在 .gitignore 中。关于 .classpath — 如果你使用 m2eclipse 并且你的工作区配置为在启动时更新 Maven 项目,那么你可以将 .classpath 添加到 .gitignore 中,但我自己没有测试过。 - Isaac
2
@buncis 只是在纠正上一条评论。显然,M2E现在非常擅长配置项目。我最近处理了大约150个Java项目的代码库,包括各种类型。我从所有项目中删除了.project.classpath,并添加到.gitignore中。一切都很顺利,我不需要频繁地在Git中无休止地更新这些文件。 - Isaac
显示剩余3条评论

43

.project

在工作区创建项目时,会自动生成一个描述该项目的项目描述文件。此文件的唯一目的是使项目具有自我描述性,以便将打包或发布到服务器的项目能够在另一个工作区中得到正确重建。

.classpath

Classpath指定在项目中哪些Java源文件和资源文件被Java构建器所考虑,并指定如何在项目外查找类型。Java构建器将Java源文件编译到输出文件夹中,并将资源文件复制到其中。


12

由于这些文件可以通过各种插件进行扩展,因此无法提供完整的参考文献。

基本上,.project 文件存储项目设置,例如构建器和项目性质设置,而 .classpath 文件定义在运行过程中要使用的类路径。类路径文件包含与项目中的文件夹相对应的 src 和 target 条目;con 条目用于描述某种“虚拟”条目,例如 JVM 库或者在 Eclipse 插件依赖项的情况下(普通 Java 项目依赖项以不同的方式显示,使用特殊的 src 条目)。


5
这份Eclipse文档详细介绍了.project文件的标记语言: 项目描述文件
其中,.project文件被定义为:
当在工作区创建一个项目时,会自动生成一个项目描述文件来描述这个项目。该文件的目的是使项目具有自我描述性,因此可以正确地在另一个工作区中重新创建已压缩或发布到服务器上的项目。该文件始终被称为“.project”。

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