小站重新装修,欢迎到访。
分类 #技术

Ant的一个bug

前几日发现了ant的一个bug。我写的一个打包的ant脚本在我的mac上运行正常,但有同事在windows上则构建失败,我跑到我的windows上测试了下,居然也是失败的,定位了下问题,发现是<jar jarfile="path/to/a.jar"/>在windows上并未创建相应的path/to二级目录。这是我从没遇到过的情况,我首先想到的是去linux上试了下,打包正常这说明并非我的系统环境有多特殊,于是作为一个MacOS用户,一个诡异的想法便开始形成:我觉得这可能是ant在windows上的bug。

然后我去apache下载了最新的ant源码,Jar继承了Zip类,扫了一眼相关源码,看到一段:

1
2
3
4
File parent = zipFile.getParentFile();
if (parent != null && !parent.isDirectory() && !parent.mkdirs()) {
throw new BuildException("Failed to create missing parent" + " directory for " + zipFile);
}

我更疑惑了,看起来ant已经考虑到jar所在的目录的创建了啊。

于是我跑到windows里,准备调试一下相关逻辑,在eclipse里配置了调试环境,把我那个ant脚本作为参数,在开始debug前,我先运行了一下,居然成功了。越来越疑惑了。

仔细想了下,我决定把我windows上老的ANT_HOME切换到最新版的ant,然后事情开始明朗了,构建成功了。我终于恍然大悟,可能是因为一直忽略了ant的版本差异,导致浪费这么多精力。我用的是1.7.0版的ant构建出错,但查阅的却是1.9.2版的,难道新版已经修复了这个bug?为了证实这个猜测,我去ant的subversion仓库里,拉取了Zip.java近期的log,终于发现了REV:807960的log:

create parent directory of archive in and if needed. PR 45377. Based on patch by Remie Bolte

Ant patch

果不其然啊!可惜失去一个为开源社区贡献代码的机会。

[开源]DataX的oracle JDBC writer插件

项目地址:https://github.com/jingege/datax-oraclejdbcwriter

取之于开源,用之于开源

淘宝的DataX开源版本只提供了OCI方式的oracle writer plugin,部署起来有点麻烦。基于JDBC驱动的话,性能虽然不及OCI,但一般只要不是太苛刻的需求,还是能满足的。

DataX的插件机制让对其扩展变得十分简单,所以实现一个插件并非难事,而且笔者提交的代码也并不漂亮,故此次开源仅仅是作为对开源社区的一次微不足道的回馈,理所应当。

[开源]yaderde框架

项目地址:https://github.com/jingege/yaserde

其实当我决定写这个框架的时候,我突然意识到,我想要的正如hadoop的Writable做的,而且hadoop已经做得相当好了。可我还是决定要按自己的思路造一个轮子出来。一来自娱自乐,二来也算是对过去几年遗憾的稍许弥补。目前只做了个雏形,但对于简单场景还是可用的。

博主是一个不是很聪明的码农。完美主义者,强迫症中期。这里会记录一些回忆和点滴,以博为镜。

武器库:

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2017-02-20.