如何在Buildship中修复“缺少Gradle项目配置文件”的问题?

39
作为Eclipse用户,我一直喜欢Gradle IDE。然而,这个插件现在已经废弃,转而推荐使用新的Buildship插件。
在安装了Buildship的全新Eclipse IDE中,我遇到了所有Gradle项目中下列错误:
“缺少Gradle项目配置文件:.settings/org.eclipse.buildship.core.prefs”。
虽然谷歌上有几页处理此问题的页面,但它们似乎都非常过时。插件的漏洞跟踪器中也有一条已标记为“CLOSED FIXED”的记录。显然,并未修复该问题。
我是否做错了什么?有任何想法如何解决这个问题吗?

当我从版本控制中检出项目时,遇到了这个错误,其中缺少了 org.eclipse.buildship.core.prefs,因为提交的用户甚至没有使用 Buildship。问题是:org.eclipse.buildship.core.prefs 是否可以安全地提交到版本控制中? - Markus Pscheidt
我认为你无法将这些文件添加到版本控制中,因为Eclipse会将它们放在工作区元数据文件夹中,该文件夹可以位于与实际项目完全不同的目录中。所以,不行。目前,如果出现问题,您必须通过向导重新导入项目。 - Martin Häusler
org.eclipse.buildship.core.prefs 不是放置在项目的 .settings 文件夹里吗? - Markus Pscheidt
啊,是的,你说得对。我以为它在.metadata中。我总是把.settings加入到gitignore中。所以也许可以将org.eclipse.buildship.core.prefs检查到版本控制中。我不知道里面是否存在任何绝对路径或其他依赖项,如果在另一台计算机上检出会导致问题。个人建议最好避免这样做。 - Martin Häusler
删除项目的 Gradle nature,然后再次添加 Gradle nature,这对我起作用了。很棒 @SWiggels - SUDARSHAN BHALERAO
7个回答

52
我已经自己解决了。 "缺少gradle项目配置文件"的问题是由gradle项目导入到Eclipse中的方式引起的。
如果通过常规的 文件 -> 导入 -> 一般 -> 现有项目导入工作区命令导入gradle项目,那么就会产生错误并出现上述错误。
但是,如果您通过文件 -> 导入 -> Gradle -> 现有Gradle项目导入完全相同的项目,则会获得一个不同的导入向导,并且使用此向导,它可以像魅力一样运行。
我仍然认为这是一个错误,因为导入向导的选择不应该有影响。然而,选择适当的向导是可行的解决方法。

2
请注意,这可能会产生歧义,因为在迁移期间可能存在多个构建系统文件(如Maven + Gradle或ant + Gradle)。此外,这些向导是由第三方作者创建的。那么核心框架应该怎么做呢?也许它可以提供一个钩子,以便插件可以将逻辑注入“通用项目”向导中,让它们从文件中检测其“导入器”是否适用,并(提供)重定向到不同的向导步骤? (但是,如果多个插件接受该挂钩怎么办?)我认为这可能是在这样一个可扩展平台上避免的困难症状。 - Luke Usherwood

31

另一个选项是:

  1. 进入您的项目路径(gradle或gradlew所在的位置)
  2. Unix: sh gradlew cleaneclipse Win: gradlew cleaneclipse

需要在您的build.gradleapply plugin: 'eclipse'

  1. 刷新eclipse中的您的项目。
  2. 然后对于Unix:sh gradlew eclipse Win:gradlew eclipse

现在您的eclipse-project中将缺少gradle nature。 打开你的project -> configure -> add gradle nature上下文菜单

现在一切都应该没问题了。


有趣的是,/gradlew tasks命令向我展示生成的任务名为cleanEclipse。不管是大小写都不会报错。但是,总体来说,Gradle任务名是区分大小写的吧?无论如何,这个方法可以运行。 - Christian W
1
在 Gradle 的 NamedDomainObjectCollection 中,他们写到 equals 用于名称匹配。所以也许 Buildship 覆盖了 equals,为了给我们添加一些便利。 :-) - SWiggels

