2

別のマクロの要素内からマクロを呼び出したいです。次のマクロがあるとします。

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

なにが問題ですか?

4

1 に答える 1

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

(テストされていません。試してみることができます)

于 2014-12-03T07:20:30.007 に答える