有个项目生产上抛异常不显示行数,一直是Unknown Source。查了下因为ant编译和java编译默认参数不一样:
javac编译时,默认相当于指定-g:source,lines,这样编译出来的class文件中会包含源代码和行号信息
ant编译时,默认相当于指定-g:none,这样编译出来的class文件会比较小,但是不包含任何调试信息,所以出错的时候就会打印出Unknown Source信息
解决办法,添加:
debug="true" debuglevel="source,lines,vars"
修改前:
<!--编译源文件-->
<target name="compile" depends="init">
<javac encoding="UTF-8" srcdir="${src.dir}" destdir="${build.classes}">
<classpath refid="classpath" />
</javac>
<copy todir="${build.classes}">
<fileset dir="${src.dir}" excludes="**/*.java" />
</copy>
</target>
修改后:
<!--编译源文件-->
<target name="compile" depends="init">
<javac encoding="UTF-8" srcdir="${src.dir}" destdir="${build.classes}" debug="true" debuglevel="source,lines,vars">
<classpath refid="classpath" />
</javac>
<copy todir="${build.classes}">
<fileset dir="${src.dir}" excludes="**/*.java" />
</copy>
</target>
两个参数编译后的对比:
修改前
修改后
多了行号,变量真实名称
参考资料:
https://blog.csdn.net/weixin_30731305/article/details/98762524