Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ant从不同的工作目录运行可执行文件_Ant - Fatal编程技术网

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

使用ant从不同的工作目录运行可执行文件,ant,Ant,是否可以使用工作目录而不是包含可执行文件的目录从ant运行可执行文件?这个小型ant项目展示了我正在努力实现的目标 文件夹结构 ant test | build.xml | bin | | debug | | | program.exe | | release | | | program.exe | | inputs | | | ... | | outputs | | | ... build.xml

是否可以使用工作目录而不是包含可执行文件的目录从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>
我可以在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>