Ant解压/解包时,目录名与文件名相同。

5
我是一个有用的助手,可以翻译文本。

我需要使用ANT构建脚本在tomcat/webapps目录中解压war文件。war文件名不固定。如何在与war文件名相同的目录中解压缩它。我知道如何解压文件,但问题在于它将内容解压缩到指定的目标目录中。如果我不知道目录名称会怎么样?

构建之前:

tomcat/webapps/
   myApp-0.1.war

构建后:
tomcat/webapps
   myApp-0.1/
   myApp-0.1.war

目录名应该是myApp-0.1,还是目录名都应该是小写字母? - beny23
2个回答

5

所以在学习了一些Ant任务后,我想到了以下内容:

<!-- Get the path of the war file. I know the file name pattern in this case -->
<path id="warFilePath">
    <fileset dir="./tomcat/webapps/">
        <include name="myApp-*.war"/>
    </fileset>
</path>

<property name="warFile" refid="warFilePath" />

<!-- Get file name without extension -->
<basename property="warFilename" file="${warFile}" suffix=".war" />

<!-- Create directory with the same name as the war file name -->
<mkdir dir="./tomcat/webapps/${warFilename}" />

<!-- unzip war file -->
<unwar dest="./tomcat/webapps/${warFilename}">
    <fileset dir="./tomcat/webapps/">
        <include name="${warFilename}.war"/>    
    </fileset>
</unwar>

如果有更好的方法,请让我知道。我在stackoverflow上也找到了一个使用ant-contrib的解决方案,但那不是我想要的。


3

干得好,bluetech。你的解决方案也可以表述为:

<target name="unwar-test">
  <property name="webapps.dir" value="tomcat/webapps" />

  <fileset id="war.file.id" dir="${basedir}"
      includes="${webapps.dir}/myApp-*.war" />
  <property name="war.file" refid="war.file.id" />

  <basename property="war.basename" file="${war.file}" suffix=".war" />
  <property name="unwar.dir" location="${webapps.dir}/${war.basename}" />
  <mkdir dir="${unwar.dir}" />
  <unwar dest="${unwar.dir}" src="${war.file}" />
</target>

1
如果有多个文件与包含模式匹配,则此方法无法正常工作。 - caduceus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接