是否可以使用除包含可执行文件的工作目录之外的工作目录从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
需要是工作目录,因此可执行文件可以正确引用inputs
和outputs
中的文件,因此我希望能够运行{{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
答案 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>
当此属性为true时,首先针对项目basedir解析可执行文件的名称,如果不存在,则针对执行目录(如果已指定)解析。在Unix系统上,如果您只想允许在用户路径中执行命令,请将其设置为false。 自Ant 1.6