web-dev-qa-db-ja.com

antを使用してOSを検出し、プロパティを設定する

OSの種類ごとに、Antタスクのプロパティを設定したい。

このプロパティはディレクトリです。Windowsでは、unix/linuxの「/ opt/flag」の「c:\ flag」になります。

現在のスクリプトは、デフォルトのターゲットで実行した場合にのみ機能しますが、なぜですか?

    <target name="checksw_path" depends="if_windows, if_unix"/>

<target name="checkos">
    <condition property="isWindows">
        <os family="windows" />
    </condition>

    <condition property="isLinux">
        <os family="unix" />
    </condition>
</target>

<target name="if_windows" depends="checkos" if="isWindows">
   <property name="sw.root" value="c:\flag" />
    <echo message="${sw.root}"/>
</target>

<target name="if_unix" depends="checkos" if="isLinux">
    <property name="sw.root" value="/opt/flag" />
    <echo message="${sw.root}"/>
</target>

私のすべてのantターゲットに「depends = checksw_path」を追加しました。

Windowsでデフォルトのターゲットを実行すると、「c:\ flag」が正しく取得されますが、デフォルト以外のターゲットを実行すると、if_windowsでデバッグが実行されますが、命令「」は残りのプロパティを設定しません/ opt/flag。 ant 1.7.1を使用しています。

42
egesuato

ターゲットはおそらく呼び出されないので、条件を<target />から移動します。

 <condition property="isWindows">
                    <os family="windows" />
 </condition>

 <condition property="isLinux">
                    <os family="unix" />
 </condition>
23
Drejc

If条件が機能するためには、プロパティに値「true」を設定する必要があります。以下のコードを参照してください。

<target name="checkos">
    <condition property="isWindows" value="true">
            <os family="windows" />
    </condition>

    <condition property="isLinux" value="true">
            <os family="unix" />
    </condition>
</target>

HTH、ハリ

12
Hari

このスクリプトを使用しましたが、うまくいきました。

<project name="dir" basedir=".">

  <condition property="isWindows">
    <os family="windows" />
  </condition>

  <condition property="isUnix">
    <os family="unix" />
  </condition>

  <target name="setWindowsRoot" if="isWindows">
    <property name="root.dir" value="c:\tmp\" />
  </target>

  <target name="setUnixRoot" if="isUnix">
    <property name="root.dir" value="/i0/" />
  </target>

  <target name="test" depends="setWindowsRoot, setUnixRoot">
    <mkdir dir="${root.dir}" />
  </target>

</project>
6
elkoo

OSに基づいて単一のプロパティを設定する場合は、タスクを作成する必要なく、直接設定することもできます。

<condition property="sw.root" value="c:\flag">
    <os family="windows" />
</condition>

<condition property="sw.root" value="/opt/flag">
        <os family="unix" />
</condition>

<property name="sw.root" value="/os/unknown/"/>
5
Roberg

Javaタスクに<sysproperty key="foobar" value="fowl"/>]を設定してみてください。その後、アプリでSystem.getProperty( "foobar");を使用します。

1
lyates

Ant Contrib を使用すると、これらの条件を追加するために宣言する必要がある要素の量を減らすことで、ビルドファイルを単純化できます。

<!--Tell Ant to define the Ant Contrib tasks from the jar-->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
        <pathelement location="path/to/ant-contrib-0.6.jar"/>
    </classpath>
</taskdef>

<!--Do your OS specific stuff-->
<target name="checkos">
    <if>
        <os family="unix"/>
        <then>
            <!--Do your Unix stuff-->
        </then>
        <elseif>
            <os family="windows"/>
            <then>
                <!--Do your Windows stuff-->
            </then>
        </elseif>
    </if>
</target>
0
Mig82

まず、オペレーティングシステム(OS)に基づいて変数をtrueまたはfalseに設定します。

<condition property="IS_WINDOWS" value="true" else="false">
   <os family="windows"/>
</condition> 

次に、変数を使用してロジックをトリガーします。そのためには、ここで答えを見つけることができます:

http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system

0
N D