1

ant ビルドファイルから非常に混乱した反応が返ってきて、自分が頭が悪いだけなのか、それともバグなのか疑問に思っています。

プロジェクトでグローバルに設定された次のプロパティがあります。

<property name="lib.dir" location="lib"/>

次に、ファイルセット (複数のリソース) を介して、このディレクトリから jar ファイルにいくつかのファイルを追加しようとします。

<fileset dir="${basedir}" includes="lib/*filename*"/>

そのように一致する3つの異なるライブラリが存在する必要があります。ただし、次を使用しようとすると、機能せず、ファイルが含まれません。

<fileset dir="${basedir}" includes="${lib.dir}/*filename*"/>

唯一の違いは、グローバル プロパティの使用法にあることに注意してください。簡単な質問: 最初のバージョンは宣伝どおりに機能するのに、2 番目のバージョンは機能しないのはなぜですか?

4

4 に答える 4

2

「fileset」式を使用するタスクの直前または直後に「lib.dir」の実際の値を確認してください。グローバルに設定した後に誤って変更されていないことを確認してください。<echo/>タスクが役立ちます。


多分私は解決策を得ました。location属性の説明は次のとおりです。

指定されたファイルの絶対ファイル名にプロパティを設定します。この属性の値が絶対パスの場合、変更されません (/ および \ 文字は現在のプラットフォームの規則に変換されます)。それ以外の場合は、プロジェクトの basedir に対する相対パスとして取得され、展開されます。

valueの代わりに属性を使用するだけですlocation。違いを示すテスト スクリプトを次に示します。

<project name="test">

    <property name="test1" location="lib"></property>
    <property name="test2" value="lib"></property>

    <target name="target" description="description">
       <echo>${test1}</echo>
       <echo>${test2}</echo>
    </target>

</project>

私のシステムの出力は次のとおりです。

Buildfile: D:\Develop\workspace-jabber\scrapbook\build.xml
target:
     [echo] D:\Develop\workspace-jabber\scrapbook\lib
     [echo] lib
BUILD SUCCESSFUL
Total time: 307 milliseconds
于 2010-07-20T14:50:31.633 に答える
1

答えの手がかりを見つけましたが、まだすべてではありません。

ant -debug を使用して両方のバージョンのファイルセットを実行したところ、次のようになりました。

プロパティを使用しない動作中のバージョンでは、次の出力が得られます。

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [lib/*filename*] excludes: [] }

一方、動作する必要があるが機能しないバージョンでは、次のようになります。

fileset: Setup scanner in dir [pathToDir] with patternSet{ includes: [ [pathToDir]/lib/*filename*] excludes: [] }

ご覧のとおり、ant は正規表現の [pathToDir] を追加するため、

[pathToDir]/[pathToDir]/lib/*filename*

これは明らかに存在しません。今の問題: 自分のバージョンを正しく動作させるには、どのように変更すればよいですか?

于 2010-07-20T15:20:32.030 に答える
0

上記のように、問題は ${lib.dir} にもパス全体が含まれているため、 [pathToDir]/[pathToDir]/lib/ filenameを検索することでした。

${lib.dir} プロパティの不要な [pathToDir] を削除するために、タスクを使用しました。私は今、次のようになりましたが、見栄えの良いソリューションではありません。

<basename property="lib.dir.rel" file="${lib.dir}"/>
<fileset dir="${basedir}" includes="${lib.dir.rel}/*filename*"/>

PS: もう一度見てみると、Andreas_D も正しい理由と適切な提案を昨日見つけたことがわかりました。

于 2010-07-21T11:57:41.160 に答える
0

プロパティを作成するとき (グローバルまたはターゲットで行われますか?)、ディレクトリはlib存在しますか? そうでない場合、location属性は機能しませんvalue。代わりに属性を使用するか、ディレクトリの作成後にプロパティを定義してください。

于 2010-07-20T15:01:37.800 に答える