Ant コピー タスクを OS 固有にすることはできますか?

StackOverflow https://stackoverflow.com/questions/86526

  •  01-07-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

プロパティにパスを入力し、現在の 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>

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

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

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

  </not>
</and>

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

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

型によっては変数を使って代入することはできないのでしょうか?に入れてもいいでしょう build.properties ファイル。または、を使用して割り当てることもできます 状態.

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top