如果我使用ANT知道该文件夹的不完整名称,如何将文件复制到文件夹

问题描述 投票:0回答:1

下面是代码段

<property name="apache.dst.dir" value="../../apache-tomcat-7.0.79/webapps" />

<copy todir="${apache.dst.dir}">
    <fileset dir="${dstdir}">
        <include name="api.war" />
    </fileset>
</copy>

我试图将war文件复制到apache-tomcat下的webapps目录。但是不同的用户可能有不同版本的tomcat,因此文件夹名称可能会有所不同。这将是apache-tomcat-something。我该如何指定?我希望我的ant文件能够找到以apache-tomcat - * / webapps开头的文件夹,并将该文件复制到该文件夹​​下的webapps中。

我添加了*然而它创建了一个新文件夹,而不是找到名称相似的文件夹。

任何帮助表示赞赏!

tomcat build ant terminal
1个回答
1
投票

Ant的property任务不适用于通配符,因此您必须使用资源集合来查找所需的目录。以下是我建议的方法:

<dirset id="tomcat.dir" dir="../.." includes="apache-tomcat-*" />

<fail message="Multiple Tomcat directories found in ${tomcat.parent.dir}.${line.separator}${toString:tomcat.dir}">
    <condition>
        <resourcecount refid="tomcat.dir" when="greater" count="1" />
    </condition>
</fail>

<fail message="No Tomcat directory found in ${tomcat.parent.dir}.">
    <condition>
        <resourcecount refid="tomcat.dir" when="less" count="1" />
    </condition>
</fail>

<pathconvert refid="tomcat.dir" property="tomcat.dir" />

<property name="tomcat.webapps.dir" location="${tomcat.dir}/webapps" />

<copy todir="${tomcat.webapps.dir}" file="${dstdir}/api.war" flatten="true" />

说明:

  1. 使用dirset类型来收集位于../..中的目录,该目录遵循“apache-tomcat- *”模式。这将存储为ID为“tomcat.dir”的Ant path。 (随意将这些值重命名为“apache”或其他;这只是我的偏好,因为Apache生产了许多不同的产品。)
  2. 由于dirset可能会收集多个目录,因此如果发生这种情况,您可能希望失败。否则,您最终会在脚本中遇到一个令人困惑的错误。
  3. 同样,如果没有找到目录,您可能希望失败。如果找不到任何内容,dirset类型将不会自行失败。
  4. 使用pathconvert任务从tomcat.dir路径创建属性。我给了他们相同的名字,但这不是必须的。
  5. 使用property任务专门为目标目录创建属性。请注意使用location属性代替value属性。这将导致属性值被解析为具有适合用户操作系统的文件分隔符的规范路径(即,如果用户在Windows上,则正斜杠将转换为反斜杠)。
  6. 复制到上面定义的目录。我假设您要从war文件中删除任何父目录,因此我包含了flatten="true"属性,但如果不是这种情况,请继续删除该部分。
© www.soinside.com 2019 - 2024. All rights reserved.