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

时间:2012-07-17 16:09:18

标签: ant echo callstack auto-indent

对于较大的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函数。

1 个答案:

答案 0 :(得分:1)

请参阅https://ant.apache.org/manual/listeners.html

XmlLogger在那里似乎很有帮助,如果有点过于冗长 - 你可以通过一些脚本来提取调用层次结构(也有echos):

ant -logger org.apache.tools.ant.XmlLogger build

Log4j也取得了一些成功:

ant -listener org.apache.tools.ant.listener.Log4jListener -lib .... / logging-log4j-1.2.17 / dist / 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 -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
....

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