11

我认真地寻找解决方案,但只找到了一些变通方法。Alan47的解决方案为我创建了文件,但在我的情况下无法正确创建项目。所以我只是复制了创建的文件,并以默认方式再次导入了项目:

File -> Import -> General -> Existing Project into Workspace

并将文件再次复制粘贴到目录中

./.settings
文件名称:
org.eclipse.buildship.core.prefs
文件的内容仅为:
connection.project.dir=
eclipse.preferences.version=1

2
救了我的一天。可惜 Buildship 不能自行恢复。 - Ilya Kurnosov
这是唯一对我有效的建议。请注意,如果它是子项目,则 connection.project.dir 设置可能会有所不同。 - rghome

3

仅使用鼠标的最简解决方案

正如oehme (Stefan Oehme - 核心开发者)在这里所说的一样:
https://github.com/eclipse/buildship/issues/504

"Buildship不能重新创建该文件,因为它无法知道您的根项目是什么(Gradle支持任意项目布局)。 您应该将设置文件检入或不检入任何Eclipse文件。 不支持同时检入.project并省略.settings。"

或者在这里 (Stefan Oehme - 核心开发者):
https://discuss.gradle.org/t/do-i-need-to-check-in-settings-org-eclipse-buildship-core-prefs-file/22457/2

"如果您已经有带有buildship nature的.checked in .project文件,但没有检入的设置文件,则会发生这种情况。 选择是同时检入两个文件或都不检入,并使用Gradle导入向导。"


仅使用鼠标的最简解决方案 如下:

  1. 右键单击项目,然后单击属性
  2. 在属性窗口中,转到项目性质删除Gradle Nature然后单击应用和关闭按钮。
  3. 再次打开同一个窗口,并添加 Gradle Nature,然后点击应用和关闭按钮。
  4. 右键单击项目 > Gradle > 刷新Gradle项目

在每个步骤之后:1,2,3,4 让Eclipse进行更新工作,请不要快速推送它。

其他解决方案是将文件保存在某个地方,然后将其再次粘贴到项目中或手动从头开始创建,然后执行:右键单击项目 > Gradle > 刷新Gradle项目。

有用的细节:

文件名:org.eclipse.buildship.core.prefs
文件通常编码:ISO_8859_1
文件路径:./setting/org.eclipse.buildship.core.prefs
文件内容,一行:connection.project.dir = eclipse.preferences.version=1


2

步骤1

在IDE中右键单击您的项目名称,选择属性(Properties)> 项目性质(Project Natures)> 在右侧窗格上选择 Gradle项目性质 > 删除 > 应用并关闭(Apply and Close)

步骤2

在IDE中右键单击您的项目名称,选择配置(Configure)> 添加Gradle性质(Add Gradle Nature)

结果

给Gradle几秒钟与IDE同步,.settings文件将自动生成在项目根目录下。

删除错误

问题(Problems)视图中删除错误。


2
也许你可以使用这种方法,通过备份文件来恢复。
我在我的Flutter项目中不小心删除或丢失了文件。
然后我创建了一个新的方法:进入你的Flutter项目中的./android文件夹。如果你是Mac用户,请将以下内容复制到终端:
touch "org.eclipse.buildship.core.prefs"; echo "connection.project.dir=
eclipse.preferences.version=1" >> org.eclipse.buildship.core.prefs

然后将其复制到你的Flutter项目中的./android/app文件夹中。
touch "org.eclipse.buildship.core.prefs"; echo "connection.project.dir=..
eclipse.preferences.version=1" >> org.eclipse.buildship.core.prefs

0
也许不是解决方案,而是一种变通方法:
如果应用程序尽管出现此错误仍然可以正常工作(就像我的情况一样)。
那么一个可能的解决方案就是简单地删除这个错误:

how to delete error

这对我有效,错误没有再出现。


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