2010-06-21 9 views
5

Quando eseguo o in un tag, i multiplex vengono uniti insieme ai registri che mescolano l'output di ciascuna attività. Mi piacerebbe qualcosa di più facile da leggere/stroncare.Come posso ottenere ant parallelo a non multiplex/interleave le mie voci di registro?

Ho provato i seguenti approcci e sono meglio di niente, ma non sono ancora quello che sto cercando. Di seguito viene mostrato l'output del registro non interleaved alla fine del log, ma ha anche l'output combinato e misto delle due attività.

C'è un modo in cui posso comunicare SOLO al file in questione e non generare l'output del registro al chiamante?

<parallel> 
    <ant target="task1" output=${log.dir}/task1.log"/> 
    <ant target="task2" output=${log.dir}/task2.log"/> 
</parallel> 
<loadfile property="task1" srcfile="${log.dir}/task1.log"/> 
<loadfile property="task2" srcfile="${log.dir}/task2.log"/> 
<echo>Results: 
Task1: ${task1} 
--- 
Task2: ${task2} 
</echo> 
+0

Utilizzando entro impedirà interlacciamento, ma si perde sul beneficio effettivo di tasking parallelo. http://ant.apache.org/manual/Tasks/sequential.html – JoseK

risposta

3

ho due possibili soluzioni:

  • scrivere il mio compito antcall che gestisce la registrazione in modo diverso
  • dimenticare la console e utilizzare registrare per controllare registrazione in un file

Vado con la seconda perché è la più facile da implementare e perché probabilmente mi sposterò più tardi su dove risolverò questa strada in un modo diverso (ma probabilmente abbassando un modello simile)

L'attività della formica principale utilizzerà il record per attivare e disattivare la registrazione in un build.log. Prima del parallelo disattiverà la registrazione, lascerà il registro secondario ai file. Dopo aver completato la formica, verrà caricato ed emesso l'output. L'output della console continua a essere miscelato e il build.log è serializzato.

È un po 'klunk ma non male.

<project name="antExperiments" default="para" basedir="."> 

    <!-- Logging Control --> 
    <property name="build.log.dir" location="${basedir}/logs"/> 


    <!-- - - - - - - - - - - - - - - - - - 
      macro: activate logging (defaults to ${build.log.dir}/build.log)      
     - - - - - - - - - - - - - - - - - --> 
    <macrodef name="start.log"> 
     <attribute name="name" default="build"/> 
     <attribute name="dir" default="${build.log.dir}"/> 
     <attribute name="append" default="false"/> 
     <sequential> 
     <record action="start" append="@{append}" name="@{dir}/@{name}.log"/> 
     </sequential> 
    </macrodef> 

    <!-- - - - - - - - - - - - - - - - - - 
      macro: deactivate logging (defaults to ${build.log.dir}/build.log)      
     - - - - - - - - - - - - - - - - - --> 
    <macrodef name="stop.log"> 
     <attribute name="name" default="build"/> 
     <attribute name="dir" default="${build.log.dir}"/> 
     <attribute name="append" default="false"/> 
     <sequential> 
     <record action="stop" append="@{append}" name="@{dir}/@{name}.log"/> 
     </sequential> 
    </macrodef> 

    <target name="clean"> 
     <delete dir="${build.log.dir}"/> 
     <mkdir dir="${build.log.dir}"/> 
    </target> 

    <!-- - - - - - - - - - - - - - - - - - 
      target: main.init 
      Initialization for Top Level build - not used by subants      
     - - - - - - - - - - - - - - - - - --> 
    <target name="main.init"> 
     <start.log/> 
    </target> 

    <!-- ================================= 
      target: para 
      top level build runs 2 jobs in parallel producing interleaved hard to read 
      on to standard output and non interleaved more easily understood logging 
      to build.log 
     ================================= --> 
    <target name="para" depends="main.init,clean"> 
     <stop.log/> <!-- disable top level logging --> 
     <parallel threadcount="4" pollinterval="50"> 
      <ant output="${build.log.dir}/proc1.log" target="proc1"> 
       <property name="proc" value="proc1"/> 
      </ant> 
      <ant output="${build.log.dir}/proc2.log" target="proc2"> 
       <property name="proc" value="proc2"/>      
      </ant> 
     </parallel> 
     <start.log/> <!-- enable top level logging --> 

     <!-- Non interleaved output --> 
     <loadfile property="p1" srcfile="${build.log.dir}/proc1.log"/> 
     <loadfile property="p2" srcfile="${build.log.dir}/proc2.log"/> 
     <echo> 
-------------------------- 
BuildJob: proc1   
OUTPUT: ****************** 
${p1} 
************************** 
-------------------------- 
BuildJob: proc2   
OUTPUT: ****************** 
${p2} 
************************** 


BUILD LOG: ${build.log.dir}/build.log   
</echo>  
    </target> 


    <target name="init"> 
     <echo>Init called by ${proc}</echo> 
    </target> 

    <target name="proc1" depends="init"> 
     <echo>PROC1....................... 
     </echo> 
     <exec dir="${basedir}" executable="cmd"> 
      <arg line="/c dir \"/> 
     </exec> 
    </target> 
    <target name="proc2" depends="init"> 
     <echo>PROC2..........2222222....... 
     </echo> 
     <exec dir="${basedir}" executable="cmd"> 
      <arg line="/c dir \sandbox"/> 
     </exec> 
    </target> 
</project> 
Problemi correlati