Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184672
  • 博文数量: 40
  • 博客积分: 1768
  • 博客等级: 上尉
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-28 18:15
文章分类
文章存档

2012年(4)

2011年(11)

2010年(10)

2009年(6)

2008年(9)

分类: Java

2010-06-17 12:22:04

最近在编译我们的中间件产品的时候,碰到了一些问题
原来编译环境:jdk1.5,OS:linux为64位,windows为32位。现在转移到jdk1.6上
在jdk1.6上编译,OS:linux为64位,windows为32位。在编译某个模块的时候,会提示bad class file: xxx.class,
unable to access file: corrupted zip file
提示损坏的xxx.class,位于jar包AA.jar中。用jar命令jar -tvf AA.jar | grep xxx,可以得到xxx.class,说明xxx.class在AA.jar中,没有损坏。
编写一个测试类,该类import了xxx.class,没有其他语句。单独编译该类,用-cp AA.jar指定用到的jar,编译通过。
上面两步测试,说明所谓损坏的xxx.class其实完好的存在于AA.jar中,那为什么编译模块总是失败呢?
分析编译的log,发现在发生错误之前,ant执行了一个jar命令,该命令update了AA.jar,接着是javac命令,编译时候用到了AA.jar中的类,看来是在执行javac的时候jar命令还没有完成对AA.jar的更新操作,导致了问题。跟踪这个分析,我在javac命令加入了-verbose参数,这样相当于降低了javac的执行速度,果然编译通过了。看来jdk1.6的编译速度太快,暴露了这个问题。这个问题揭示了一个并发的问题,就是在ant中顺序执行jar命令和javac命令,javac可能在jar命令没有完全结束前执行,要从根本解决这个问题,需要重构代码,不在刚update一个jar后马上引用它。
阅读(1946) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~