我们有一个使用 Nant 脚本的自动化构建过程,我们刚刚继承了一个 Java 项目,该项目有一个现有的、有效的 Ant 脚本。 我已经搜索了所有内容,似乎大多数人都使用批处理文件从 Nant 调用 Ant 脚本。 这对我来说似乎有点笨拙。 有没有办法以任务格式直接从 Nant 调用 Ant 脚本?
这个类似的问题用批处理文件解决了它,但我想不用它。
<!-- calling the Ant build Process-->
<target name="AntBuildProcess" description="Created to call the Ant build during this NAnt build process" >
<echo message="Starting the Ant Build Process..." />
<exec program="ant" commandline='-buildfile YourAntBuild.xml' failonerror="true"/>
</target>
然后在生成过程中,只需在需要生成此目标时调用此目标即可。 <call target="AntBuildProcess" />
Ant 是一个批处理文件。看一看,您会在%ANT_HOME%bin
目录中看到一个名为 ant.bat
的文件。
Ant 实际上是一个 Java 程序,因此您可以通过运行类org.apache.tools.ant.launch.Launcher
从 java 命令启动它,这基本上是 ant.bat
文件正在执行的操作。
然而,为什么要重新发明轮子呢?该ant.bat
以正确的方式运行 Java 命令,为您提供更改其执行方式的选项,并确保所有内容都正确设置。
补遗
我明白了,与 Ant 不同,Nant 总是会调用cmd.exe
并使用后缀和%PATHEXEC%
来确定某些东西是批处理脚本还是其他类型的脚本。因此,如果要通过 <exec/>
使用 Ant 作为批处理脚本运行 Ant,则可以执行以下操作:
<exec executable="cmd.exe"
dir="${working.dir}">
<arg value="/c"/>
<arg value="ant.bat"/>
</exec>
但是,在 Nant 中,您可以简单地这样做:
<exec program="ant"
workingdir=${working.dir}"/>