2013-05-16 7 views
9

Nach ein paar Tagen auf der Suche nach dem YUI Compressor in einem Ant-Build-Skript habe ich endlich funktioniert. Viele alte Beispiele (< 2010) existieren, um eine Ant-Aufgabe zu erstellen und diese in Ihrem Build-Skript zu verwenden, aber das war für mich übertrieben.Wie verwende ich YUI Compressor in Ant Build-Skript für JavaScript und CSS

Viele der Beispiele sind ebenfalls alt und erfordern etwas mehr Wissen über Ant oder die Konfiguration von Ant-Aufgaben. Die folgende Lösung ist einfach, was für mich schnell, einfach und effektiv war.

Antwort

14

Die unten wurde zu einem meiner <target> Tags hinzugefügt, um alle die Javascript-Dateien in einem einzigen komprimierten Verzeichnis zu haben. Diese Dateien behalten ihren ursprünglichen Namen. Um dies für CSS zu tun, wechseln Sie einfach 'js' zu 'css' und aktualisieren Sie die Pfade entsprechend.

Dies wurde mit YUI Compressor 2.4.7 getan und ich führe das Ant-Build-Skript in Eclipse Juno ohne Änderungen an Klassenpfaden oder andere Änderungen der Einstellungen.

<!-- 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> 

Bitte zögern Sie nicht, diese Antwort zu verbessern. Die obige Lösung funktioniert für mich, aber ich bin kein Experte.

+0

Wie alle Js komprimieren Datei in eine Js-Datei? ? weil über Skript komprimieren .js Dateien in ihre eigene Datei ... –

+2

Es gibt FileNotFoundException für - /home/shwetanka/projects/webapp/webapp/content/js/mobile/*.js obwohl Pfad existiert. – Shwetanka

+0

@Shwetanka Wenn Sie eine Frage haben, sollten Sie Ihren eigenen Fragethread erstellen und auf diese Antwort verweisen, die auf das Problem hinweist. –

5

Ich verwende die folgende Lösung, um Dateien an Ort und Stelle zu minimieren, seit ich die FileNotFoundException mit der vorherigen Antwort erhalten habe.

Um CSS zu minimieren, ersetzen Sie js durch css unten.

<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> 
+0

Ich hatte das gleiche Problem mit einem Ant-Skript, das auf dem des html5boilerplate-Projekts basierte. Deine Lösung, zuerst in ein temporäres Verzeichnis zu gehen, scheint es behoben zu haben. – Barrie

1

Ich versuchte Victors Code. Es wurde kein temporäres Verzeichnis benötigt. Ich habe diesen Code benutzt und es hat für mich funktioniert.

<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> 

+0

Wie sollte ich die bereitgestellte Lösung optimieren, um die bereits vorhandene Datei ".min.js" auszuschließen, die erneut komprimiert wird. Ich habe versucht, Attribut 'excludes' mit Wert als '"* /. Min.js"' sowie '**/min *' zu '' hinzuzufügen, aber das scheint nicht zu funktionieren. –

+0

Es ist "ausschließen" und nicht "ausschließen".