2011-10-03 24 views
8

Có một phần mềm (hoặc một trình cắm thêm nhật thực), trong đó,Trình xem cây phụ thuộc mục tiêu Ant

cho một mục tiêu, sẽ cho phép tôi xem phụ thuộc mục tiêu là một cây không?

Cây không cần đồ họa, có thể dựa trên văn bản - chỉ là một công cụ có thể giúp tôi duyệt qua lưới các tệp kiến ​​của ai đó để gỡ lỗi chúng.

Không cần phải là trình cắm thêm của Eclipse. Tuy nhiên, sẽ được tốt đẹp khi một nút được nhấp sẽ ném nguồn của mục tiêu đó vào một trình soạn thảo.

Trả lời

4

Tương tự như câu hỏi ant debugging in Eclipse.

Dựa trên Apache's ANT manual, bạn có thể bắt đầu với tùy chọn -projecthelp. Nó có thể khó khăn hơn sau đó bởi vì các mục tiêu khác nhau có thể có phụ thuộc chéo và do đó không thể đại diện cho hệ thống phân cấp như là một cây ở tất cả.

Bạn có thể sửa đổi tệp build.xml để phát hiện biến môi trường, ví dụ: NO_PRINT được kiểm tra trong mỗi mục tiêu của dự án và nếu được tìm thấy, chỉ in ra tên dự án và không có gì khác. Các depencies cho dự án sẽ vẫn còn và cho phép ANT đi bộ cây và sản xuất một bản in của các mục tiêu khác nhau mà sẽ được xúc động.

+1

phải công bằng, phụ thuộc vòng tròn có thể được xử lý theo cách tương tự như Dumper dữ liệu của perl xử lý các tham chiếu vòng tròn, chỉ với một con trỏ đến lần xuất hiện có tên đầu tiên. Điều này thực sự nên là một nhiệm vụ đơn giản và được xây dựng thành kiến. –

4

tôi muốn điều tương tự, nhưng, như David, tôi đã kết thúc chỉ viết một chút mã (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

build.xml của tôi bao gồm một tệp khác, vì vậy tôi đã thêm một kiểm tra: nếu target trong target_deps: to print_target – TimP

Các vấn đề liên quan