在我们的一个构建脚本中,我们添加了以下简单复制任务 - >
<copy todir="${targetdir}"
file="${sourcedir}/modules/glassfish.jaxb.xjc_1.0.0.0_2-1-12.jar"/>
当源位置更改了玻璃鱼罐名称(不在我们控制之下的版本升级)时,此复制任务开始挂起。我期待它在这种情况下导致构建失败的错误。实际上起初我无法弄清楚构建的特定步骤是什么。然后当我在ant命令中添加“-debug”并且我意识到它在此复制任务之前成功完成了一个步骤,并且仍然没有挂起的复制命令的痕迹。当我更新新的jar名称时,它工作正常并且构建成功,这证明了由于文件名被更改而导致复制任务挂起。为了便于下次调试,我在复制任务之前添加了如下所示的echo语句 - &gt;
<echo message="Copying glassfish jar to ${targetdir}.."/>
但我仍然感到困惑的是为什么它没有给出构建失败的错误?我正在使用Apache Ant 1.7.1版。这可能是个错误吗?如果只复制任务(在jar名称中不使用*),以后我怎么能避免这种情况? TIA
答案 0 :(得分:1)
这对我有用。好吧,对我不起作用。我收到了错误消息。我使用的是Ant 1.8和Ant 1.9.2。我没有尝试使用Ant 1.7,但我怀疑这是一个错误。
尝试在Ant中使用-v
参数:
$ ant -v target
并为长途输出做好准备。这将为您提供有关Ant的信息,并可以解释为什么它会冻结。您可以执行以下操作:使用文件集指定文件。
<copy todir="${targetdir}">
<fileset dir="${sourcedir}/modules">
<include name="glassfish*.jar"/> <!-- Will catch any glassfish.jar -->
</fileset>
</copy>
当然,如果文件不存在,您将不会收到错误甚至是警告。但是,之前的<fail/>
会检测到问题:
<fail message="missing file ${sourcedir}/modules/glassfish.jaxb.xjc_1.0.0.0_2-1-12.jar">
<condition>
<not>
<available
file="${sourcedir}/modules/glassfish.jaxb.xjc_1.0.0.0_2-1-12.jar"
type="file"/>
</not>
</condition>
</fail>
答案 1 :(得分:1)
强制构建退出,另一种方法
<available file="${sourcedir}/modules/glassfish.jaxb.xjc_1.0.0.0_2-1-12.jar"
property="glassfish.jaxb.xjc.jar.present"/>
<fail message="you message" unless="glassfish.jaxb.xjc.jar.present"/>
少了几行:)
如果你想深入研究它,试试这个:
编写一个简单的构建文件,其中只包含一个copy
的目标,并将其放在主构建文件的相同位置。
<target name="test-copy">
<!-- here use an old (wrong) file name -->
<copy todir="${targetdir}"
file="${sourcedir}/modules/glassfish.jaxb.xjc_1.0.0.0_2-1-12.jar"/>
</target>
运行它,检查它是否失败或挂起。
如果这个简单的构建文件有效,那么主构建文件中的其他内容很可能会导致该错误。