Antlibで定義されたApache Antマクロ内のリソースにアクセスすることは可能ですか?AntlibリソースへのアクセスApache Antマクロから
たとえば、私のantlib.xml
の中に、私はいくつかのXSLTを実行するマクロを持っています。理想的には、XSLTファイルをantlib.xml
と同じJARにパッケージしたいと思いますが、XSLTの場所を指定する方法はわかりません。問題は、どのような私はstyle
属性がにantlibを使用してプロジェクトのためのbasedir
に相対的であると私はにどのような方法を見つけることができないで置くということです
<antlib xmlns:tibant="antlib:org.windyroad.tibant">
<macrodef name="configure-ear">
<attribute name="xml" />
<attribute name="out" />
<sequential>
<xslt in="@{xml}"
out="@{out}"
style="...what to put here...">
</xslt>
</sequential>
</macrodef>
</antlib>
:ここ
は(簡体字)のコードですantlib.xmlに相対的なパスを指定します。
アイデア?
私はXSLTを別のファイルとして出荷することができますが、ユーザーにXSLTの場所を指定する方法を教えてください。これは理想的ではありません(tibant.home
プロパティの設定など)。また、echoxml
を使用してXSLTを一時ファイルに書き出すこともできますが、IMOはハックです。
ありがとうございました。私はそれを働かせようとしていますが、明示的にクラスパスを指定しない限り、xsltを見つけることができません。私はどうやって行くのか教えてくれます。 –
@Tom Ohクラスローディングの楽しさ! 'javaresource'はantlibのクラスローダーではなく、antlibの中でコアのantクラスローダーをデフォルトで使用しているようですが、これは私が正しいと思っていたものです。バグとして報告する価値があるかもしれません。 – matt
@Tom潜在的な回避策のいくつか:ant libディレクトリの1つにjarファイルを置くか、antに '-lib'オプションを指定してantに依存するantlib uri名前空間宣言からantlibを自動的に探します(これは私がやったことですそれが私のために働くように思われた理由です)。その後、everthingはコアクラスローダーを使用します。あるいは、 'taskdef'と' javaresource'に 'loaderRef'属性を使います。両方とも同じ文字列を使用するようにしなければなりませんが、antlibの 'javaresource'にクラスパスを指定する必要はありません。 – matt