乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用Ant調(diào)用系統(tǒng)命令或外部程序

       鷹皇軟件 2015-04-24

      Ant 調(diào)用系統(tǒng)命令 或外部程序


      最近用到了Ant,發(fā)現(xiàn)還是有許多功能是Ant沒有提供相應(yīng)Task支持,而操作系統(tǒng) 提供了相應(yīng)的系統(tǒng)命令。
      Ant說明書上說了,用<exec>可以調(diào)用系統(tǒng)命令,實際操作起來才發(fā)現(xiàn)陷阱可不少,一不小心就會掉下去。
      下面以按日期倒序列舉當前目錄下文件為例說明。

      對于Windows平臺,命令是:dir /o:-d

      對于Unix(包括Linux ,下同)平臺,命令是 ls –ltr


      陷阱1:調(diào)用誰?

      這在Ant文檔中已經(jīng)提到了,在Windows下,不能直接調(diào)用dir、del(因為沒有這個程序?。┑龋仨毻ㄟ^cmd.exe來調(diào)用:

      <?xml version="1.0" ?>

      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="cmd.exe">
                         <arg line="/c dir"/>
                  </exec>
           </target>
      </project>

       

      對于Unix,則可以直接調(diào)用ls:

      <?xml version="1.0" ?>
      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="ls"/>
           </target>

      </project>

      也可以指明由Shell調(diào)用

      <?xml version="1.0" ?>
      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="/bin/sh">
                         <arg line="-c ls" />
                  </exec>
           </target>
      </project>

      我覺得后者要好一些,否則無法保證調(diào)用的是否系統(tǒng)命令,
      因為只要Path環(huán)境變量指明的路徑下有一個同名的程序,都可能被調(diào)用到。
      通過Shell調(diào)用,Windows必須加 /c,Unix則是加 –c 。

       

      陷阱2:arg line, arg value 還有引號

      假如我們擴充Windows平臺下的例子,滿足按修改時間倒序的要求:
      <?xml version="1.0" ?>

      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="cmd.exe">
                         <arg line="/c dir /o-d"/>
                  </exec>
           </target>
      </project>

      成功。換Unix了:

      <?xml version="1.0" ?>
      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="/bin/sh">
                         <arg line="-c ls -ltr" />
                  </exec>
           </target>
      </project>

      對不起,失?。?a target="_self">java .lang.IOException。

      之所以這樣,是因為<arg line>把每個空格分隔的字符串作為參數(shù)傳給調(diào)用程序,
      但是對于”/bin/sh”來說,”ls –ltr”應(yīng)該是一個參數(shù)而不是兩個。
      解決辦法有兩個:

      加引號:

      <?xml version="1.0" ?>
      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="/bin/sh">
                         <arg line="-c 'ls –ltr'" />
                  </exec>
           </target>
      </project>

      或者使用<arg value>:

      <?xml version="1.0" ?>
      <project name="testExec" default="test">

           <target name="test">
                  <exec executable="/bin/sh">
                         <arg value="-c" />
                         <arg value="ls -ltr" />
                  </exec>
           </target>

      </project>

       

      陷阱3:阻塞(block)

      不論是Windows還是Unix,調(diào)用一個程序后都必須等到該操作結(jié)束才能繼續(xù)作下面的操作。
      如果你想調(diào)用一個程序的同時還做其它的工作 ,必須使用<parallel>:

      <?xml version="1.0" ?>

      <project name="testExec" default="test">
           <target name="test">
                  <exec executable="notepad.exe"/>
                  <echo message="You must close notepad first!"/>   
                  <parallel>
                         <exec executable="notepad.exe"/>
                         <echo message="You do not need to close notepad."/>
                  <parallel>
           </target>
      </project>

       

      需要注意的屬性:

      dir               指明程序執(zhí)行的路徑。對搜索程序也有影響

      os                指明執(zhí)行的平臺

      failonerror    缺省為false,即該命令執(zhí)行了但是失敗了,build仍然繼續(xù)

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多