在jdk1.6上编译碰到问题

最近在编译我们的中间件产品的时候,碰到了一些问题
原来编译环境: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后马上引用它。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值