Как получить локальный IP-адрес в ant 1.5.1 - PullRequest
2 голосов
/ 26 июля 2011

Мне было интересно, есть ли способ выяснить локальный IP-адрес с помощью ant.Я не могу использовать задачу hostinfo, так как я связан с ant 1.5.1.Теперь я написал бы маленькие сценарии для каждой платформы и использовал бы условную механику муравья, чтобы выполнить соответствующий сценарий для каждой платформы.Однако, может быть, кто-нибудь из вас знает более элегантный способ?Заранее спасибо.

Бенджамин

Ответы [ 4 ]

1 голос
/ 14 мая 2013
<target name="checkos">
    <condition property="isWindows" value="true">
        <os family="windows" />
    </condition>

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

<target name="if_windows" depends="checkos" if="isWindows">
    <exec executable="cmd" outputproperty="myHostName">
        <arg value="/c" />
        <arg value="hostname"/>
    </exec>

    <exec executable="cmd" outputproperty="infraServerIPTemp" >
        <arg value="/c"/>
        <arg value="FOR /f &quot;tokens=1 delims=:&quot; %d IN ('ping ${myHostName} -4 -n 1 ^| find /i &quot;reply&quot;') DO FOR /F &quot;tokens=3 delims= &quot; %g IN (&quot;%d&quot;) DO echo infraServerIP=%g > myIP.properties"/>
    </exec>

    <property file="myIP.properties"/>
</target>

<target name="if_unix" depends="checkos" if="isLinux">
    <exec executable="hostname" outputproperty="infraServer">
        <arg line="-i"/>
    </exec>
    <property name="infraServerIP" value="${infraServer}"/>
</target>

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

<target name="do-something" depends="checkOSType">

</target>
1 голос
/ 29 января 2013

Это работает на моем Mac OS X 10.8.2:

    <target name="getCurrentIP">
        <exec executable="/usr/sbin/ipconfig" outputproperty="currentIP">
            <arg value="getifaddr"/>
            <arg value="en0"/>
        </exec>
        <echo>currentIP : ${currentIP}</echo>
    </target>
0 голосов
/ 27 июля 2011

Наше решение проблемы заключается в том, что мы создали небольшую Java-программу, которая выводит локальный ip в стандартный вывод. Мы храним этот вывод в свойстве муравья. (Мы используем Java вместо какого-либо языка сценариев, потому что в противном случае нам пришлось бы развертывать языковую среду выполнения на многих системах, а Java уже развернута во всей системной среде)

0 голосов
/ 26 июля 2011

с помощью Ant-аддона Flaka вы можете использовать:

<project xmlns:fl="antlib:it.haefelinger.flaka">

<!-- on windows -->
<exec executable="cmd" outputproperty="winip">
 <arg value="/c" />
 <arg value="ipconfig" />
</exec>

<!-- simple echo -->
<fl:echo>localip => #{replace('${winip}', '$2' , '\s(IP.+):\s?(\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)')}</fl:echo>
<!-- set property -->
<fl:let>localip := replace('${winip}', '$2' , '\s(IP.+):\s?(\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)')</fl:let>

<!-- on linux -->
<exec executable="hostname" outputproperty="linuxip">
 <arg value="-i" />
</exec>

<!-- simple echo -->
<fl:echo>localip => #{replace('${linuxip}', '$1' , '(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)\s(.+)')}</fl:echo>
<!-- set property -->
<fl:let>localip := replace('${linuxip}', '$1' , '(\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b)\s(.+)')</fl:let>

</project>
...