「コピー」タスクを使用してコピー操作を実行する Ant スクリプトがあります。これは Windows 用に書かれており、'todir' 引数としてハードコードされた C:\ パスを持っています。「exec」タスクには OS 引数があるようですが、OS に基づいてコピーを分岐する同様の方法はありますか?
6 に答える
プロパティにパスを入れてから、現在の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スクリプトを編集せずにオーバーライドできます。
以前に投稿された 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>
条件タスクを使用して、antマニュアルから別のコピータスクに分岐できます。
<condition property="isMacOsButNotMacOsX">
<and>
<os family="mac"/>
<not>
<os family="unix"/>
</not>
</and>
操作のルートフォルダーである変数を宣言します。コピータスクを含め、フォルダの前にその変数を付けます。
条件を使用してOSに基づいて変数を設定するか、引数としてAntスクリプトに渡します。
変数を使用して、型に応じて割り当てることはできませんか? ファイルに入れることができbuild.properties
ます。または、条件を使用して割り当てることもできます。
Ant-contrib には <osfamily /> タスクがあります。これにより、OS のファミリーが (名前を指定した) プロパティに公開されます。これは何かの役に立つかもしれません。