3

私はかなり単純なことをしようとしています: パスまたは dirset を取り、その各要素を拡張して新しいパスを取得します。たとえば、次を含むパスがあるとします

c:\foo\plugins\com.foo.bar
c:\foo\plugins\com.baz.quux

私は新しいパスを取得したい:

c:\foo\plugins\com.foo.bar\src
c:\foo\plugins\com.baz.quux\src

私は実際には、最初のパスに dirset に基づくパスを使用し、次に a を使用し<mappedresources>て 2 番目のパスを取得していますが、2 番目のパスは常に次のように切り捨てられます。

com.foo.bar\src
com.baz.quux\src

デバッグを簡素化するために、パスを削除し、dirset をマップされたリソースに貼り付けてから、デバッグ出力に pathconvert マクロ定義を使用します。また、使用していた globmapper (* を */src にマッピングするため) を<identitymapper>、globmapper であるかどうかを確認するためだけに置き換えました。そうではありませんでした。

一言で言えば、私はこれを持っています:

<mappedresources id="src.resources">
  <dirset dir="c:\foo">
    <include name="com.*"/>
  </dirset>
  <identitymapper/>
</mappedresources>

これをパス変換でダンプすると、次のようになります

com.foo.bar
com.baz.quux

(繰り返しますが、これはデバッグです。オリジナルでは globmapper を使用し、同じリストを取得しますが、「/src」が追加されていますが、globmapper を identitymapper に置き換えています)

ここで、mappedresources を regular<resources>に置き換えると、完全なパスが得られます

<resources id="src.resources">
  <dirset dir="c:\foo">
    <include name="com.*"/>
  </dirset>
</resources>

次に、ダンプ時に完全なパスを取得します。

c:\foo\plugins\com.foo.bar
c:\foo\plugins\com.baz.quux

なんで?

Ant マッパーのドキュメントには、globmapper と ID マッパーの両方を使用してフル パスをフル パスにマッピングする例が明確に示され、<flatten>マッパーがこのようなことを行うことのみが示されています。では、なぜここでそれが起こっているのですか?

これに失敗した場合、別のパスのすべての要素を含むが、このような追加のディレクトリで拡張されたパスを取得するより良い方法はありますか?

最後の注意: これらのパスはカスタム タスクで使用しており、<copy>マッパーを直接使用するタスクやその他のタスクでは使用していません。これはタスクで直接発生しないと想定していますが、まだテストしていません。

4

0 に答える 0