在Java项目中,Eclipse中的“打开声明”是什么意思?

64
在Eclipse SVN项目中,我遇到了一个问题:当我尝试打开一个类的声明时,出现了以下错误:
Problems opening an editor Reason : projectname does not exist.

重构也不起作用。

我在网上搜索并尝试了所有找到的解决方案,但没有任何帮助。我已经下载了不同的Eclipse和Java版本,并切换到一个干净的工作区,但我仍然有这个问题。

我该如何解决我的问题或可以尝试哪些解决方案?


你尝试过创建一个新项目,然后从旧项目中复制/移动代码吗? - madth3
你删除了.metadata文件夹吗? - syb0rg
是的,但两者都不能解决问题 :( 或者我的团队在某个地方删除了任何配置?在构建路径下,我无法执行任何操作,而且这个问题没有主类。 - Taegug
我遇到了同样的问题。这是带有解决方案的问题链接 - Hamzahfrq
你解决了吗?我刚在Debian 8上安装了Eclipse Luna,尝试打开方法声明时出现了相同的错误。 - A.W.
15个回答

40

右键单击项目 -> 属性 -> 项目面板 -> 单击配置链接 -> 单击应用按钮 -> 单击确定按钮。

以上步骤应该将您的项目设置为Java项目。


3
有些项目还未配置外观,你能否提供其他建议? - Dwhitz
1
FYI,上述步骤是为了配置项目方面。 - Jay
对不起,我只是想说我没有配置链接。 - Dwhitz
强烈推荐在进行此更改之前备份位于项目文件夹中的.project文件。 - user3437460
@user3437460 希望我早点看到那个评论,我刚刚把我的项目搞崩了。 - Josh
这会使类丢失,我不知道如何把它们找回来。 - Plain_Dude_Sleeping_Alone

25

如果项目是多模块的Maven项目,则需要导入子/模块项目以及父/pom项目。然后确保仅通过子项目打开源文件。这样打开的Java文件将具有“重构”右键菜单项,以及F3打开声明等功能正常工作。但是,如果从父项目中打开Java文件,这些Eclipse功能将缺失。

当通过搜索结果打开文件时,会非常令人沮丧,因为该文件将在父项目和子项目中被找到并列出。您需要确保仅使用通过子项目访问的文件进行操作。

我无法准确解释Eclipse发生了什么,但它似乎无法识别父项目为Java项目,尽管无论是通过父项目还是子项目访问,它都能正确地进行语法高亮显示Java文件。


我同意你的看法,我也遇到了同样的问题,与父文件夹一起工作非常令人沮丧。你找到任何解决方法了吗? - Jrr
然后确保您只通过子项目打开源文件。谢谢。我从度假回来后,遇到了OP描述的错误。结果发现我在Eclipse中打开了错误的文件。看来我的大脑还需要一些重新启动.. ;) - Kevin Cruijssen
仍然在2018年发生 - 我已经将所有“仅pom”的模块占位符项目移动到一个单独的工作集中,以尝试避免这种情况。 - Ed Randall
这个问题困扰我很久了。通常情况下,我会尝试其中一个解决方案,如果不行的话,我会搜索其他方法。但这一次,我不得不关闭并重新打开 Eclipse 才能让子项目被识别为一个工程。 - Jack BeNimble
您可以打开“隐藏物理嵌套模块的文件夹(实验性)”功能,以隐藏父文件夹。该功能目前位于窗口 -> 首选项 -> Maven ->“隐藏物理嵌套模块的文件夹(实验性)”。 - Tim Perry

6
你需要将其作为Java项目进行检查,或者最好是创建者应该提交.project和.classpath文件。

1
我遇到了这个问题,希望Eclipse能根据我的POM文件为我生成这些。 - Crowie
2
你不是 OP,但没关系。对于这个问题,你需要克隆存储库,然后使用(我认为)导入为 Maven 项目向导(而不是像通常一样通过 Git 存储库视图)。 - nitind

3
我也遇到过这个问题。看起来在搜索工作区后,Eclipse打开了错误的文件。
我按下了Ctrl + Shift + H(在层次结构中打开类型),输入类名并打开它。文件在新标签页中打开,一切都可以导航了。
图标的不同之处在于: 不可导航的J是用轮廓字体显示的

2

它可能缺少一个构建器。检查您的PROJ_HOME/.project文件,应该像这样:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
    <name>the-one-user</name>
    <comment></comment>
    <projects>
    </projects>
    <buildSpec>
        <buildCommand>
            <name>org.eclipse.jdt.core.javabuilder</name>
            <arguments>
            </arguments>
        </buildCommand>
    </buildSpec>
    <natures>
        <nature>org.eclipse.jdt.core.javanature</nature>
    </natures>
</projectDescription>

参考: 常见问题解答:如何向给定项目添加构建器?


2

您可以通过创建一个新的Java项目来解决这个问题。当您检出该项目时,应选择默认选项, [以使用新项目向导配置的项目进行检出]。


2
你正在导入一个Maven项目吗?如果是,那么文件将会在几个视图中显示,特别是如果你通过“打开资源(Ctrl + Shift + R)”打开该文件。

enter image description here

让我们看一下上面的例子,"servlet-filter"(标记为1)作为Maven项目导入,并在2中创建Maven透视图项目。如果您在1中打开文件,则您的“打开声明F3”将无法工作,因为它不是有效的Maven项目。如果您在2中打开相同的文件,则它将起作用。
希望这可以帮到您。

这就是我在寻找的答案。 - Phalgun
这个答案实际上解释了@mrjmh答案的原因。两个答案合并起来将是完美的。 - not2savvy
如果您在1中打开文件,则“打开声明F3”将无法正常工作。可以将“1”转换为多面形式,例如@Jay的答案吗? - user1169587

1
你需要将其作为Java/Maven项目导入。导入项目后,请执行以下步骤:

转到“项目” -> 选择“属性” -> 选择“项目引用” -> 选择/检查您在代码库中引用的所有相关/子项目 -> 应用并关闭

完成后,请尝试清理整个项目。这应该解决问题。

0
尝试将“Java”添加为项目的“Project Nature”。 项目 -> 属性 -> 项目性质enter image description here

0

当项目类路径上没有库时,F3无法工作。 选择其他任何项目并尝试使用f3进行导航。它会工作的。

解决方案是将JAR文件添加到您的库中或将库添加到您的项目中。 尝试使用MAVEN项目,这样问题就永远不会发生。


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