java - 当一个类改变时我需要编译哪些类?

标签 java compilation javac

我有一个内部编写的工具,用于为我们的应用程序创建补丁。 它在 scm 中检查更改了哪些类,并使用 javac 编译它们。
然后我们将创建的 jar 添加到类路径中。 过去我们发现这有一个问题: 如果我更改了 A 类中的方法返回类型,而 B 类使用该方法,则 A 类签名发生更改,当 B 类调用该方法时,我们得到 NoSuchMethodError
但是,现在我有一个不同的情况,即类静态变量已更改,我得到: java.lang.NoClassDefFoundError: 无法初始化类
你知道是什么原因造成的吗?
有什么方法可以告诉我在更改类时需要编译哪些类?

最佳答案

开发一个我怀疑不可靠的解决方案听起来需要付出很多努力。

我会为每个版本构建整个应用程序。要创建补丁,我会将生成的类或文件与原始发行版中的类或文件进行比较。任何已更改的文件都将包含在内。

这样更好,因为

  • 您不必了解更改常量、方法或类的所有后果。
  • 如果您偶然更改了格式或注释等内容,则无需更新文件。
  • 您可以确信应用补丁完全相同并提供完整的分发。

关于java - 当一个类改变时我需要编译哪些类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629342/

相关文章:

java - 收集 IntStream 映射时出错

python - SSH:在终端中运行的 javac 命令在通过 SSH 执行时不起作用

maven - 在 Maven 构建中启用 javac 警告

java.lang.NoSuchMethodException : [class android. app.Activity,int]

java - 服务器启动时 Liberty 忽略 .class 文件

java - 如何在 hibernate 配置文件中使用环境变量?

php - 如何使用 ./configure 设置变量

java - Android - 使用 DownloadManager 下载后启动 Intent

java - 从源代码构建 netty 时出现问题

android - 我试图在app.gradle中添加编译 'com.github.bumptech.glide:glide:3.7.0'