对于较大的ant构建结构和相当复杂的项目,我想根据目标调用深度来缩进信息输出(echo),如:
[echo] running build from project/build.xml
[echo] running build from project/sub1/build.xml
[echo] running build from project/sub2/build.xml
[echo] running build from project/sub2/sub21/build.xml
[echo] running build from project/sub2/sub22/build.xml
[echo] running build from project/sub3/build.xml
BUILD SUCCESSFUL
Total time: x seconds
是否存在这样的调整、日志记录属性或其他内容?…可能是xslt/css还是事件侦听器?
缩进不是重点,而是查看调用层次结构:避免搜索build.xml文件或在所有目标和宏定义中添加自己的echo函数。
请参阅https://ant.apache.org/manual/listeners.html
XmlLogger似乎很有帮助,如果有点过于冗长的话——你可以通过一些脚本提取调用层次结构(也有echos):
ant-logger org.apache.tools.ant.XmlLogger构建
Log4j:也取得了一些成功
ant-listener org.apache.tools.ant.listener.Log4j listener-lib/logging-log4j-1.2.17/list/lib/-lib。构建
为此,我在当前目录中放置了一个log4j.properties文件,使用上面第一个链接中的示例内容。这将生成一个包含以下内容的build.log:
[ 0] Project : Build started.
[ 908] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 995] Target : Target "build" started.
[ 4312] Echo : com.ohmy: ivy.sorted.modules=thirdparty-plugins#com.sun.jaxb
[ 4529] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 4588] Target : Target "build_empty_unittests_jar_to_fulfill_dependencies" started.
[ 4590] Target : Target "build_empty_unittests_jar_to_fulfill_dependencies" finished.
[ 4591] Target : Target "build_nodeps" started.
[ 4591] Echo : Calling target 'build' for module com.sun.jaxb
[ 4770] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 4846] Target : Target "check_module_targets_file_exists" started.
[ 4847] Target : Target "check_module_targets_file_exists" finished.
[ 4847] Target : Target "check_module_target_exists" started.
[ 4847] Target : Target "check_module_target_exists" finished.
现在我只需要把它输入到小ruby中,一行代码就可以缩进:
ruby -pe 'BEGIN {$i=0};$i-=1 if /finished.$/;print " " * $i;$i+=1 if /started.$/' build.log
产生
[ 0] Project : Build started.
[ 908] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 995] Target : Target "build" started.
[ 4312] Echo : com.ohmy: ivy.sorted.modules=thirdparty-plugins#com.sun.jaxb, com.ohmy
[ 4529] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 4588] Target : Target "build_empty_unittests_jar_to_fulfill_dependencies" started.
[ 4590] Target : Target "build_empty_unittests_jar_to_fulfill_dependencies" finished.
[ 4591] Target : Target "build_nodeps" started.
[ 4591] Echo : Calling target 'build' for module com.sun.jaxb
[ 4770] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 4846] Target : Target "check_module_targets_file_exists" started.
[ 4847] Target : Target "check_module_targets_file_exists" finished.
[ 4847] Target : Target "check_module_target_exists" started.
[ 4847] Target : Target "check_module_target_exists" finished.
[ 4847] Target : Target "module_target" started.
[ 4847] Target : Target "module_target" finished.
[ 4847] Target : Target "default_target" started.
[ 4849] Target : Target "init" started.
[ 4850] Target : Target "check_module_ivy_file_uptodate" started.
[ 4858] Target : Target "check_module_ivy_file_uptodate" finished.
[ 4858] Target : Target "create_module_ivy_file" started.
[ 4858] Target : Target "create_module_ivy_file" finished.
[ 4859] Target : Target "check_build_file_uptodate" started.
[ 4862] Target : Target "check_build_file_uptodate" finished.
[ 4864] Target : Target "generate_module_build_file" started.
[ 4864] Target : Target "generate_module_build_file" finished.
[ 4865] Target : Target "update_module_build_file" started.
[ 4866] Target : Target "check_module_name" started.
[ 4868] Target : Target "check_module_name" finished.
[ 4869] Target : Target "check_manifest_version" started.
[ 4869] Echo : Calling target 'check_manifest' for module com.sun.jaxb
[ 5041] Taskdef : Could not load definitions from resource checkstyletask.properties. It could not be found.
[ 5065] Target : Target "check_module_targets_file_exists" started.
[ 5065] Target : Target "check_module_targets_file_exists" finished.
[ 5065] Target : Target "check_module_target_exists" started.
[ 5065] Target : Target "check_module_target_exists" finished.
[ 5065] Target : Target "module_target" started.
[ 5065] Target : Target "module_target" finished.
[ 5066] Target : Target "default_target" started.
[ 5066] Target : Target "default_check_manifest" started.
[ 5067] Target : Target "default_check_manifest" finished.
[ 5067] Target : Target "default_target" finished.
[ 5067] Target : Target "module_specific_target" started.
[ 5067] Target : Target "module_specific_target" finished.
[ 5068] Target : Target "check_manifest_version" finished.
[ 5068] Target : Target "update_module_build_file" finished.
[ 5069] Target : Target "ivy_retrieve" started.
[ 5069] Echo : Skipping 'ivy_retrieve' as everything is uptodate for com.sun.jaxb
....
当然,这是可以改进的,但现在对我来说已经足够了:)