【问题标题】:Ant not creating tar filesAnt 不创建 tar 文件
【发布时间】:2011-09-19 14:35:34
【问题描述】:

我有一个小 ant 脚本,它应该创建 3 个 tar 文件。

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="."  >

    <property name="dcc-shell.dir" value="${basedir}"/>
    <property name="dcc-mdp.dir" value="${dcc-shell.dir}/eq-mo-drop-copy-converter-mdp"/>
    <property name="mdp-code.dir" value="${dcc-mdp.dir}/src/main/*"/>
    <property name="dcc-srv.dir" value="${dcc-shell.dir}/eq-mo-drop-copy-converter-server"/>
    <property name="srv-code.dir" value="${dcc-srv.dir}/src/main/*"/>
    <property name="dcc-trans.dir" value="${dcc-shell.dir}/eq-mo-drop-copy-converter-transformer"/>
    <property name="trans-code.dir" value="${dcc-trans.dir}/src/main/*"/>

    <target name="create MDP Tar">
        <tar destfile="${dcc-shell.dir}/mdp.tar"
            basedir="${dcc-mdp.dir}/**"
            excludes="${dcc-mdp.dir}/target/*"
        />
    </target>

    <target name="create Trans Tar">
        <tar destfile="${dcc-shell.dir}/trans.tar"
            basedir="${dcc-trans.dir}/**"
            excludes="${dcc-trans.dir}/target/*"
        />
    </target>

    <target name="create SRV Tar">
        <tar destfile="${dcc-shell.dir}/srv.tar"
            basedir="${dcc-srv.dir}/**"
            excludes="${dcc-srv.dir}/target/*"
        />
    </target>
</project>

脚本运行良好:

    Buildfile: C:\eq-Drop-Copy\eq-mo-drop-copy-converter-shell\build.xml
BUILD SUCCESSFUL
Total time: 94 milliseconds

但是,项目中没有创建 tar 文件。对自己来说有点神秘

编辑 我一直收到以下错误!

    <target name="create MDP.Tar">
    <tar destfile="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/mdp.tar"
        basedir="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/eq-mo-drop-copy-converter-mdp/*"
        excludes="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/eq-mo-drop-copy-converter-mdp/target/*"
    />
</target>

我已将 xml 更改为绝对路径:

    <target name="create MDP.Tar">
    <tar destfile="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/mdp.tar"
        basedir="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/eq-mo-drop-copy-converter-mdp/*"
        excludes="C:/eq-Drop-Copy/eq-mo-drop-copy-converter-shell/eq-mo-drop-copy-converter-mdp/target/*"
    />
</target>

但是同样的错误怎么可能 basedir 不存在构建文件包含在其中。 MDP 目标中的 basedir 指向一个绝对路径并 tar 中的所有文件。为什么会报错?

【问题讨论】:

  • 由于某种原因它切断了 从顶部和 从底部

标签: ant build build-automation tar


【解决方案1】:

你很可能在没有给出目标的情况下调用它。您的打印输出未显示任何已执行的 tar 目标。 尝试使用目标名称作为 ant 的参数调用它。然后你也会发现在目标名称中使用空格可能不是一个好主意。

【讨论】:

  • 为快速回答干杯。你是对的,但是它现在给我带来了create MDP.Tar: BUILD FAILED C:\eq-Drop-Copy\eq-mo-drop-copy-converter-shell\build.xml:16: basedir does not exist! 的问题,但我知道这个目录是真实的,我可以在其中看到我的构建文件。我假设basedir="${dcc-mdp.dir}/*" 将意味着 dcc-mdp.dir 中的所有内容
  • 你不正确。 basedir 必须是不带/* 的目录名称。这同样适用于任何 dir 参数。
  • 那么如何指定它必须是所有文件的所有内容呢?我假设语法类似于 Unix。假设:(
  • 如果您指定basedir,它将包括其中的所有文件,除非由excludesincludes 控制。不过,我个人更喜欢为此使用嵌套文件集。
【解决方案2】:

我纠正了几个问题:

  • basedir 属性中不应包含“*”。它会自动完成整棵树。
  • 目标不能包含空格
  • 您可能没有指定目标。因此,我简单地添加了一个default 目标“create_all_tars”,并使用&lt;antcall&gt; 调用所需的目标。

    <project basedir="." default="create_all_tars" >
        <property name="dcc-shell.dir"
            value="${basedir}"/>
        <property name="dcc-mdp.dir"
            value="${dcc-shell.dir}/eq-mo-drop-copy-converter-mdp"/>
        <property name="mdp-code.dir"
            value="${dcc-mdp.dir}/src/main/*"/>
        <property name="dcc-srv.dir"
            value="${dcc-shell.dir}/eq-mo-drop-copy-converter-server"/>
        <property name="srv-code.dir"
            value="${dcc-srv.dir}/src/main/*"/>
         <property name="dcc-trans.dir"
             value="${dcc-shell.dir}/eq-mo-drop-copy-converter-transformer"/>
         <property name="trans-code.dir"
             value="${dcc-trans.dir}/src/main/*"/>
    
        <target name="create_all_tars">
            <antcall target="create_MDP_Tar"/>
            <antcall target="create_Trans_Tar"/>
            <antcall target="create_SRV_tar"/>
        </target>
    
        <target name="create_MDP_Tar">
            <tar destfile="${dcc-shell.dir}/mdp.tar"
                basedir="${dcc-mdp.dir}"
                excludes="${dcc-mdp.dir}/target/**"/>
        </target>
    
        <target name="create_Trans_Tar">
            <tar destfile="${dcc-shell.dir}/trans.tar"
                basedir="${dcc-trans.dir}"
                excludes="${dcc-trans.dir}/target/**"/>
        </target>
    
        <target name="create_SRV_Tar">
            <tar destfile="${dcc-shell.dir}/srv.tar"
                basedir="${dcc-srv.dir}"
                excludes="${dcc-srv.dir}/target/**"/>
        </target>
    

这有帮助吗?

【讨论】:

  • 是的,David 解释了一些更基本的功能。谢谢你。无论出于何种原因,它仍然是目标目录及其内容:S
  • 您是否仍然收到错误消息?您可以发布错误消息吗?这将帮助我弄清楚你到底错过了什么。您是否从basedir 属性中删除了“”?此属性不会扩展“”,但会将其视为目录名称的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 2022-10-19
  • 2011-03-23
相关资源
最近更新 更多