2014-12-02 3 views
1

다른 매크로의 요소 내부에서 매크로를 호출하고 싶습니다.개미 중첩 매크로 호출

<macrodef name="jc"> 
    <attribute name="name" /> 
    <attribute name="destdir" /> 
    <element name="fileset-list" optional="false" /> 
    <sequential> 
     <jar destfile="@{destdir}${file.separator}@{name}.jar" update="false"> 
      <fileset-list /> 
      <manifest> 
       <attribute name="Manifest-Version" value="1.0" />  
      </manifest> 
     </jar> 
    </sequential> 
</macrodef> 

다른 매크로

<macrodef name="defaultfs" description="Defines the default fileset"> 
    <attribute name="path" /> 
    <sequential> 
     <fileset dir="${dir.build.classes}"> 
      <include name="@{path}/**/*.class" /> 
     </fileset> 
     <fileset dir="${src.ehs}"> 
      <include name="@{path}/**/icons/**" /> 
      <include name="@{path}/**/sounds/**" /> 
      <include name="@{path}/**/*.gif" /> 
      <include name="@{path}/**/*.png" /> 
      <include name="@{path}/**/*.wav" /> 
      <include name="@{path}/**/*.jpg" /> 
      <include name="@{path}/**/*.properties" /> 
      <include name="@{path}/**/*.xml" /> 
      <include name="@{path}/**/jaxb.index" /> 
     </fileset> 
    </sequential> 
</macrodef> 

나는 다음과 같이이 매크로를 사용 :

<jc destdir="${dir.build.jar}" name="thejar"> 
    <fileset-list> 
     <defaultfs path="org/path/inner" /> 
    </fileset-list> 
</jc> 

는 내가 얻을 것은 다음과 같은 오류 메시지입니다 : 의 내가 다음 매크로를 가지고 가정하자

jar doesn't support the nested "defaultfs" element. 

뭐가 잘못 됐니?

+0

"기본"XML 요소를 지원하는 "jar"ANT 작업이 작성되지 않았습니다. ANT의 매크로는 뭔가 다른데 템플릿과 비슷하게 작동합니다. –

+0

당신은 맞습니다,하지만 제 요구 사항은 더 넓은 방법으로 jc를 사용하는 것과 유사한 파일 세트로 빌드하는 jar 파일을 가지고 있습니다. 매크로는 한 번만 평가됩니까? – landal79

+0

매크로에 (암시 적) 요소 매개 변수 내에서 매크로를 사용하려는 비슷한 경우가 있습니다. 내부 매크로가 외부 매크로보다 먼저 평가되는 방법을 알아 냈는 지, 아니면 가능한지 알아 냈습니다. 이것에 대한 답을 찾을 수 있다면, 나는 확실히 관심이 있습니다! (그리고 두 개의 매크로를 결합하는 것은 답이 아닙니다. 사용자가 매크로가 아니라는 것을 알지 못해서 각각의 함수가 독립적으로 Ant 작업처럼 독립적으로 작동하기를 바랍니다. – keshlam

답변

0

당신 수 주 매크로 'JC'내 매크로 호출을 시도하고 추가 속성으로 고려하는 파일 세트 경로를 통과

<macrodef name="jc"> 
    <attribute name="name" /> 
    <attribute name="destdir" /> 
    <attribute name="fileset.path.to.consider" /> 
    <sequential> 
     <jar destfile="@{destdir}${file.separator}@{name}.jar" update="false"> 
      <defaultfs path="@{fileset.path.to.consider}"/> 
      <manifest> 
       <attribute name="Manifest-Version" value="1.0" /> 
      </manifest> 
     </jar> 
    </sequential> 
</macrodef> 

그리고 다음 주 매크로 호출처럼 볼 수 있었다 :

<jc destdir="${dir.build.jar}" name="thejar" fileset.path.to.consider="org/path/inner"/> 

(테스트하지 않았 으면 시험해 볼 수 있습니다)

+0

고맙지 만, 내가 원하는 것이 아니다. – landal79