您的位置:首页 > 其它

ANT使用笔记

2009-03-10 13:54 267 查看
ANT
1、 当你修改静态常量定义的时候,对于使用静态常量的类,由于没有修改,因此ant不知道应该重新编译,这会导致隐含的错误,是因为javac inline造成
2、 如果删除了源代码中的一个java文件, 除非清空编译得到的class目录或者手动删除, 否则多余出来这个class不会自动被找到和删除的.)
3、 ANT必须有一个default
target元素。



ANT在1.4环境下构建工程,因为在工程/WEB-INF/lib文件夹下的jar文件有些是在JDK5.0环境中编译打包的。如果使用ant在jdk1.4环境下编译会出现jar包版本错误的问题。









ANT增量编译:
1、每次重新全部编译编译慢
2、当你修改静态常量定义的时候,对于使用静态常量的类,由于没有修改,因此ant不知道应该重新编译,这会导致隐含的错误,是因为javac inline造成的(http://jroller.com/page/ee/20041223#javac_s_inlining_revisited)。(没法自动解决, 基本上还是靠手工强制全部重新编译。给出的解决方案是不要直接访问这些常量,
而是使用一个静态方法(类似 get....()) 返回这些常量, 这样就避免了你说的问题。就像你删除了源代码中的一个java文件, 除非清空编译得到的class目录或者手动删除, 否则多余出来这个class不会自动被找到和删除的.)

很多人对ant有误解,以为ant是一个make工具.从功能上它的确是针对java世界没有make,但它本质上和make是不同的.它实质上是一个task工具.
ant做增量编译实际是依赖编译器也就是javac.因为javac的增量编译存在问题(inline),所以很多人从一开始学ant就接受的是先clean再make的做法,也就从来不知道javac可以增量编译。
解决这两个问题的途径,是用javamake.这个工具会自己维护java文件之间的依赖关系,能正确地做到增量编译.javamake可以很方 便地作为ant的task使用,接受的参数几乎和javac一样,所以也基本没有学习成本.只要定义了javamake的task,用它来替换javac 就可以了.
Java代码

1. <taskdef
name="javamake" classname="com.sun.tools.javamake.ant.JavaMake"/>

顺便说一句,tstamp的作用是设置时间变量以便在任务中使用,对于解决java文件的依赖关系没有丝毫用处. http://www.experimentalstuff.com/Technologies/JavaMake/index.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: