java - 尝试使用更高版本的 JAR 文件时出现 NoSuchMethod 错误

标签 java jar versioning

在一个程序中,我使用两个外部 jar 库。 外部库X 中有一个类调用库Y 中某个类的方法m。库X 是使用库Y 1.0 版本编译的。但是,由于我在代码中将库 Y 用于其他目的,因此我更喜欢使用它的最新版本(假设是 5.0)。 我的问题是,当我执行代码时,库 X 提示方法 m 不再存在(抛出 NoSuchMethod 错误)。不过方法是有的。

问题可能与我使用的库 Y 版本比编译时存在的版本更新有关? (虽然向后兼容,但具有不同的字节码?)。如果是这种情况,那么我会有点困惑,因为我认为 java 方法调用以字节码表示为符号引用(例如方法签名),而不是直接引用(例如偏移量),但我可能误解了东西。

感谢您的澄清!

最佳答案

[...] I thought that java method calls were expressed in byte code as symbolic references (e.g., method signatures), and not as direct references (e.g., offsets) [...]

你的想法是对的;但 Y v5.0 中的方法可能与 Y v1.0 中的方法具有不同的签名,即使它们具有相同的名称;例如,它现在可能具有不同数量的参数,或不同类型的参数,或者它可能已变为静态或非静态

关于java - 尝试使用更高版本的 JAR 文件时出现 NoSuchMethod 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8829206/

相关文章:

svn - 如何对可能无法按顺序完成的并行开发的里程碑进行版本控制?

java - 如何对 CloseableHttpClient 请求进行 UTF-8 编码

java - 如何让按钮单击显示组合选项

java - 如何使用 Eclipse 中的资源从 Maven 项目创建可运行的 jar

java - 如何在 JAR 中搜索文件?

将库版本编译成.so文件

java - 如何测试(模拟)使用外部 API 的对象(Jama Software)

java - JAXB 如何将复合键字段映射为同级

java - 当我使用 FileInputStream 导出 JAR 文件时 FileNotFoundException

ios - 为 App Store 构建版本 1.2 或 1.2.0