5

「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>

両方のマクロ定義に対して同じ方法で要素に名前を付ける方法はありますか?

4

2 に答える 2

0

どうやら、解決策は<libs>、マクロのネストの深さに応じて、元の呼び出しで追加の要素をラップしているようです。もちろん、呼び出し時にマクロのネストの深さがわかっている必要があるため、これは恐ろしい解決策です。たとえば、次のようになります。

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

残念ながら、この問題に対処するAnt バグ 29153は無効として解決されました:(.

于 2014-08-01T08:00:33.010 に答える
0

パスIDを使用して元の問題を解決する私の質問に対する解決策を見つけました

<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>

現在、これはネストされた要素タグの問題を解決していませんが、(XY 問題) は実際の問題を解決しています。元の質問に似たことが可能かどうかを知っておくといいでしょう。

于 2011-11-17T14:32:41.100 に答える