Ant 不是计算机语言。它是一种矩阵依赖语言。
区别是微妙的:编程语言要灵活得多,但你必须告诉它要采取的每一步。矩阵依赖语言计算出执行顺序。
这可能是一个微妙但重要的区别。在标准 Ant 中,缺少基本的控制结构,如 while 循环、for 循环和 if/then 语句。
听起来你想要做的事情使用标准的计算机语言会容易得多。也许是 Python、Perl,甚至是一个 shell 脚本。
在命令行中键入“ant -help”,您会发现没有像使用常规编程语言那样将参数传递给 Ant 的真正方法。相反,您可以在 Ant 可以使用的命令行上设置属性:
$ant -Ddeploy.classfile=src/classes/myClass.class deploy
-D 允许您在调用部署任务时设置属性。然后,您可以使用deploy.classfile属性在 Ant 中使用它你的任务目标。我粗略估计,即使是这样一个简单的build.xml文件也需要大约 20 到 30 行。尤其如此,您将为其提供一个类文件或目录,并且您必须以不同的方式处理它们,这需要第二个目标。不仅如此,而且很难理解工作流程。
这是一个想法,为什么不首先在任务中使用destdir
目标在目录中<javac>
创建所需的*.class
文件deploy
。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 完成它所设计的工作,而对于其他一切,请使用良好的脚本语言。