增量发布项目时容易掉进的陷阱!!(分享贴)

wangzhidavl 2013-12-05 05:02:10
今天在做项目更新时,发现了一个很容易忽略,也很难发觉的问题!
当我们改了工程里面的常量时,必须把引用到这个常量的所有类都重新编译发布,因为java的机制时,在编译时是把常量写到字节码里的。所以如果公共类里面的常量值变化了,必须把引用到该常量的类重编译
例如:
PlCommon.java
public class PlCommon {
public static final String A = "1"
}

XxxAction.java
public class XxxAction{
public String getXxx{
return PlCommon.A;
}
}

当修改了PlCommon.java
public class PlCommon {
public static final String A = "2"
}

如果不重新编译XxxAction.java,会发现getXxx得到的值还是"1";因为常量不是动态引用的,
是编译期就定了的。这里就可以会导致难以看出的错误!!

在此分享只希望各位同行在做项目增量发布时多多注意!少走弯路!
...全文
279 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
天降扫把星 2013-12-06
  • 打赏
  • 举报
回复
有用。一个提醒
wangzhidavl 2013-12-06
  • 打赏
  • 举报
回复
引用 2 楼 u010684923 的回复:
为何不把这些常量写到配置文件里,这样即使项目发布了,修改配置文件就好了。
一般配置文件里只放需要根据服务器的不同而配置的变量,常量是会改的机率很小的,而且每次调用都读文件效率低!
a_jian 2013-12-06
  • 打赏
  • 举报
回复
重启服务器不就行了吗?
wangzhidavl 2013-12-06
  • 打赏
  • 举报
回复
引用 6 楼 magi1201 的回复:
之前debug断点时,可以临时修改变量值,方便调试,如果修改了常量类引用,则必须替换服务器中该常量类的class文件,并重启服务器。貌似不用重新编译引用的类。
你尝试把引用了常量的类的class文件反编译一下便知道要不要替换了!常量是把值写到字节码里的
wangzhidavl 2013-12-06
  • 打赏
  • 举报
回复
引用 1 楼 huxiweng 的回复:
哪有这样编单个文件的,必须重新编译整个项目
小功能的发布,一般使用增量方式发布,容易出现此错误!IDE手动编译的,一般只会编译修改过的文件!只是在这对新手提个醒!大牛可以直接忽略此贴!
姜小白- 2013-12-05
  • 打赏
  • 举报
回复
之前debug断点时,可以临时修改变量值,方便调试,如果修改了常量类引用,则必须替换服务器中该常量类的class文件,并重启服务器。貌似不用重新编译引用的类。
ainn 2013-12-05
  • 打赏
  • 举报
回复
fadfasdfasdfa
ainn 2013-12-05
  • 打赏
  • 举报
回复
good dd
闲去野鹤 2013-12-05
  • 打赏
  • 举报
回复
为何不把这些常量写到配置文件里,这样即使项目发布了,修改配置文件就好了。
teemai 2013-12-05
  • 打赏
  • 举报
回复
哪有这样编单个文件的,必须重新编译整个项目

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