8

IS there a piece of software (or an eclipse plug-in) which,

given a target, would allow me to view the target dependency as a tree?

The tree does not need to be graphical, could be text based - just a tool that would help me traverse thro someone's mesh of ant files to debug them.

Does not need to be an Eclipse plug-in. However, would be nice when a node is clicked would throw the source of that target onto an editor.

Blessed Geek
  • 21,058
  • 23
  • 106
  • 176

2 Answers2

5

I wanted the same thing, but, like David, I ended up just writing a bit of code (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)
user3286293
  • 556
  • 7
  • 4
  • My build.xml includes another, so I added a check: if target in target_deps: to print_target – TimP May 15 '14 at 17:28
4

Similar to question ant debugging in Eclipse.

Based on Apache's ANT manual, you can start with the -projecthelp option. It might be more difficult after that because the various targets may have cross-dependencies and thus be impossible to represent the hierarchy as a tree at all.

You could modify the build.xml to detect an environment variable, e.g. NO_PRINT which is tested in each project target and if found, only print out the project name and nothing else. The depencies for the project would remain and allow ANT to walk the tree and produce a printout of the different targets that would get touched.

Community
  • 1
  • 1
Kelly S. French
  • 12,198
  • 10
  • 63
  • 93
  • 1
    to be fair, circular dependencies can be handled in the same way as perl's data dumper handles circular references, just with a pointer to the first named occurrence. This actually should be a straightforward task and built into ant. – David Williams Jan 27 '14 at 18:44