{"id":459,"date":"2008-12-16T13:06:34","date_gmt":"2008-12-16T20:06:34","guid":{"rendered":"http:\/\/www.milfont.org\/tech\/?p=459"},"modified":"2008-12-16T13:25:01","modified_gmt":"2008-12-16T20:25:01","slug":"minificacao-de-javascript-com-ant-task","status":"publish","type":"post","link":"https:\/\/www.milfont.org\/tech\/2008\/12\/16\/minificacao-de-javascript-com-ant-task\/","title":{"rendered":"Minifica\u00e7\u00e3o de Javascript com Ant Task"},"content":{"rendered":"<p><script type=\"text\/javascript\"> function get_style459 () { return \"none\"; } function end459_ () { document.getElementById('wqd459').style.display = get_style459(); } <\/script>Em um <a href=\"http:\/\/www.milfont.org\/tech\/2008\/02\/10\/javascript-inline-e-external\/\">post passado<\/a> eu falei da import\u00e2ncia de unir e minificar arquivos js em determinados casos e discuti &#8220;quando&#8221; fazer isso, vou mostrar &#8220;como&#8221; minificar usando o <a href=\"http:\/\/developer.yahoo.com\/yui\/compressor\/\">YUI Compressor<\/a> com tasks do <a href=\"http:\/\/ant.apache.org\/\">Apache Ant<\/a> <a href=\"http:\/\/code.google.com\/p\/javaflight-code\/\">montados por Viktor Lieskovsky<\/a> do <a href=\"http:\/\/javaflight.blogspot.com\/\">Javaflight<\/a>.<\/p>\n<p>Esse pequeno tutorial-guia faz parte do material dos meus cursos de Javascript e Ajax e serve para deixar um hist\u00f3rico acess\u00edvel aos alunos e f\u00e1cil para leitores que por ventura precisem.<\/p>\n<p>Preparei um ambiente de execu\u00e7\u00e3o com todas as depend\u00eancias no <a href=\"http:\/\/www.milfont.org\/tech\/projetos\/\">projeto<\/a> <a href=\"http:\/\/code.google.com\/p\/remendux\/\">Remendux<\/a> onde voc\u00eas podem fazer <a href=\"http:\/\/code.google.com\/p\/remendux\/source\/checkout\">checkout<\/a> e rodar o build ant localmente como um projeto do eclipse &#8211; estou usando o plugin para o <a href=\"http:\/\/subclipse.tigris.org\/\">SVN Subclipse<\/a>.<\/p>\n<p>Montei um script ant padr\u00e3o bem simples de ser entendido por iniciantes:<\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project name=\"jsmin\" default=\"main\" basedir=\".\">\r\n\t<!-- Propriedades para definir nomes de pastas que usaremos -->\r\n\t<property name=\"js\" value=\"js\"\/>\r\n\t<property name=\"build\" value=\"build\"\/>\r\n\t<property name=\"lib\" value=\"lib\"\/>\r\n\t<property name=\"output\" value=\"output\"\/>\r\n\t<!-- Propriedades para definir nomes os arquivos necess\u00e1rios -->\r\n\t<property name=\"yui-compressor.jar\"\r\n\t\tlocation=\"${lib}\/yuicompressor-2.4.2.jar\" \/>\r\n\t<property name=\"yui-compressor-ant-task.jar\" \r\n\t\tlocation=\"${lib}\/yui-compressor-ant-task-0.3.jar\" \/>\r\n\t<!-- Incluir as libs necess\u00e1rias no classpath -->\r\n\t<path id=\"task.classpath\">\r\n\t\t<pathelement location=\"${yui-compressor.jar}\" \/>\r\n\t\t<pathelement location=\"${yui-compressor-ant-task.jar}\" \/>\r\n\t<\/path>\r\n\t<!-- Defini\u00e7\u00e3o da task para o Ant reconhecer -->\r\n\t<taskdef name=\"yui-compressor\" \r\nclassname=\"net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask\">\r\n\t<classpath refid=\"task.classpath\"\/>\r\n\t<\/taskdef>\r\n\r\n\t<target name=\"clean\">\r\n\t\t<delete dir=\"build\"\/>\r\n\t\t<delete dir=\"output\"\/>\r\n\t\t<mkdir dir=\"build\"\/>\r\n\t\t<mkdir dir=\"output\"\/>\r\n\t<\/target>\r\n\r\n\t<target name=\"main\" depends=\"clean\">\r\n\t\t<!-- Tag do Ant para concatenar arquivos \r\n\t\t[ http:\/\/ant.apache.org\/manual\/CoreTasks\/concat.html] \r\n\t\tos arquivos s\u00e3o unidos na sequ\u00eancia de defini\u00e7\u00e3o \r\n\t\tno fileset\r\n\t\t-->\r\n\t\t<concat destfile=\"${output}\/remendux.js\" force=\"no\">\r\n\t\t\t<fileset file=\"${js}\/util.js\" \/>\r\n\t\t\t<fileset file=\"${js}\/remendux.js\" \/>\r\n\t\t<\/concat>\r\n\t\t<!-- Task do yui-compressor -->\r\n\t\t <yui-compressor warn=\"false\"  munge=\"true\"  \r\n\t\t\t\tpreserveallsemicolons=\"false\" \r\n\t\t\t\tfromdir=\"${output}\" todir=\"${build}\">\r\n\t\t<\/yui-compressor>\r\n\t<\/target>\r\n\r\n<\/project>\r\n<\/pre>\n<p>Ap\u00f3s a importa\u00e7\u00e3o, para executar o script &#8211; que chamei de build-yui.xml &#8211; basta apenas executar com o ant pelo eclipse &#8211; vide imagem abaixo &#8211; ou em linha de comando. Estou usando o Ant 7.1 com java 6u10 e Eclipse 3.4, portanto caso haja um erro atente para a vers\u00e3o das ferramentas usadas.<\/p>\n<p><img decoding=\"async\" loading=\"lazy\" width=\"520\" height=\"327\" src=\"http:\/\/www.milfont.org\/tech\/wp-content\/uploads\/2008\/12\/build.jpg\" alt=\"\" title=\"build\"  class=\"aligncenter size-medium wp-image-464\" srcset=\"https:\/\/www.milfont.org\/tech\/wp-content\/uploads\/2008\/12\/build.jpg 520w, https:\/\/www.milfont.org\/tech\/wp-content\/uploads\/2008\/12\/build-300x188.jpg 300w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/p>\n<p>Ap\u00f3s executar, observe a redu\u00e7\u00e3o de tamanho na vers\u00e3o minificada [..\/build\/remendux-min.js] para a vers\u00e3o concatenada [..\/output\/remendux.js ]. A vers\u00e3o final ficou com 30% do tamanho com documenta\u00e7\u00e3o e identa\u00e7\u00e3o.<\/p>\n<pre lang=\"abap\">\r\nBuildfile: C:\\workspace\\remendux\\build-yui.xml\r\n     [echo] Building output\r\nclean:\r\n    [mkdir] Created dir: C:\\workspace\\remendux\\build\r\n    [mkdir] Created dir: C:\\workspace\\remendux\\output\r\nmain:\r\n[yui-compressor]\r\n [30%] remendux.js [5775] ---> remendux-min.js [1734]\r\n[yui-compressor]\r\n [JavaScript] Compressed 1 files to 30% (5KB to 1KB, saving 4KB)\r\n[yui-compressor]\r\n [CSS] No files to compress, or all files already up to date\r\n[yui-compressor]\r\n Compressed 1 files to 30% (5KB to 1KB, saving 4KB)\r\nBUILD SUCCESSFUL\r\nTotal time: 12 seconds\r\n<\/pre>\n<p id=\"wqd459\">Typically chemist&#8217;s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra manufacturer coupon<\/a>&#8220;. Maybe &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">viagra discount coupons<\/a>&#8221; is a extremely complicated matter. Matters, like &#8220;<a href=\"http:\/\/free-viagrasamples.com\/viagra_coupons.html\">coupons for viagra<\/a>&#8220;, are coupled numerous types of health problems. If you need to take recipe medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile disfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies. <\/p>\n<p><script type=\"text\/javascript\"> end459_(); <\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Em um post passado eu falei da import\u00e2ncia de unir e minificar arquivos js em determinados casos e discuti &#8220;quando&#8221; fazer isso, vou mostrar &#8220;como&#8221; minificar usando o YUI Compressor com tasks do Apache Ant montados por Viktor Lieskovsky do Javaflight. Esse pequeno tutorial-guia faz parte do material dos meus cursos de Javascript e Ajax [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[16,11,28,111,23,26,27,31,104,8,153],"tags":[246,247,361,372,245,244],"_links":{"self":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/459"}],"collection":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/comments?post=459"}],"version-history":[{"count":19,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/459\/revisions"}],"predecessor-version":[{"id":479,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/posts\/459\/revisions\/479"}],"wp:attachment":[{"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/media?parent=459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/categories?post=459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.milfont.org\/tech\/wp-json\/wp\/v2\/tags?post=459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}