Ant 不是计算机语言。它是一种矩阵依赖语言。
区别很微妙:编程语言要灵活得多,但你必须告诉它要采取的每一步。矩阵依赖语言计算出执行顺序。
这可能是一个微妙但重要的区别。在标准 Ant 中,缺少基本的控制结构,如 while 循环、for 循环和 if/then 语句。
听起来你想做的事情使用标准的计算机语言会容易得多。可能是 Python、Perl,甚至是 shell 脚本。
在命令行中键入“ant -help”,您会发现没有像使用常规编程语言那样将参数传递给 Ant 的真正方法。相反,您可以在 Ant 可以使用的命令行上设置 properties:
$ant -Ddeploy.classfile=src/classes/myClass.class deploy
-D 允许您在调用 deploy 任务时设置属性。然后,您可以使用 deploy.classfile 属性在 目标的 Ant 任务中使用它。我粗略估计,即使是这样一个简单的 build.xml 文件也需要大约 20 到 30 行。尤其如此,您将为它提供一个类文件或目录,并且您必须以不同的方式处理它们,这需要第二个目标。不仅如此,还很难理解工作流程。
这是一个想法,为什么不首先在<javac> 任务中使用destdir 目标在deploy 目录中创建所需的*.class 文件。 Ant 的主要实践之一是将您构建的文件与存储库中的文件分开。它使清理工作变得容易得多。另外,<javac> 任务知道不为未更改的源文件重建类文件。
<target name="compile"
description="Compile your source files">
<property name="main.destdir" value="${basedir}/deploy/classes"/>
<property name="main.srcdir" value="${basedir}/src"/>
<path id="main.classpath">
<fileset dir="${basedir}/lib/>
</path>
<javac srcdir="${main.srcdir}"
destdir="${main.destdir}"
classpathref="main.classpath"/>
</target>
现在,您不必将文件从源目录复制到部署目录。更好的是,<javac> 不会重新编译未更改的源文件。让 Ant 完成它所设计的工作,而对于其他一切,请使用良好的脚本语言。