我们项目,都是用ant来编译,而且是用增量编译的方式——每次编译时,不会删除之前的class文件,只重新编译有变更的java文件。
一般情况下,是没问题的,但如果修改的是static变量,那就有问题了。
如果A类使用了B类中的static变量,在编译时,A类会直接填充B类static变量的实际值。
例如,代码
public class A
{
private void test()
{
String var = B.STATIC_VAR;
}
}
public class B
{
public static String STATIC_VAR = "var";
}
编译后的class,实际是这样

当使用Ant进行增量编译时,若修改了static变量,依赖该变量的类不会重编译。这可能导致class文件中仍保留旧的static变量值。在Eclipse中修改会触发相关类重编译,但文本编辑器修改则不会。为避免问题,建议在ant执行javac前删除class文件,或确保线上环境修改static变量时替换所有相关类,最好整体重新编译并发布。
最低0.47元/天 解锁文章
574

被折叠的 条评论
为什么被折叠?



