使用ant从不同的工作目录运行可执行文件
是否可以使用工作目录而不是包含可执行文件的目录从ant运行可执行文件?这个小型ant项目展示了我正在努力实现的目标 文件夹结构使用ant从不同的工作目录运行可执行文件,ant,Ant,是否可以使用工作目录而不是包含可执行文件的目录从ant运行可执行文件?这个小型ant项目展示了我正在努力实现的目标 文件夹结构 ant test | build.xml | bin | | debug | | | program.exe | | release | | | program.exe | | inputs | | | ... | | outputs | | | ... build.xml
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>
我可以在windows上解决这个问题,方法是在bin
目录中启动cmd.exe
,然后将参数release\program.exe
传递给它,但我需要能够在多个平台上使用ant文件,所以我希望找到一致的语法
我考虑的一个选择是使用条件任务,并对windows和unix使用单独的语法。但是,在实际的项目中,exec
语句出现在宏内部,目标调用宏的次数很多。由于条件只能影响目标级别的内容,因此我必须为我想要针对的每个语法复制一长串宏调用,例如
<target name="runAll" depends="runAll-win,runAll-unix"/>
<target name"runAll-win" if="win">
<myMacro-win .../>
<!-- Huge list of macro calls -->
...
<myMacro-win .../>
</target>
<target name"runAll-unix" if="unix">
<myMacro-unix .../>
<!-- Huge list of macro calls -->
...
<myMacro-unix .../>
</target>
...
...
属性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开始
<target name="run">
<exec executable="${configuration}\program.exe" dir="bin" resolveexecutable="true" />
</target>