Как использовать компрессор YUI в скрипте сборки Ant для javascript и css

после нескольких дней поиска того, как использовать компрессор YUI в скрипте сборки Ant, я, наконец, получил его работу. Многие старые примеры (

многие из примеров также старые и требуют некоторого большего знания Ant или настройки задач Ant. Решение ниже-это просто то, что было быстрым, легким и эффективным для меня.

5 ответов


ниже было добавлено к одному из моих <target> тегах все файлы javascript в одном сжатом каталоге. Эти файлы сохраняют свое первоначальное имя. Чтобы сделать это для CSS, просто переключите " js " на " css " и обновите пути соответственно.

Это было сделано с помощью YUI Compressor 2.4.7, и я запускаю скрипт сборки Ant в Eclipse Juno без каких-либо изменений путей классов или других изменений настроек.

<!-- Minimizing Javascript files -->
    <echo message="Compressing Javascript files at location: ${build.root}/resources/js/*.js" />
    <java jar="c:/dev/lib/yuicompressor-2.4.7/build/yuicompressor.jar" fork="true">
        <arg value="${build.root}/resources/js/*.js" /> <!-- input path for JS files -->
        <!--<arg value="-v" /> --><!-- Turn on verbose -->
        <arg value="-o" />
        <arg value="'.js$:.js'" />
        <arg value="${build.root}/resources/js/*.js" /> <!-- output path for JS files -->
        <classpath>
            <pathelement location="c:/dev/lib/yuicompressor-2.4.7/build/yuicompressor.jar"/>
        </classpath>
    </java>

пожалуйста чувствуйте свободным улучшить этот ответ. Выше решение работает для меня, но я не эксперт.


Я использую следующее решение для минимизации файлов на месте, так как я получил FileNotFoundException с предыдущим ответом.

чтобы уменьшить CSS, замените js С css ниже.

<target name="compress" description="compress the JS files">
    <copy todir="temp/js" overwrite="yes">
        <fileset dir="original/js"/>
    </copy>
    <apply executable="java" parallel="false" dest="temp/js">
        <fileset dir="temp/js" includes="**/*.js" />
          <arg line="-jar"/>
          <arg path="test_lib/yuicompressor-2.4.8.jar" />
          <arg line="-v"/>
          <srcfile/>
          <arg line="-o"/>
          <mapper type="glob" from="*.js" to="*-min.js"/>
          <targetfile/>
    </apply>
    <move todir="original/js" overwrite="true">
        <fileset dir="temp/js" />
        <mapper type="glob" from="*-min.js" to="*.js"/>
    </move>
</target>

я попробовал код Виктора. На самом деле никакой временной директории не требовалось. Я использовал этот код и он работал для меня.

    <apply executable="java" parallel="false" >
                <fileset dir="${build.root}/resources/js" includes="**/*.js" />
                    <arg line="-jar"/>
                    <arg path="${basedirectory}/yuicompressor-2.4.8.jar" />
                    <srcfile/>
                    <arg value="-o" />
                    <arg value="'.js$:.js'" />
                    <!-- output path for JS files -->
                    <arg value="${build.root}/resources/js/*.js" />
                    <arg line="--nomunge" />
                    <arg line="--preserve-semi" />              
            </apply>


Я бы использовал эту задачу муравья:http://code.google.com/p/yui-compressor-ant-task/ или этот:https://github.com/parambirs/ant-yui-compressor что кажется аккуратнее, чем применять.


вы можете сжать все файлы Js, доступные в определенной папке, без копирования в папку temp.

<property name="js.source" value="js/combine" />    
<property name="js.target" value="js/compress" />
<fileset dir="${yuicompressor.lib}">
        <include name="yui/yuicompressor-2.4.z8.jar"/>
</fileset>
<target name="minifyjs" description="compress the JS files">
    <delete includeEmptyDirs="true">
      <fileset dir="${js.target}" includes="**/*" defaultexcludes="no"/>
    </delete>
    <apply executable="java" parallel="false" verbose="true" failonerror="yes">
        <fileset dir="${js.source}" includes="**/*.js" excludes="**/*-min.js, **/*.min.js"/>
          <arg line="-jar"/>
          <arg path="${yuicompressor.lib}" />
          <srcfile/>
          <arg line="-o"/>
          <targetfile/>
          <mapper type="glob" from="*.js" to="${js.target}/*.js"/>
          <arg line="--charset"/>
          <arg line="utf-8"/>
    </apply>
</target>

приведенный выше код отлично работает для меня.