Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此类型上没有上拉功能。所有超类型都是二进制的_Java_Eclipse_Jar_Refactoring - Fatal编程技术网

Java 此类型上没有上拉功能。所有超类型都是二进制的

Java 此类型上没有上拉功能。所有超类型都是二进制的,java,eclipse,jar,refactoring,Java,Eclipse,Jar,Refactoring,我正在Eclipse(Juno)中对一个大型Java项目进行大量重构 当我打开上下文菜单并重构>上拉时。。。对于我希望移动到超级类的某个方法,我收到以下通知: 此类型上没有上拉功能。所有超类型都是二进制的 我相当肯定这是因为超类是从当前在我的项目中编译为jar的另一个包导入的。当然,我可以编辑这个jar并重新编译,所以问题不是我没有访问源代码的权限,而是Eclipse无法在另一个包中找到源代码 因此,我的问题是: 是否有任何变通方法/解决方案 我尝试的是手动移动方法,但是,当然,我不想这样做,否

我正在Eclipse(Juno)中对一个大型Java项目进行大量重构

当我打开上下文菜单并重构>上拉时。。。对于我希望移动到超级类的某个方法,我收到以下通知:

此类型上没有上拉功能。所有超类型都是二进制的

我相当肯定这是因为超类是从当前在我的项目中编译为jar的另一个包导入的。当然,我可以编辑这个jar并重新编译,所以问题不是我没有访问源代码的权限,而是Eclipse无法在另一个包中找到源代码

因此,我的问题是:

是否有任何变通方法/解决方案

我尝试的是手动移动方法,但是,当然,我不想这样做,否则我就不会首先使用Eclipse的重构功能。最重要的是,我正在移动的大多数方法都是大型方法,其中包含许多其他私有方法调用,因此Eclipse很好地为我找到了这些方法并同时移动它们。代码库非常大,手动移动它们会很快变得混乱和容易出错

编辑

根据给出的评论和回答,似乎需要一些澄清

Simon AndréForsberg的一个回答建议将“jar”项目添加到我的java构建路径中。这项工作已经完成。不管怎样,我还是收到了通知

一条评论是:

嗯。请准确地告诉我们您希望Eclipse为您做什么,并根据可用信息提示我们Eclipse如何可靠地做到这一点PM 77-1

  • 我希望Eclipse显示
    pull-up…
    refactoring向导,而不是“pull-up在此类型上不可用。所有超级类型都是二进制的”通知

  • 我不知道Eclipse如何能够可靠地做到这一点。这就是我发布这个问题的原因


  • 仅仅因为您有能力重新编译您的项目并导出另一个JAR,并不意味着Eclipse知道您有能力这样做

    如果另一个包在您的工作区中可用,那么您可以将项目添加到构建路径中,而不是首先将其编译到jar中。如果Eclipse知道您希望使用工作区中另一个项目的代码,那么它也将知道如何查找和操作该项目的源代码

    您应该做的是将项目添加到构建路径中,并排除JAR文件

    此屏幕截图显示了将另一个项目添加到构建路径的位置,该位置取自Eclipse wiki:


    为什么您认为您的
    jar
    包含源代码?@PM77-1我的意思是我可以在同一个包中的super子类中执行此功能。对于不同包中的子类,我不能这样做。对于不同a包中的子类,它们通过编译的jar引用super。这有意义吗?好的。请准确地告诉我们您希望Eclipse为您做什么,并根据可用信息提示Eclipse如何可靠地做到这一点。@PM77-1请参阅我对文章的编辑。Eclipse如何猜测在哪里查找您的超类的源代码?我已经将该项目添加到我的构建路径中。我将编辑这个问题以反映这一点。@SoylentGreen那么你究竟为什么把这个包作为一个罐子包含进来?这个项目经历了很多变化。由于几天前或几周前所做的某些更改,项目处于生成路径中。可能已经没有必要了,但我现在还不确定。不管怎样,它是否添加到构建路径都没有区别。我已经试过了,我仍然收到了通知。为了更具体地回答你的问题,它作为一个jar包含,因为Maven在我们推到dev时构建项目,这就是所有项目引用的解析方式。啊。就这样。包含jar的Maven变量被删除,我通过工作区中的buildpath添加了项目。它是有效的。非常感谢。我需要做的是从构建路径中删除Maven变量,将我的工作区项目添加到构建路径中,进行重构,然后从构建路径中删除工作区项目,然后将Maven变量重新添加到构建路径中。如果我想在这种情况下使用重构向导,我似乎必须重做和撤消一些操作:/