муравьиные макроопределения и именование элементов - PullRequest
5 голосов
/ 17 ноября 2011

У меня есть макроопределение с элементом "libs"

<macrodef name="deploy-libs">
    <element name="libs"/>
    <sequential>
        <copy todir="${glassfish.home}/glassfish/domains/domain1/lib">              
            <fileset dir="${lib}">
                <libs/>
            </fileset>
        </copy>
    </sequential>
</macrodef>

, которое затем вызывается как

<deploy-libs>
    <libs>
        <include name="mysql-connector-*.jar"/>
        <include name="junit-*.jar" />
        <!-- .... -->
    </libs>
</deploy-libs>

Затем у меня есть другой макроопределение, которое вызывает несколько макроопределений, включая "deploy"-libs».Было бы неплохо, если бы в этом макросе тоже был элемент "libs", но:

<macrodef name="init-glassfish">
    <element name="libs"/>
    <sequential>

        <!-- other stuff -->

        <deploy-libs>
            <libs>
                <libs/>
            </libs>
        </deploy-libs>

        <!-- other stuff -->

    </sequential>
</macrodef>

явно не работает (из-за <libs><libs/></libs>):

Commons/ant-glassfish-server.xml:116: unsupported element include

Решение может бытьчтобы назвать элемент в "init-glassfish" по-другому:

<macrodef name="init-glassfish">
    <element name="libraries"/>
    <sequential>

        <!-- other stuff -->

        <deploy-libs>
            <libs>
                <libraries/>
            </libs>
        </deploy-libs>

        <!-- other stuff -->

    </sequential>
</macrodef>

Есть ли способ, чтобы элемент был назван одинаково для обеих макросов?

Ответы [ 2 ]

0 голосов
/ 01 августа 2014

Очевидно, что решение заключает в себе дополнительные элементы <libs> в исходном вызове, в зависимости от того, насколько глубоко гнездятся макросы. Конечно, это ужасное решение, потому что оно требует, чтобы глубина вложенности макросов была известна при вызове, например ::10000

<deploy-libs>
  <libs>
    <libs>
      <include name="mysql-connector-*.jar"/>
      <include name="junit-*.jar" />
      <!-- .... -->
    </libs>
  </libs>
</deploy-libs>

Муравьиная ошибка 29153 решение этой проблемы, к сожалению, было решено как недействительно : ((.

0 голосов
/ 17 ноября 2011

Я нашел решение моего вопроса, которое решает исходную проблему, используя путь с идентификатором

<macrodef name="deploy-libs">

    <attribute name="libraries-path-refid"/>

    <sequential>
         <copy todir="${glassfish.home}/glassfish/domains/domain1/lib">             
            <path refid="@{libraries-path-refid}"/>
         </copy>
    </sequential>
</macrodef>

Теперь это не решает проблему с вложенными тегами elements , но (проблема XY) решает практическую проблему. Было бы еще интересно узнать, возможно ли что-то похожее на исходный вопрос.

...