javac
功能: 它编译两种java文件 1 ,没有被编译过的 2,以前编译的 (have no corresponding .class
file or where the class file is older than the .java
file will be compiled),可以使用includes, includesfile
, excludes
, and excludesfile
等来提高匹配度。使用javac的compiler属性可以设置不同的编译器。
属性:
1. srcdir:java源文件的文件夹,除非用了嵌套的<src>标签
2. destdir:用于存放编译后class文件的文件夹,默认是当前文件夹。
3. includes:必须包括的文件模式的列表,以逗号或空格分隔。如果忽略,将包括所有文件。
4. includesfile:指定一个包含很多include的文件,同样可以用通配符来指定。
5. excludes:必须排除的文件模式的列表,以逗号或空格分隔。如果忽略,将不排除任何文件。
6. excludesfile: 指定一个包含很多exclude的文件,同样可以用通配符来指定。
7. classpath: class中导入需要使用的jar包。
8. sourcepath: 指定源资源文件夹。默认指向srcdir 。
9. bootclasspath: 编译过程中需要导入class文件会被导入。(不太明白)
10. classpathref: class中需要使用的jar包, 以引用的形式给出。
11. sourcepathref:资源文件夹,同上以引用得形式。
12. bootclasspathref: 编译过程中需要引用的class文件夹目录。
13. extdirs:扩展文件的路径。
14. encoding:编码格式
15. nowarn:为真时将忽略所有警告信息
16. debug: 是否产生调试信息,默认off。
17. debuglevel: 相当于命令行中要追加到 -g 命令行开关后面的关键字列表。这将会被除 modern 和 classic(ver >=
1.2) 以外的所有实现忽略。合法值是 none 或(lines,vars ,source:只生成一部分调试信息)。
如果不指定 debuglevel,则默认情况下,将不会在 -g 的后面追加任何关键字。如果不打开 debug,
该特性将被忽略。
18. optimize: 指出是否应该用优化方式编译源代码,默认为 off。
19. deprecation:假如为真,将会给出不建议使用的API,默认值false。
20. target: 根据特定的vm版本生成class文件
21. verbose:要求编译器输出详细信息,默认no。
22. depend: 当运行这个任务时,首先按照顺序依次执行完依赖的任务,如果出错将停止执行。
23. includeAntRuntime:指出是否应在类路径中包括 Ant 运行时程序库,默认为 yes。
24. includeJavaRuntime: 指出是否应在类路径中包括来自执行 VM 的默认运行时程序库,默认为 no。
25. fork:是否执行外部的javac,默认no。
26. executable:当fork="yes"时,所执行的javac的完整路径。默认的是当前跑ant的java版本,fork="no"就忽略
27. memoryInitialSize:当是外部javac的时候,获得基本vm的初始内存大小。否则忽略。
28. memoryMaximumSize: 同上只不过是获得最大的内存大小。
29. failonerror: Ant 任务在出现编译错误的情况下是否继续执行,默认值为 True,这意味着即使遇到错误
也要继续执行。
30. errorProperty:当编译失败的时候要设置的属性。
31. source:命令行-source的开关。 假如设置为1.4,将激活断言。默认是1.3。默认不使用-source。
Note that the default value depends on the JVM that is running Ant. We highly
recommend to always specify this attribute.
32. compiler:设置用来选择编译器,如果不设置,将使用默认的编译器。
33. listfiles:是否显示被编译文件列表,默认是no。
34. tempdir:指定存放临时文件的地方,这个只在设置了fork和命令行超过参数长度超过4k的时候使用。
(default is java.io.tmpdir.)
35. updatedProperty:编译发生并成功要设置的属性。
36. includeDestClasses:是否包含目标class文件夹包含到classpath。默认是true。意思是之前生成的class文
件自动加到classpath。
实例:
1. 将src下的java文件编译到build下去,classpath中包括xyz.jar包,并显示调试信息,source是1.4,激活断言(assert)
<javac srcdir="${src}"
destdir="${build}"
classpath="xyz.jar"
debug="on"
source="1.4"
/>
2. 将src下的java文件编译到build下去,使用外部的javac。source的等级是1.2,并且class文件是根据jdk1.2+版本生成
<javac srcdir="${src}"
destdir="${build}"
fork="true"
source="1.2"
target="1.2"
/>
3. 此例同上,只是使用fork指定executable的javac名称为 java$javac.exe
<javac srcdir="${src}"
destdir="${build}"
fork="java$$javac.exe"
source="1.5"
/>
4. 将src下的java文件编译到build下去,但是只包含mypackage/p1/和mypackage/p2/下的java文件,并排除mypackage/p1/testpackage/下的文件,
<javac srcdir="${src}"
destdir="${build}"
includes="mypackage/p1/**,mypackage/p2/**"
excludes="mypackage/p1/testpackage/**"
classpath="xyz.jar"
debug="on"
/>
5. 指定使用特定的jdk来编译
<javac srcdir="${src}"
destdir="${build}"
fork="yes"
executable="/opt/java/jdk1.1/bin/javac"
compiler="javac1.1"
/>
6. 使用指定的CompilerAdapter
<javac srcdir="${src.dir}"
destdir="${classes.dir}"
compiler="org.example.MyAdapter"/>
or
<componentdef classname="org.example.MyAdapter"
name="myadapter"/>
<javac srcdir="${src.dir}"
destdir="${classes.dir}">
<myadapter/>
</javac>