我有一个使用某些第三方API的java应用程序.由于各种补丁,第三方jar文件会相当频繁地更改,但API本身并不会经常更改.
每次第三方jar改变时,我是否必须重新编译我的应用程序?
如果API发生更改,即使您不需要对源代码进行任何更改,也应重新编译.如果API未更改,则无需重新编译.
"即使您不需要进行任何更改"的原因是某些与源兼容的更改可能不是二进制兼容的.例如,假设您当前正在呼叫:
public void foo(String x)
在以后的版本中,这将更改为:
public void foo(Object x)
显然你的代码仍然会编译,但它解析调用的方法会改变.
当然,这有点边缘.基本上,只要你知道API何时发生变化,你应该没问题.
另一种理论上需要重新编译的情况是常量.常量的值字面上编译为使用它的类的字节码.如果在新版本的API中更改了值,则针对旧版本编译的任何内容都将继续使用旧值,这可能导致不同的行为并且很难诊断错误.
当然,没有大脑的API设计师如果可以避免它,就不会改变公共常量的值,但可能存在必要的情况.