2012-08-27 2 views
0

Я пытаюсь найти путь к исполняемому файлу (в Linux) с помощью ant (аналогично команде «which»). Например:Ant 'which' command

which ls 

выход:

/bin/ls 

Он не может найти файловую систему, он должен искать $ PATH.

До сих пор все, что я видел, это то, что скрипты с jython будут работать, но мне было интересно об альтернативах, поскольку jython, похоже, требует установки (я бы предпочел избежать этого). Какие-либо предложения?

+1

Есть причина, вы не можете просто использовать задачу и вызов «который» напрямую? –

ответ

3

Вы можете встроить скриптовый язык в свой скрипт сборки.

В следующем примере используется плющ для загрузки необходимых зависимостей, а также должны работать на окнах:

<project name="ANT which" default="which" xmlns:ivy="antlib:org.apache.ivy.ant"> 

    <description> 
    ANT example that simulates the unix "which" command 

     $ ant -Dwhich.cmd=ls 

     which: 
     Found /bin/ls 
    </description> 

    <!-- 
    Properties 
    --> 
    <property environment="env"/> 
    <property name="which.cmd" value="ls"/> 

    <!-- 
    Bootstrap the build for ANT installations without ivy pre-installed 
    --> 
    <target name="bootstrap" description="Install ivy"> 
     <mkdir dir="${user.home}/.ant/lib"/> 
     <get src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0-rc1/ivy-2.3.0-rc1.jar" dest="${user.home}/.ant/lib/ivy.jar"/> 
    </target> 

    <!-- 
    Download groovy 
    --> 
    <target name="resolve" description="Resolve build dependencies"> 
     <ivy:cachepath pathid="build.path"> 
      <dependency org="org.codehaus.groovy" name="groovy-all" rev="2.0.1" conf="master"/> 
     </ivy:cachepath> 

     <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/> 
    </target> 

    <!-- 
    Parse the PATH variable and determine if the command is available 
    --> 
    <target name="which" depends="resolve" description="ANT which command"> 
     <groovy> 
      <arg value="${which.cmd}"/> 

      def sepchar = properties["path.separator.ivy.instance"] 

      properties["env.PATH"].split(sepchar).each { 
       def dir = new File(it) 

       if (dir.exists()) { 
        dir.eachFileMatch(~/^${args[0]}(.bat|.cmd)?$/) { 
         project.log "Found ${it}" 
        } 
       } 
      } 
     </groovy> 
    </target> 

    <!-- 
    Cleanup 
    --> 
    <target name="clean" description="Purge the ivy cache"> 
     <ivy:cleancache/> 
    </target> 

</project> 
Смежные вопросы