2011-10-03 17 views
8

C'è un pezzo di software (o di un plug-in di Eclipse), che,Ant bersaglio dipendenza albero spettatore

dato un obiettivo, mi permettesse di visualizzare il bersaglio di dipendenza come un albero?

L'albero non ha bisogno di essere grafico, potrebbe essere basato sul testo - solo uno strumento che mi aiuterebbe a attraversare la mesh di file di form di qualcuno per eseguirne il debug.

Non è necessario essere un plug-in Eclipse. Tuttavia, sarebbe bello quando si fa clic su un nodo per gettare la fonte di quel target su un editor.

risposta

4

Simile alla domanda ant debugging in Eclipse.

In base a Apache's ANT manual, è possibile iniziare con l'opzione -projecthelp. Dopo di ciò potrebbe essere più difficile perché i vari target potrebbero avere dipendenze incrociate e quindi essere impossibile rappresentare la gerarchia come un albero.

È possibile modificare il file build.xml per rilevare una variabile di ambiente, ad es. NO_PRINT testato in ciascun target di progetto e, se trovato, stampa solo il nome del progetto e nient'altro. Le spese per il progetto rimarrebbero e permetteranno ad ANT di camminare sull'albero e produrre una stampa dei diversi bersagli che sarebbero stati toccati.

+1

ad essere onesti, le dipendenze circolari possono essere gestiti in modo analogo Il Dumper di dati di Perl gestisce i riferimenti circolari, solo con un puntatore alla prima occorrenza nominata. Questo in realtà dovrebbe essere un compito semplice e integrato nella formica. –

4

ho voluto la stessa cosa, ma, come David, ho finito solo la scrittura di un po 'di codice (Python):

from xml.etree import ElementTree 

build_file_path = r'/path/to/build.xml' 
root = ElementTree.parse(build_file_path) 

# target name to list of names of dependencies 
target_deps = {} 

for t in root.iter('target'): 
    if 'depends' in t.attrib: 
    deps = [d.strip() for d in t.attrib['depends'].split(',')] 
    else: 
    deps = [] 
    name = t.attrib['name'] 
    target_deps[name] = deps 

def print_target(target, depth=0): 
    indent = ' ' * depth 
    print indent + target 
    for dep in target_deps[target]: 
    print_target(dep, depth+1) 

for t in target_deps: 
    print 
    print_target(t) 
+0

Il mio build.xml ne include un altro, quindi ho aggiunto un controllo: se target in target_deps: to print_target – TimP

Problemi correlati