Java 此类型上没有上拉功能。所有超类型都是二进制的
我正在Eclipse(Juno)中对一个大型Java项目进行大量重构 当我打开上下文菜单并重构>上拉时。。。对于我希望移动到超级类的某个方法,我收到以下通知: 此类型上没有上拉功能。所有超类型都是二进制的 我相当肯定这是因为超类是从当前在我的项目中编译为jar的另一个包导入的。当然,我可以编辑这个jar并重新编译,所以问题不是我没有访问源代码的权限,而是Eclipse无法在另一个包中找到源代码 因此,我的问题是: 是否有任何变通方法/解决方案 我尝试的是手动移动方法,但是,当然,我不想这样做,否则我就不会首先使用Eclipse的重构功能。最重要的是,我正在移动的大多数方法都是大型方法,其中包含许多其他私有方法调用,因此Eclipse很好地为我找到了这些方法并同时移动它们。代码库非常大,手动移动它们会很快变得混乱和容易出错 编辑 根据给出的评论和回答,似乎需要一些澄清 Simon AndréForsberg的一个回答建议将“jar”项目添加到我的java构建路径中。这项工作已经完成。不管怎样,我还是收到了通知 一条评论是: 嗯。请准确地告诉我们您希望Eclipse为您做什么,并根据可用信息提示我们Eclipse如何可靠地做到这一点PM 77-1Java 此类型上没有上拉功能。所有超类型都是二进制的,java,eclipse,jar,refactoring,Java,Eclipse,Jar,Refactoring,我正在Eclipse(Juno)中对一个大型Java项目进行大量重构 当我打开上下文菜单并重构>上拉时。。。对于我希望移动到超级类的某个方法,我收到以下通知: 此类型上没有上拉功能。所有超类型都是二进制的 我相当肯定这是因为超类是从当前在我的项目中编译为jar的另一个包导入的。当然,我可以编辑这个jar并重新编译,所以问题不是我没有访问源代码的权限,而是Eclipse无法在另一个包中找到源代码 因此,我的问题是: 是否有任何变通方法/解决方案 我尝试的是手动移动方法,但是,当然,我不想这样做,否
pull-up…
refactoring向导,而不是“pull-up在此类型上不可用。所有超级类型都是二进制的”通知仅仅因为您有能力重新编译您的项目并导出另一个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变量重新添加到构建路径中。如果我想在这种情况下使用重构向导,我似乎必须重做和撤消一些操作:/