缺少源文件时挂起的ant复制任务

时间:2014-07-21 20:56:28

标签: ant copy hang

在我们的一个构建脚本中,我们添加了以下简单复制任务 - >

<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

2 个答案:

答案 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>

运行它,检查它是否失败或挂起。

如果这个简单的构建文件有效,那么主构建文件中的其他内容很可能会导致该错误。