Как использовать компрессор 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>
приведенный выше код отлично работает для меня.