java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

ant编译发生warning: ‘includeantruntime’ was not set,

执行ant编译时,总会出现如下的警告:
[javac] D:\SnowPad\build.xml:26: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
虽然不影响编译,但还是解决才安心。其实解决方法也很简单,只需要根据提示在javac任务中添加includeAntRuntime="false"属性即可。例如:
修改前:

修改后:

    

注:
1.对于includeAntRuntime属性,官方的解释如下:
Whether to include the Ant run-time libraries in the classpath; defaults to yes, unless build.sysclasspath is set. It is usually best to set this to false so the script's behavior is not sensitive to the environment in which it is run.
2.此警告在较早的ant版本中可能不会出现,当前用的版本是:Apache Ant(TM) version 1.8.2 compiled on December 20 2013。所以此问题跟ant版本有关。

javac命令支持的参数:
Attributes Description
srcdir :必须的,除非嵌套有标签。包含源文件的文件夹
bootclasspath:编译过程中需要导入class文件会被导入
bootclasspathref:编译过程中需要引用的class文件夹目录
classpath:The class path to use.文件夹中class会被导入的jar包
classpathref:文件夹中class文件会被引用的jar包
compiler :指定要使用的编译器。如果未设置该特性,将使用 build.compiler 属性的值(如果设置)。否则,将使用当前VM 的默认编译器。
例子:设置环境变量 JIKESHOME 为 jikes 的路径
设置 ANT_OPTS=-Dbuild.compiler=jikes
将 jikes 路径添加到系统 PATH 中
然后在所有的ant任务就默认使用 jikes 了,如果你想在单个工程中使用 ant, 就不要添加 ANT_OPTS环境变量, 只需要修改 build.xml 中 javac 标签中的 compiler 为jikes
debug:当值未为true时产生调试信息
debuglevel:相当于命令行中要追加到 -g 命令行开关后面的关键字列表。这将会被除 modern 和 classic(ver>= 1.2) 以外的所有实现忽略。合法值是 none 或下列关键字的逗号分隔列表:lines、vars和 source。如果不指定 debuglevel,则默认情况下,将不会在-g 的后面追加任何关键字。如果不打开 debug,该特性将被忽略。
depend:这个任务依赖的任务。当运行这个任务时,首先按照顺序依次执行完依赖的任务,如果出错将停止执行
deprecation: 假如为真,将会给出不建议使用的API,默认值false
destdir: 编译后文件存放的目标文件夹,默认是当前文件夹。
encoding:指定编码格式
excludes:必须排除的文件模式的列表,以逗号或空格分隔。如果忽略,将不会排除任何文件(默认排除的文件除外)。
excludesfile: 该文件的每一行都将作为一个 exclude 模式。
extdirs: Specifies an alternative location of installed extensionsthat overrides the default.
failonerror: 指定 clientgen Ant 任务在出现错误的情况下是否继续执行。此特性的有效值为 True 或 False。默认值为True,这意味着即使遇到错误也要继续执行。
fork: 为true时在外部启用一个新的JDK编译器进程执行编译。默认值是true,应用在需要配置编译器运行时环境时
includeantruntime :指出是否应在类路径中包括 Ant 运行时程序库,默认为yes。
includejavaruntime: 指出是否应在类路径中包括来自执行 VM 的默认运行时程序库,默认为no。
includes:必须包括的文件模式的列表,以逗号或空格分隔。如果忽略,将包括所有文件。
includesfile: 文件名。该文件的每一行都将作为一个 include 模式。
listfiles: 为真时显示被编译文件列表,默认为false
memoryinitialsize 如果 javac 在外部运行,则是底层 VM 的初始内存大小;否则将被忽略。默认为标准 VM内存设置。(例如:83886080、81920k 或 80m)
memorymaximumsize: 如果 javac 在外部运行,则是底层 VM 的最大内存大小;否则将被忽略。默认为标准 VM内存设置。(例如:83886080、81920k 或 80m)
nowarn: 为真时将忽略所有警告信息
optimize: 指出是否应该用优化方式编译源代码,默认为 off。
source: 假如设置为1.4,将激活断言。默认是1.3
sourcepath: 指定源资源文件夹。默认指向srcdir
sourcepathref: 指定你想引用资源
target: Specifies the VM version to generate class files for (forexample, 1.1 or 1.3).
verbose: 控制生成消息的输出量。
当通过日志文件分析异常原因时,UnknownSource通常比较令人郁闷,郁闷程度与出错方法中行数成正比。
其实出现Unknown Source的原因是在编译时没有指定相应的选项,具体可以参见javac-g系列参数的帮助。当通过javac编译时,默认相当于指定-g:source,lines,这样编译出来的class文件中会包含源代码和行号信息;而通过ant编译时,默认相当于指定-g:none,这样编译出来的class文件会比较小,但是不包含任何调试信息,所以出错的时候就会打印出上面的错误堆栈信息。
如果要改变ant javac task的编译效果,可以更改其debug和debuglevel属性,参见:http://ant.apache.org/manual/CoreTasks/javac.html。
以下列出了用不同的-g参数编译同一java文件并运行的效果:
-g:none
Exception in thread "main" java.lang.RuntimeException
atTest.main(Unknown Source)
-g:source
Exception in thread "main" java.lang.RuntimeException
atTest.main(Test.java)
-g:source,lines
Exception in thread "main" java.lang.RuntimeException
atTest.main(Test.java:4)
-g:all 或 -g:source,lines,vars
运行效果等价于-g:source,lines,但是反编译生成的class文件,可以看到局部变量名也能正常的识别出应该根据程序的部署环境来更改编译参数,比如server端的代码应该加上-g:source,lines,以便通过日志文件正确分析。


This entry was posted in JAVA and tagged , , , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/ant-code-javac/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply