`
mwei
  • 浏览: 124981 次
  • 性别: Icon_minigender_1
  • 来自: 抽象空间
社区版块
存档分类
最新评论

javamake.jar & javamake-ant15.jar

    博客分类:
  • fw
阅读更多
关键词: ant  javamake  增量编译

前一阵子找这两个jar包,baidu来google去,不容易。
发现有些童鞋需要,拿出来共享一下,同时也让搜索引擎快照下。
使用ant版本为1.5(+)。

Ant本身也支持增量编译,不过有两个问题它没有解决好:1、当修改了一个类的时候,与此类有依赖关系的类不会被重新编译,ant只编译了这个修改过的类。2、全局常量类的修改,ant无法定位。  说白了,这两个问题是一个性质的。结果是,开发人员每次编译时都要clean,再compile,cope…导致编译时间过长,每次修改调试都要等待。
   使用第三方的支持javamake,可以解决上述问题。原理是:第一次编译时,javamake把所有class文件的时间戳记录到数据库(一个pdb文件)中,并记录了所有的依赖关系(继承、实现、调用…);之后再编译时,javamake首先到数据库中检查source文件和class文件的时间戳是否一致,不一致的话,将source文件及其依赖关系(别的source文件)编译。
详细见英文原文:http://www.experimentalstuff.com/Technologies/JavaMake/javamake.html

1.如果不知道怎么编写支持增量编译的build.xml,请参考以下网址:
http://www.experimentalstuff.com/Technologies/JavaMake/ant.html
2.如果init中有clean,应该去掉clean,不然javamake的威力没法释放了。
   我是在init中定义一个task:
<taskdef name="javamake" classname="com.sun.tools.javamake.ant.JavaMake">
      <classpath>
           <pathelement location="${classpath.dir}/javamake-ant15.jar"/>
      </classpath>
      <classpath>
           <pathelement location="${classpath.dir}/javamake.jar"/>
      </classpath>
</taskdef>

3.如果在<javamake ... />中设置了verbose="true",那么可以看到每次修改源文件再编译时,javamake具体做了哪些“地下工作”。

[END]:我使用增量编译后,每次等待时间是原来的1/4左右,depending.




分享到:
评论
6 楼 Dancen 2012-08-28  
理想状态下jar包的更新当然不应该去修改其中的方法签名等外部依赖的部分,但有时修改jar中的接口也是难以避免,我们项目已经因此悲剧过,后来都是先clean,再compile。我已经对javamake进行了重新包装,增加了外部jar包的校验。
5 楼 mwei 2012-08-28  
Dancen 写道
javamake可以解决代码之间的依赖问题,但如果调用的是外部jar包中的方法,而jar包更新了怎么办?

首先jar包是编译好的class文件,外部jar包更新,一般接口是不变的,这不会影响自己的代码,如果自己的代码没有变,javamake不会重新编译。只要自己的代码变了,就会增量编译。--请质疑之
4 楼 Dancen 2012-08-27  
javamake可以解决代码之间的依赖问题,但如果调用的是外部jar包中的方法,而jar包更新了怎么办?
3 楼 mwei 2010-08-17  
zhuyanjavaeye 写道
javac不能做增量编译吗?

javac也能做增量编译,有局限,例如:对静态变量(及对静态变量的那些引用类)无法做到增量编译;
2 楼 zhuyanjavaeye 2010-08-12  
不过,还是很感谢你,我已经下载了你的javamake
1 楼 zhuyanjavaeye 2010-08-12  
javac不能做增量编译吗?

相关推荐

Global site tag (gtag.js) - Google Analytics