如果文件有specifc后缀,ant将运行目标



我通过ant -Dfilepath=/foo/bar/foobar.suffix我想把它复制到一个目的地,如果它是.js文件,就生成它的编译版本。这是可行的,但目前编译任务运行在所有文件上,而不仅仅是.js文件。如何在"runjscompile"任务中排除非.js文件?在文件集中,我会这样做(但我不知道如何将其应用于任务):

<fileset dir="${foo}" casesensitive="yes">
    <exclude name="**/*.min.js" />
    <include name="**/*.js" />
</fileset>

我的build.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" basedir="." default="build">
    <taskdef name="jscomp" classname="com.google.javascript.jscomp.ant.CompileTask" classpath="/home/bar/bin/compiler.jar" />
    <taskdef resource="net/sf/antcontrib/antlib.xml">
        <classpath>
            <pathelement location="/usr/share/java/ant-contrib.jar" />
        </classpath>
    </taskdef>
    <property name="serverRoot" value="/home/bar/server/public_html" />
    <property name="foo" value="${serverRoot}/foo/" />
    <property name="workspaceRoot"
        value="/home/bar/Zend/workspaces/DefaultWorkspace/" />
    <property name="foo_service" value="${workspaceRoot}/foo_service/" />
    <property name="filepath" value="${filepath}" />
    <target name="build" depends="transferFile, runjscompile" />
    <target name="transferFile" description="overwrite old file">
        <basename property="filename" file="${filepath}" />
        <dirname property="path" file="${filepath}" />
        <pathconvert property="path.fragment" pathsep="${line.separator}">
            <propertyresource name="path" />
            <mapper type="regexp" from="^/[^/]+/(.*)" to="1" />
        </pathconvert>
        <echo message="copy ${workspaceRoot}${filepath} to ${foo}${path.fragment}${filename}" />
        <copy file="${workspaceRoot}${filepath}" tofile="${foo}${path.fragment}${filename}"
            overwrite="true" force="true" />
        <property name="destFile" value="${foo}${path.fragment}${filename}" />
    </target>
    <target name="runjscompile">
        <echo message="compile ${destFile}" />
        <basename property="file" file="${destFile}" />
        <basename property="prefix" file="${destFile}" suffix=".js" />
        <dirname property="directory" file="${destFile}" />
        <echo message="Compressing file ${file} to ${directory}/${prefix}.min.js" />
        <jscomp compilationLevel="simple" debug="false" output="${directory}/${prefix}.min.js" forceRecompile="true">
            <sources dir="${directory}">
                <file name="${file}" />
            </sources>
        </jscomp>
    </target>
</project>

添加另一个目标,该目标使用<condition>检查文件后缀,并在匹配时设置属性,然后使jscompile目标以此为条件。按照你的fileset示例,你可能想要这样的东西:

<target name="check.js">
  <condition property="do.jscompile">
    <!-- check for filepath that ends .js but not .min.js -->
    <matches string="${filepath}" pattern=".*(?&lt;!.min).js$$" />
  </condition>
</target>
<target name="build" depends="check.js, transferFile, runjscompile" />
<target name="runjscompile" if="do.jscompile">

相关内容

  • 没有找到相关文章

最新更新