遇过的坑-用ant编译java项目,如果static变量有修改,使用了该static变量的java文件, 不会重编译
2014-01-13 12:37
344 查看
我们项目,都是用ant来编译,而且是用增量编译的方式——每次编译时,不会删除之前的class文件,只重新编译有变更的java文件。
一般情况下,是没问题的,但如果修改的是static变量,那就有问题了。
如果A类使用了B类中的static变量,在编译时,A类会直接填充B类static变量的实际值。
例如,代码
编译后的class,实际是这样
因此,如果你用文本编辑器直接修改B类中的变量,重新跑一次ant脚本,只是重新编译B类的lass,A类中所使用的static变量却没有变。
就这个问题,小结几点要注意的:
1、用eclipse修改、和用文本编辑器修改,表现是不一样的。用eclipse来修改,它会将相关联的类也重新编译。平时一般用eclipse来修改代码,所以比较少感知到本文提到的问题。
2、ant执行编译命令(javac)前,要将class文件先删掉,以避免本文提到的问题
3、要修改线上环境的static变量,只替换static变量所在的class文件,是会有问题的。原则上,要将所有使用这个static变量的类都替换掉。更好的实践,是不要只替换几个类,而是将整份代码都重新编译,重新发布。
一般情况下,是没问题的,但如果修改的是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,实际是这样
public class A { private void test() { String var = ”var";//已经是实际的值,不是变量 } }
因此,如果你用文本编辑器直接修改B类中的变量,重新跑一次ant脚本,只是重新编译B类的lass,A类中所使用的static变量却没有变。
就这个问题,小结几点要注意的:
1、用eclipse修改、和用文本编辑器修改,表现是不一样的。用eclipse来修改,它会将相关联的类也重新编译。平时一般用eclipse来修改代码,所以比较少感知到本文提到的问题。
2、ant执行编译命令(javac)前,要将class文件先删掉,以避免本文提到的问题
3、要修改线上环境的static变量,只替换static变量所在的class文件,是会有问题的。原则上,要将所有使用这个static变量的类都替换掉。更好的实践,是不要只替换几个类,而是将整份代码都重新编译,重新发布。
相关文章推荐
- eclipse:使用ant将java项目文件编译为jar文件 + ant常用命令总结
- 使用ant编译打包运行java文件
- tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空
- 使用ant编译和发布java项目
- 使用Ant编译大量java文件时出java.lang.OutOfMemoryError
- 使用Myeclipse内置Ant编译项目时提醒警告java\lang\Object.class(java\lang:Object.class): 主版本 51 比 50 新,此编译器支持最新的主版本
- Apache Ant学习总结(二):使用Ant自动编译JavaWeb项目并打成war包发布到Tomcat中
- SpringBoot使用Maven打包编译时修改配置文件中变量(一)
- 修改eclipse下maven项目的java文件编译目录路径
- tomcat work目录的作用就是编译每个项目里的jsp文件为java文件如果项目没有jsp页面则这个项目文件夹为空
- 使用Ant编译大量java文件时出java.lang.OutOfMemoryError
- 使用ant编译打包java文件
- 使用JAVA实现比较两个文件夹下的文件新增和修改情况,并复制到新的目录(实现增量更新项目)
- GLSL 中 ,如果定义的 变量 没有在代码中使用到,那么不会被编译,用 glget* 是获取不到的
- java反编译软件jd-gui.exe以及使用javassist修改class文件 .
- 使用ant编译打包、部署简单的javaweb项目 --02
- 使用ant编译打包、部署简单的javaweb项目 --01
- 一个完整的java项目ant编译文件
- (转)使用Ant编译大量java文件时出java.lang.OutOfMemoryError
- 使用ANT编译打包JAVA文件