`
douglas_lhs
  • 浏览: 39114 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

从Ant调用系统命令或外部程序

阅读更多
从Ant调用系统命令或外部程序
  最近用到了Ant,发现还是有许多功能是Ant没有提供相应Task支持,而操作系统提供了相应的系统命令。Ant说明书上说了,用<exec>可以调用系统命令,实际操作起来才发现陷阱可不少,一不小心就会掉下去。下面以按日期倒序列举当前目录下文件为例说明。注意我使用的是Ant 1.5.4。
  对于Windows平台,命令是:dir /o:-d
  对于Unix(包括Linux,下同)平台,命令是 ls –ltr
  陷阱1:调用谁?
  这在Ant文档中已经提到了,在Windows下,不能直接调用dir、del(因为没有这个程序!)等,必须通过cmd.exe来调用:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="cmd.exe">
   <arg line="/c dir"/>
   </exec>
   </target>
  </project>
  对于Unix,则可以直接调用ls:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="ls"/>
   </target>
  </project>
  也可以指明由Shell调用
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="/bin/sh">
   <arg line="-c ls" />
   </exec>
   </target>
  </project>
  我觉得后者要好一些,否则无法保证调用的是否系统命令,因为只要Path环境变量指明的路径下有一个同名的程序,都可能被调用到。
  通过Shell调用,Windows必须加 /c,Unix则是加 –c 。
  陷阱2:arg line, arg value 还有引号
  假如我们扩充Windows平台下的例子,满足按修改时间倒序的要求:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="cmd.exe">
   <arg line="/c dir /o-d"/>
   </exec>
   </target>
  </project>
  成功。换Unix了:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="/bin/sh">
   <arg line="-c ls -ltr" />
   </exec>
   </target>
  </project>
  对不起,失败:java.lang.IOException。
  之所以这样,是因为<arg line>把每个空格分隔的字符串作为参数传给调用程序,但是对于”/bin/sh”来说,”ls –ltr”应该是一个参数而不是两个。解决办法有两个:
  加引号:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="/bin/sh">
   <arg line="-c 'ls –ltr'" />
   </exec>
   </target>
  </project>
  或者使用<arg value>:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="/bin/sh">
   <arg value="-c" />
  <arg value="ls -ltr" />
   </exec>
   </target>
  </project>
  陷阱3:阻塞(block)
  不论是Windows还是Unix,调用一个程序后都必须等到该操作结束才能继续作下面的操作。如果你想调用一个程序的同时还做其它的工作,必须使用<parallel>:
  <?xml version="1.0" ?>
  <project name="testExec" default="test">
   <target name="test">
   <exec executable="notepad.exe"/>
   <echo message="You must close notepad first!"/>
  
   <parallel>
   <exec executable="notepad.exe"/>
   <echo message="You do not need to close notepad."/>
   <parallel>
   </target>
  </project>
  需要注意的属性:
  dir 指明程序执行的路径。对搜索程序也有影响
  os 指明执行的平台
  failonerror 缺省为false,即该命令执行了但是失败了,build仍然继续
分享到:
评论

相关推荐

    apache ant使用例子

    了解了基本的Ant概念后,我们可以深入学习Ant的其他特性,如文件集(filesets)、条件语句、宏定义(macros)以及如何调用外部程序。Ant还支持通过类路径(classpath)管理和依赖管理,这对于大型项目尤其重要。此外...

    JAVA ANT 自动备份程序

    8. `&lt;exec&gt;`:执行外部命令,如Linux的cron job或Windows的任务计划程序。 为了实现增量备份,ANT可能使用了类似于`&lt;uptodate&gt;`的任务来检查源文件和目标文件的时间戳,只有在源文件更新后才进行备份。此外,也可以...

    ant开发指南用于说明ant一些相关信息

    5. **集成外部工具**:Ant支持调用系统级别的命令,如`exec`任务可用于执行shell脚本或外部程序,极大地扩展了构建脚本的功能。 四、Ant高级特性 1. **条件语句和循环**:通过`if`、`unless`属性,可以在构建脚本...

    Ant使用指南(介绍得很详细)

    10. ****:执行外部程序或脚本。 四、Ant命令行使用 1. **ant**:执行默认目标(未指定目标时,默认为第一个定义的目标)。 2. **ant [target]**:执行指定的目标。 3. **ant -f [buildfile]**:指定不同的构建...

    Ant工具使用(教程)

    3. **配置环境变量**:在系统的PATH环境变量中添加Ant的bin目录路径,这样可以在任何地方运行Ant命令。 - **Windows**:编辑系统环境变量,添加`ANT_HOME`并指向Ant的安装目录,然后在PATH中添加`%ANT_HOME%\bin`。...

    apache-ant-1.9.16-bin.tar.gz

    此外,Apache Ant还支持条件语句、循环、属性文件读取、外部程序调用等多种功能,使得构建过程可以灵活且强大。与其他构建工具(如Maven和Gradle)相比,Ant的灵活性是其一大优势,但配置工作可能更繁琐。在大型项目...

    Ant的配置及使用实例

    - 使用`&lt;exec&gt;`任务执行外部程序,并传递参数,例如: ```xml ``` 上述代码会执行`ping`命令并传递IP地址作为参数。 4. **启动服务**: - 使用`&lt;exec&gt;`任务启动Tomcat服务器,提供了两种方式: ```...

    ant 1.70中文手册

    Ant的灵活性体现在它可以与其他工具集成,如JUnit进行单元测试,或者通过`&lt;exec&gt;`任务调用外部命令行工具。此外,Ant支持条件语句(如`&lt;if&gt;`和`&lt;unless&gt;`)和循环结构(如`&lt;foreach&gt;`),这使得构建脚本可以根据不同...

    编译打包工具-Ant

    虽然 Ant 可调用的外部应用种类非常丰富,但其实最常用的就 2,3 个:比如 javac、javadoc、jar 等。 Ant 与 makefile 的比较,Makefile 有一些不足之处,比如很多人都会碰到的烦人的 Tab 问题。Ant 则与一般基于...

    ant批量打包脚本

    6. **运行Ant脚本**:在命令行中执行`ant &lt;target&gt;`命令,如`ant package`,Ant会根据build.xml文件中的配置执行打包任务。 7. **多渠道打包**:在脚本中添加循环或者条件判断,遍历所有渠道的配置文件,为每个渠道...

    apache-ant-1.9.9-bin.tar.gz 【适用于linux系统】

    - `&lt;exec&gt;`:执行外部程序,比如Java应用或系统命令。 4. **Ant的条件与选择**: - `&lt;if&gt;`和`&lt;unless&gt;`:根据条件执行任务。 - `&lt;condition&gt;`:定义条件,可以检查属性值、文件是否存在等。 - `&lt;choose&gt;`、`...

    ant 工程

    7. **外部工具集成**:Ant可以与JUnit进行集成进行单元测试,或者与Maven、Gradle等其他构建工具配合使用。 8. **属性和变量**:如何设置和使用属性,以及如何引用环境变量。 9. **Shell脚本**:在Ant中,可以通过...

    ant个人学习笔记和简单示例

    学习笔记可能还会涵盖如何通过Ant调用这些工具。 在实际应用中,你可能会遇到如何处理外部库(dependencies)的问题。Ant提供了`classpath`元素来管理这些依赖,并可以通过`&lt;path&gt;`元素将多个目录或JAR文件添加到类...

    Ant使用指南

    Ant可以调用外部程序,如JUnit进行单元测试,或者通过任务执行系统命令。 八、Ant与Maven的比较 虽然Ant具有很高的灵活性,但配置工作较为繁琐。相比之下,Maven引入了约定优于配置的理念,提供了更便捷的依赖管理...

    Ant1.9.14 基于Java的生成工具

    6. **支持外部工具**:Ant可以调用Java以外的工具,如编译器、数据库客户端等,通过`exec`任务来执行命令行程序。 7. **条件语句**:Ant提供了if和unless属性,允许根据特定条件决定是否执行某项任务。 8. **多...

    Apache-ant-1.9.2

    7. **ivy集成**:Ant 1.9.2与Apache Ivy的集成可能更加紧密,允许用户方便地管理外部依赖,包括从Maven仓库下载。 8. **命令行选项**:Ant的命令行界面可能在1.9.2中得到了改进,增加了新的选项或者优化了现有选项...

    ANT的常用标签练习

    13. **`&lt;exec&gt;`**:执行外部程序或脚本,比如执行系统命令或Java应用程序。 ## 自定义标签 Ant 的强大之处在于其可扩展性,可以通过编写Java类实现自定义标签。这使得开发者可以创建自己的任务,处理特定的需求。...

    ant-installer.jar.zip

    运行`ant compile`或`ant jar`命令,Ant会根据build.xml中的指令执行相应的任务。 Ant还支持依赖管理。在描述中提到的"jar.zip包下载,依赖包",意味着Ant可以处理项目依赖的第三方库。例如,你可以使用`&lt;classpath&gt;...

    ant-nodeps-1.6.4.jar.zip

    用户可以通过运行`java -jar ant-nodeps-1.6.4.jar`命令来启动Ant,这样可以避免因缺少依赖而导致的错误,尤其在没有完整Ant安装的系统上非常有用。 `ant.license.txt`文件通常包含Apache Ant的许可协议,它详细...

Global site tag (gtag.js) - Google Analytics