下面是代码段
<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中。
我添加了*然而它创建了一个新文件夹,而不是找到名称相似的文件夹。
任何帮助表示赞赏!
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" />
说明:
dirset
类型来收集位于../..
中的目录,该目录遵循“apache-tomcat- *”模式。这将存储为ID为“tomcat.dir”的Ant path
。 (随意将这些值重命名为“apache”或其他;这只是我的偏好,因为Apache生产了许多不同的产品。)dirset
可能会收集多个目录,因此如果发生这种情况,您可能希望失败。否则,您最终会在脚本中遇到一个令人困惑的错误。dirset
类型将不会自行失败。pathconvert
任务从tomcat.dir
路径创建属性。我给了他们相同的名字,但这不是必须的。property
任务专门为目标目录创建属性。请注意使用location
属性代替value
属性。这将导致属性值被解析为具有适合用户操作系统的文件分隔符的规范路径(即,如果用户在Windows上,则正斜杠将转换为反斜杠)。flatten="true"
属性,但如果不是这种情况,请继续删除该部分。