And*_*rew 7 java bytecode class
我正在尝试确定是否需要在构建链中重新编译一些jar,如果我有以下结构,jar 1在其源更改时编译,jar 2在其源更改或jar 1重新编译时编译.
罐子1:
public class Foo /* impl*/
Run Code Online (Sandbox Code Playgroud)
罐子2:
public class Bar extends Foo /*impl*/
Run Code Online (Sandbox Code Playgroud)
假设两个类之间的合同没有改变,即.添加抽象方法或将方法添加到接口等.
我需要重新编译jar 2吗?即.如果对Foo中的私有方法进行了一些更改,Bar需要重新编译吗?
我尝试通过比较两个类的字节码来测试这个,在一个中更改一堆并且正如预期的那样它没有改变.然而,我的同事坚持认为他们遇到过这样的情况:即使合同没有变更,他们也必须重新编译一切才能工作,但是他们不记得原因是什么......所以举证责任在我身上证明了这不应该是必要的.是否存在对超类进行更改将需要重新编译子类的情况,即使两者之间的接口保持不变?
假设Foo是由开源组织发布的; Foo各种公司实施了数千个子类.
现在,如果进行了一些更改Foo,并且以二进制形式发布了新版本,那么所有公司都应该重新编译它们的代码吗?当然不是.(好吧,我们一直在重新编译所有代码,但这不是必需的 - 新的jar Foo可以简单地放入而不会造成任何问题)
这是二进制兼容性的问题,您可以检查规范以确保更改Foo是安全的.请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html
| 归档时间: |
|
| 查看次数: |
930 次 |
| 最近记录: |