使用ant从不同的工作目录运行可执行文件

时间:2015-04-28 20:21:10

标签: ant

是否可以使用除包含可执行文件的工作目录之外的工作目录从ant运行可执行文件?这个小小的蚂蚁项目展示了我想要实现的目标。

文件夹结构

ant test
|   build.xml
|   bin
|   |   debug
|   |   |    program.exe
|   |   release
|   |   |    program.exe
|   |   inputs
|   |   |    ...
|   |   outputs
|   |   |    ...

的build.xml

<project name="test" basedir="./">    
    <target name="run">
        <exec executable="${configuration}\program.exe" dir="bin"/> 
    </target>
</project>

${configuration}设置为release

bin需要是工作目录,因此可执行文件可以正确引用inputsoutputs中的文件,因此我希望能够运行{{1}中包含的可执行文件来自bin/release目录。但是,ant无法找到可执行文件:

bin

我可以在Windows上解决此问题,方法是在BUILD FAILED D:\ant test\build.xml:6: Execute failed: java.io.IOException: Cannot run program "release\program.exe" (in directory "D:\ant test\bin"): CreateProcess error=2, The system cannot find the file specified 目录中启动cmd.exe,然后将参数bin传递给它,但我需要能够使用ant文件在多个平台上,所以我希望找到一致的语法。

我考虑过的一个选项是使用条件任务,并为windows和unix提供单独的语法。但是,在实际项目中,release\program.exe语句出现在宏内,并且目标调用宏很多次。由于条件只会影响目标级别的事物,因此我必须为我想要定位的每种语法复制一长串宏调用,例如。

exec

1 个答案:

答案 0 :(得分:3)

dir属性指定工作目录,但可执行路径是针对项目basedir解析的。因此,任务将搜索可执行文件D:\ant test\release\program.exe

一个简单的解决方案是将resolveexecutable="true"添加到任务调用中:

<target name="run">
    <exec executable="${configuration}\program.exe" dir="bin" resolveexecutable="true" /> 
</target>

来自exec task documentation

  

当此属性为true时,首先针对项目basedir解析可执行文件的名称,如果不存在,则针对执行目录(如果已指定)解析。在Unix系统上,如果您只想允许在用户路径中执行命令,请将其设置为false。 自Ant 1.6

相关问题