2011-08-02 2 views
4

나는 개미에 정의 된 확장 지점이 있습니다개미 확장 점의 "그래프"호출을 표시 할 수 있습니까?

<extension-point name="foo"/> 

작업의 많은 여러 수입 개미 파일에이 점에 기여 :

<bindtargets targets="bar" extensionPoint="foo" /> 

내가 좀 잃었어요 그러나 정확하게하는 등 작업이 기여하고 있습니다. 주어진 확장 점에 의해 트리거되는 작업을 Ant에보고 할 수있는 방법이 있습니까? 더 일반적으로, 개미 작업의 "call-graph"(또는 간단히 의존성 목록)을 표시하는 방법이 있습니까?

개미 (-v 등)에 대한 자세한 옵션을 사용하여 운이 좋았습니다.

감사

모든

답변

0

첫째, 당신은 (광산 ~/.profile에 설정됩니다) ANT_OPTS에 일부 매개 변수를 추가하여 원격 디버깅을 사용하여 IDE에서 ANT 프로세스를 디버깅하려고 할 수 있습니다

http://blog.dahanne.net/2010/06/03/debugging-any-java-application/

프로파일 링이 도움이 될 수 있습니다. 나는 http://sourceforge.net/projects/antro

어쩌면 당신이 그것을 시도 할 수 ... ANT 위키에 프로젝트 Antro을 발견했다. 이 프로젝트는 귀하의 문제를 해결하는 데 유망한 ANT 용으로 설계되었다고합니다.

또한 Yourkit Java Profiler를 사용하여 CPU 프로파일 링을 수행 할 수 있습니다. YJP는 Java 응용 프로그램의 호출 그래프를 표시 할 수 있지만 ANT 대상을 찾을 수 있는지는 확실하지 않습니다.

다음 문서는 YJP 에이전트로 Java 응용 프로그램을 시작하는 방법을 보여줍니다.

http://www.yourkit.com/docs/95/help/agent.jsp

0

는이 정보를 얻을 수있는 두 가지 방법을 알고 :

  1. 당신은 개미의 콘솔 로거에서 유효 대상/확장 점 호출 순서를 얻을 수 있습니다. 이를 수행하려면 명령 행에 -verbose을 Ant에 전달하여 Ant의 로깅 기능을 상세 모드로 설정하십시오. 그들은 당신의 빌드 스크립트에서 호출로 바로 대부분의 표적 전에 콘솔에 덤프 두 줄, 하나씩은있다 :

    • 로 시작하는 전화 순서에서 대상의 요약을 표시하는 라인 텍스트, Build sequence for target(s) 'artifact' is [...].
    • 자세한 호출 순서를 나타내는 줄 (중첩 된 대상 및 antcalls 포함). 이 행은 Complete build sequence is [...] 텍스트로 시작합니다. 이 목록은 합리적으로 가능한 한 많은 행이 콘솔에 기록되는 지점에 나열된 각 대상의 ifunless 속성의 평가를 고려합니다.

    일반적으로 -verbose 옵션을 사용하는 것처럼 Ant 빌드를 호출하기 만하면 콘솔에 원하는 정보가 있어야합니다.

  2. Grand이라는 도구를 사용하여 호출 순서를 그림으로 나타낼 수 있습니다. 그러나, 꽤 오랫동안 업데이트되지 않았기 때문에 확장 점을 지원하지 않습니다 (여기서 당신이 여기에 관심을 가지고 있습니다). antcall's, antdepend'encies이 해석됩니다. ifunless 속성을 평가하지는 않지만 잠재적 인 실행 순서 - 실제 호출 그래프보다 종속성 계층 구조를 더 많이 식별합니다. 프로젝트가 Github에 있으므로 확장 점을 지원하는 업데이트가 너무 어려울 수 없습니다.

    그래픽은 Graphviz을 사용하여 렌더링됩니다. 실제 호출 시퀀스

은이 꽤 실수입니다 옵션 1.

0

를 사용하지만, 그것을 작동합니다. Ant는 실제로 매우 쉽게 스크립팅됩니다. Java 6 이상 (또는 Java 7 일 수도 있음)을 사용하는 경우 JavaScript 지원이 내장되어 있으므로 즉시 사용할 수 있습니다.

귀하의 경우에는
<scriptdef name="listdepends" language="javascript"> 
    <attribute name="target"/> 
    <![CDATA[ 
     var done = []; 
     var echo = project.createTask("echo") 
     function listdepend(t) { 
      done.push(t.getName()); 
      var depends = t.getDependencies(); 
      while (depends.hasMoreElements()) { 
       var t2 = depends.nextElement(); 
       if (done.indexOf(t2)==-1) listdepend(project.getTargets().get(t2)); 
      } 
      echo.setMessage(t.getName()); 
      echo.perform();    
     } 
     var t = attributes.get("target"); 
     if (t!=null) { 
      var targ = project.getTargets().get(t); 
      listdepend(targ); 
     } 
    ]]> 
</scriptdef> 

, 당신은 새로운 목표를 만들 (여부) 수 등과 같이 호출 :

<target name="listfoo"> 
     <listdepends target="foo"/> 
    </target> 

을이 호출 순서에 따라 모든 대상의 종속성을 반향하는 작업을 정의 내가 말했듯이, 이것은 다소 어색하다. 매우 빠르지는 않을 것입니다 (대상이 수천 가지를 유발하지 않으면 눈에 띠게 느리지는 않을지라도). antcall 작업은 처리하지 않지만 (쉽게 수정할 수는 있지만) 또는 if 및 unless 속성에 응답합니다. 의존성이 너무 깊게 중첩되면 재귀 심도 한계에 도달 할 수 있습니다 (그러나 어떤 프로젝트라도 깊이 중첩되는 것은 의심 스럽습니다).

이 배열은 각 종속성이 한 번 나열되어 있는지 확인하는 데 사용됩니다 (ant는 한 번만 실행합니다).

관련 문제