我有一个内部编写的工具,用于为我们的应用程序创建补丁。
它在 scm 中检查更改了哪些类,并使用 javac
编译它们。
然后我们将创建的 jar 添加到类路径中。
过去我们发现这有一个问题:
如果我更改了 A 类中的方法返回类型,而 B 类使用该方法,则 A 类签名发生更改,当 B 类调用该方法时,我们得到 NoSuchMethodError
。
但是,现在我有一个不同的情况,即类静态变量已更改,我得到:
java.lang.NoClassDefFoundError: 无法初始化类
。
你知道是什么原因造成的吗?
有什么方法可以告诉我在更改类时需要编译哪些类?
最佳答案
开发一个我怀疑不可靠的解决方案听起来需要付出很多努力。
我会为每个版本构建整个应用程序。要创建补丁,我会将生成的类或文件与原始发行版中的类或文件进行比较。任何已更改的文件都将包含在内。
这样更好,因为
- 您不必了解更改常量、方法或类的所有后果。
- 如果您偶然更改了格式或注释等内容,则无需更新文件。
- 您可以确信应用补丁完全相同并提供完整的分发。
关于java - 当一个类改变时我需要编译哪些类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629342/