19

「コピー」タスクを使用してコピー操作を実行する Ant スクリプトがあります。これは Windows 用に書かれており、'todir' 引数としてハードコードされた C:\ パスを持っています。「exec」タスクには OS 引数があるようですが、OS に基づいてコピーを分岐する同様の方法はありますか?

4

6 に答える 6

31

プロパティにパスを入れてから、現在のOSに基づいて条件付きでプロパティを設定することをお勧めします。

<condition property="foo.path" value="C:\Foo\Dir">
   <os family="windows"/>
</condition>
<condition property="foo.path" value="/home/foo/dir">
   <os family="unix"/>
</condition>

<fail unless="foo.path">No foo.path set for this OS!</fail>

副次的な利点として、プロパティに入ると、Antスクリプトを編集せずにオーバーライドできます。

于 2008-09-17T19:21:47.490 に答える
6

以前に投稿された OS 固有の変数の提案は機能しますが、多くの場合、"C:" プレフィックスを省略してスラッシュ (Unix スタイル) のファイル パスを使用するだけで、Windows システムと Unix システムの両方で機能します。

したがって、Windows では「C:/tmp」に、Unix では「/tmp」にファイルをコピーする場合は、次のようにします。

<copy todir="/tmp" overwrite="true" >
         <fileset dir="${lib.dir}">
             <include name="*.jar" />
         </fileset>
</copy>

OS に基づいて条件付きパスを設定する必要がある場合は、次のように簡略化できます。

    <condition property="root.drive" value="C:/" else="/">
        <os family="windows" />
    </condition>
    <copy todir="${root.drive}tmp" overwrite="true" >
             <fileset dir="${lib.dir}">
                 <include name="*.jar" />
             </fileset>
    </copy>
于 2008-09-24T12:56:21.077 に答える
2

条件タスクを使用して、antマニュアルから別のコピータスクに分岐できます。

<condition property="isMacOsButNotMacOsX">
<and>
  <os family="mac"/>

  <not>
    <os family="unix"/>

  </not>
</and>

于 2008-09-17T19:18:49.807 に答える
1

操作のルートフォルダーである変数を宣言します。コピータスクを含め、フォルダの前にその変数を付けます。

条件を使用してOSに基づいて変数を設定するか、引数としてAntスクリプトに渡します。

于 2008-09-17T19:20:41.330 に答える
1

変数を使用して、型に応じて割り当てることはできませんか? ファイルに入れることができbuild.propertiesます。または、条件を使用して割り当てることもできます。

于 2008-09-17T19:18:37.310 に答える
0

Ant-contrib には <osfamily /> タスクがあります。これにより、OS のファミリーが (名前を指定した) プロパティに公開されます。これは何かの役に立つかもしれません。

于 2009-06-23T21:44:28.510 に答える