Apply-Task将targetfile放在错误的目录中

时间:2011-03-23 14:57:25

标签: apache ant

我即将创建一个用gzip压缩所有.js文件的apache ant目标。现在我想出了以下内容:

<target name="compress-js" description="Compressed JS files">
    <echo>Compressing JS files...</echo>
    <apply executable="gzip" parallel="false">
        <arg value="-c" />
        <arg value="--best" />
        <srcfile />
        <arg value=">" />
        <targetfile suffix=".${extension}" />
        <fileset dir="${js.dir}" includes="**/*.js" />
        <mapper type="identity" />
    </apply>
    <echo>OK!</echo>
</target>

读取文件的工作正常,但生成的目标文件路径错误。

给定$ {js.dir}是:/ var / htdocs / js 我在其他目录中启动我的ant目标,上面的脚本生成以下shell命令:

gzip -c /var/htdocs/js/a/b/1.js > ./a/b/1.js

这是不正确的。目标文件应该获得与源文件相同的绝对路径。我希望它产生以下一行:

gzip -c /var/htdocs/js/a/b/1.js > /var/htdocs/js/a/b/1.js

有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:1)

您可以通过两个步骤完成:首先gzip文件,然后重命名它们以删除后缀。

<target name="compress-js">
  <apply executable="gzip" parallel="false">
    <srcfile/>
    <fileset dir="${js.dir}" includes="**/*.js"/>
  </apply>
  <move todir="${js.dir}">
    <fileset dir="${js.dir}">
       <include name="**/*.gz"/>
    </fileset>
    <globmapper from="*.gz" to="*"/>
  </move>
</target>

答案 1 :(得分:1)

使用类似=

的内容
<tar destfile="./your.tar.gz" compression="gzip">
 <tarfileset dir="${js.dir}">
  <include name="**/*.js"/>
 </tarfileset>
 </tar>
</target>

请参阅Ant manual for tar task

除此之外,还有一个YUI Compressor Task的包装器任务,这里有一些详细说明如何使用它= Compress JavaScript and CSS as Part of your Build Process