Ant:根据目标调用深度缩进回声输出



对于较大的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
....

当然,这是可以改进的,但现在对我来说已经足够了:)

最新更新