我有两个链接的项目,这两个项目都有一个包。
XProject - > XPackage - > XClass - > X1Method(); X2Method();
YProject - > YPackage - > YClass - > Y1Method();
我正试图从Y1方法调用X1和X2方法。我可以调用X1方法但是当我调用X2方法时,我得到一个运行时错误(java.lang.NoSuchMethodError :)
所有方法都是公开的,方法名称没有任何问题。让其中一个工作而另一个给出运行时错误只是无稽之谈。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:2)
来自java.lang.NoSuchMethodError
javadoc:
如果应用程序试图调用类的指定方法(静态或实例),并且该类不再具有该方法的定义,则抛出该异能。
通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则此错误只能在运行时发生。
换句话说,运行时类路径不包含带有desied方法的类,而它在compiletime类路径中可用。总结:你的类路径搞砸了。清理并对齐它。如何做到这一点取决于您的环境。
更新:因此,它是Eclipse中的Java EE Web应用程序?假设一个是动态Web项目而另一个是普通的 Java项目,那么在动态Web项目的项目属性中,您需要在构建路径 和 Java EE模块依赖项中添加正常的 Java项目。
如果这不能解决问题,那么很可能appserver或JRE的默认类路径是脏的。您需要从JRE/lib
,JRE/lib/ext
和Tomcat/lib
中移除任何不必要的与项目相关的库,并承诺您不再触摸这些库路径;)
答案 1 :(得分:0)
很可能你正在编译类路径中的某些.class的XClass。但是运行时(可能是链接的项目)有一个不同版本的XClass。这是特定于环境的。您需要在编译期间查看类路径中的工件以及在运行期间拾取的内容;
由其他人评论。有关IDE / Build系统甚至代码的详细信息需要进一步回答。