如何在ant 1.5.1中获取本地IP地址

  • 本文关键字:IP 地址 获取 ant ant ip
  • 更新时间 :
  • 英文 :


我想知道,如果有一种方法来找出本地IP地址与蚂蚁。我不能使用hostinfo任务,因为我被绑定到1.5.1。现在我将为每个平台编写小脚本,并使用ant条件机制为每个平台执行适当的脚本。但是,你们有人知道更优雅的方式吗?提前谢谢。

便雅悯

我的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>
<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>

在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>

我们对这个问题的解决方案是,我们构建了一个小Java程序,它将本地ip打印到标准输出。我们将这个输出存储在一个ant属性中。(我们使用Java而不是某种脚本语言,因为否则我们将不得不在许多系统上部署语言运行时,而Java已经部署在我们的整个系统中)

相关内容

  • 没有找到相关文章

最新更新