在bin目录ant中创建脚本可执行文件

时间:2015-06-02 15:58:32

标签: ant exec chmod

这是我的ant脚本,希望将脚本从zip转换为可执行文件。这是我的工作:

  • 解压缩.zip文件,
  • 存储到临时目录
  • 运行脚本' pkg'使用参数validate

<chmod dir="tmp/temp/test/bin" perm="ugo+rx" includes="**/*"  />

<echo message="Making scripts exec: tmp/temp/test/bin" />

<exec executable="/bin/bash">
    <arg value="tmp/temp/test/bin/pkg"/>
    <arg value="validate"/>
</exec>

这不会使脚本可执行,而是会出现此错误:

 Execute failed: java.io.IOException: Cannot run program "D:\tmp\temp\test\bin": CreateProcess error=5, Access is denied.

1 个答案:

答案 0 :(得分:1)

  

无法运行程序“D:\ tmp \ temp \ test \ bin”:CreateProcess error = 5,Access被拒绝。

您是在Windows或Linux / Unix / MacOS下运行吗?

Windows在文件中没有可执行性的概念。相反,它将文件后缀与可执行程序相关联。例如,我可以将.py后缀与python.exe程序相关联。打开foo.py将在Python可执行文件下运行该Python脚本。将名称更改为foo.pl,并且脚本无法运行,或者如果您已将.plperl.exe关联,则会在Perl下运行脚本。

您可以将脚本的后缀添加到%PATHEXT%环境变量中,这样您就可以输入文件名sans扩展名。例如,如果我将.py添加到%PATHEXT%,并在foo中输入命令行终端,则Windows可能会查找foo.py然后执行该操作。 (除非它首先找到foo.exefoo.bat。然后会执行这些。)

<chmod>任务在Windows下无效。在<chmod>手册页中,它指出:

  

更改指定目录中的文件或所有文件的权限。 目前它仅在Unix或NonStop Kernel(Tandem)下有效

此外,并非所有Zip实现都可以存储文件权限和所有权信息 - 尤其是Unix样式权限和所有权。有些可以,有些则不可以。即使你想以某种方式表达文件对Unix系统的可执行性,它也可能不起作用。

我建议在脚本中包含<condition>测试以测试操作系统。然后,您可以分离如果您使用的是Linux / Windows / MacOS,以及您希望在Windows系统上执行的操作。