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
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
相关文章推荐
- 自动构建工具Ant的使用-笔记
- 自动构建工具Ant的使用-笔记
- Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解
- Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解
- ant使用笔记
- ant笔记(一)初步使用:搭建环境和运行测试例子
- 大数据学习笔记:在eclipse上使用Ant插件实现自动编译打包
- ant使用笔记
- Ant学习笔记(2) 在Eclipse中使用Ant
- ant使用笔记
- ant使用笔记
- 自动构建工具Ant的使用-笔记
- Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解
- 01- 使用brew 安装ant -学习笔记(一)
- 【学习笔记】系列十四:Ant安装与使用举例
- ant使用笔记(1):安装
- ant 使用笔记
- ant使用笔记
- Ant笔记(二)Ant使用