2010-10-01 8 views
6

Używam kompresora yui do kompresowania plików js w mojej aplikacji internetowej.Kompilator Yui kompresora maven nie kompresuje plików js

Mam skonfigurowany plugin jak wskazano na stronie wtyczki Yui Maven yui compressor maven plugin.

To conf wtyczki pom

<plugin> 
    <groupId>net.sf.alchim</groupId> 
    <artifactId>yuicompressor-maven-plugin</artifactId> 
    <version>0.7.1</version> 
    <executions> 
     <execution> 
    <phase>compile</phase> 
     <goals> 
     <goal>jslint</goal> 
      <goal>compress</goal> 
     </goals> 
     </execution> 
    </executions>   
    <configuration> 
    <failOnWarning>true</failOnWarning> 
     <nosuffix>true</nosuffix> 
     <force>true</force> 
     <aggregations> 
     <aggregation> 
      <!-- remove files after aggregation (default: false) --> 
      <removeIncluded>false</removeIncluded> 
      <!-- insert new line after each concatenation (default: false) --> 
      <insertNewLine>false</insertNewLine> 
      <output>${project.basedir}/${webcontent.dir}/js/compressedAll.js</output> 
      <!-- files to include, path relative to output's directory or absolute path--> 
      <!--inputDir>base directory for non absolute includes, default to parent dir of output</inputDir--> 
      <includes>     
      <include>**/autocomplete.js</include> 
      <include>**/calendar.js</include> 
      <include>**/dialogs.js</include> 
      <include>**/download.js</include> 
      <include>**/folding.js</include> 
      <include>**/jquery-1.4.2.min.js</include> 
      <include>**/jquery.bgiframe.min.js</include> 
      <include>**/jquery.loadmask.js</include> 
      <include>**/jquery.printelement-1.1.js</include> 
      <include>**/jquery.tablesorter.mod.js</include> 
      <include>**/jquery.tablesorter.pager.js</include> 
      <include>**/jquery.dialogs.plugin.js</include> 
      <include>**/jquery.ui.autocomplete.js</include>     
      <include>**/jquery.validate.js</include> 
      <include>**/jquery-ui-1.8.custom.min.js</include> 
      <include>**/languageDropdown.js</include> 
      <include>**/messages.js</include> 
      <include>**/print.js</include> 
      <include>**/tables.js</include> 
      <include>**/tabs.js</include> 
      <include>**/uwTooltip.js</include> 
      </includes> 
      <!-- files to exclude, path relative to output's directory--> 

     </aggregation> 
     </aggregations> 
    </configuration> 
    <dependencies> 
     <dependency> 
<groupId>rhino</groupId> 
    <artifactId>js</artifactId>  
    <scope>compile</scope> 
    <version>1.6R5</version> 
</dependency> 
<dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-plugin-api</artifactId> 
     <version>2.0.7</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.maven</groupId> 
     <artifactId>maven-project</artifactId> 
     <version>2.0.7</version> 
     <scope>provided</scope> 
    </dependency><dependency> 
     <groupId>net.sf.retrotranslator</groupId> 
     <artifactId>retrotranslator-runtime</artifactId> 
     <version>1.2.9</version> 
     <scope>runtime</scope> 
    </dependency> 

    </dependencies> 
    </plugin> 

A oto log przy kompresji czasu

 
These will use the artifact files already in the core ClassRealm instead, to allow them to be included in PluginDescriptor.getArtifacts().

[DEBUG] Configuring mojo 'net.sf.alchim:yuicompressor-maven-plugin:0.7.1:jslint' [DEBUG] (f) failOnWarning = true [DEBUG] (f) jswarn = true [DEBUG] (f) outputDirectory = C:\test\target\classes [DEBUG] (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml [DEBUG] (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\src, PatternSet [includes: {}, excludes: {/*.class, **/.java, site/}]}}] [DEBUG] (f) sourceDirectory = C:\test\src..\js [DEBUG] (f) warSourceDirectory = C:\test\src\main\webapp [DEBUG] (f) webappDirectory = C:\test\target\test2-19-SNAPSHOT [DEBUG] -- end configuration -- [INFO] [yuicompressor:jslint {execution: default}] [INFO] nb warnings: 0, nb errors: 0 [DEBUG] Configuring mojo 'net.sf.alchim:yuicompressor-maven-plugin:0.7.1:compress' --> [DEBUG] (f) removeIncluded = false [DEBUG] (f) insertNewLine = false [DEBUG] (f) output = C:\test\WebContent\js\compressedAll.js [DEBUG] (f) includes = [/autocomplete.js, /calendar.js, **/dialogs.js, **/download.js, **/folding.js, **/jquery-1.4.2.min.js, **/jquery.bgifram e.min.js, **/jquery.loadmask.js, **/jquery.printelement-1.1.js, **/jquery.tablesorter.mod.js, **/jquery.tablesorter.pager.js, **/jquery.dialogs.p lugin.js, **/jquery.ui.autocomplete.js, **/jquery.validate.js, **/jquery-ui-1.8.custom.min.js, **/languageDropdown.js, **/messages.js, **/print.js, * */tables.js, **/tabs.js, **/uwTooltip.js] [DEBUG] (f) aggregations = [[email protected]] [DEBUG] (f) disableOptimizations = false [DEBUG] (f) encoding = Cp1252 [DEBUG] (f) failOnWarning = true [DEBUG] (f) force = true [DEBUG] (f) gzip = false [DEBUG] (f) jswarn = true [DEBUG] (f) linebreakpos = 0 [DEBUG] (f) nomunge = false [DEBUG] (f) nosuffix = true [DEBUG] (f) outputDirectory = C:\test\target\classes [DEBUG] (f) preserveAllSemiColons = false [DEBUG] (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml [DEBUG] (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\src, PatternSet [includes: {}, excludes: {/.class, /.java, site/}]}}] [DEBUG] (f) sourceDirectory = C:\test\src..\js [DEBUG] (f) statistics = true [DEBUG] (f) suffix = -min [DEBUG] (f) warSourceDirectory = C:\test\src\main\webapp [DEBUG] (f) webappDirectory = C:\test\target\test2-19-SNAPSHOT [DEBUG] -- end configuration -- [INFO] [yuicompressor:compress {execution: default}] [INFO] generate aggregation : C:\test\WebContent\js\compressedAll.js [INFO] compressedAll.js (407505b) [INFO] nb warnings: 0, nb errors: 0 [DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-resources-plugin:2.2:testResources' --> [DEBUG] (f) filters = [] [DEBUG] (f) outputDirectory = C:\test\target\test-classes [DEBUG] (f) project = MavenProject: com.test.test1:test2:19-SNAPSHOT @ C:\test\pom.xml [DEBUG] (f) resources = [Resource {targetPath: null, filtering: false, FileSet {directory: C:\test\test , PatternSet [includes: {}, excludes: {/.class, **/*.java}]}}] [DEBUG] -- end configuration --

Problemem jest to, że pliki są coraz zagregowane w jednym pliku, ale bez kompresji.

Powyższy link używa wersji 1.1, a wersja wtyczki, której używam, to 0.7.1. Czy to spowoduje jakiekolwiek różnice.

Czy ktoś może powiedzieć, co jest nie tak.

PS: Zanikliłem trochę tekstu w dzienniku, aby przestrzegać zgodności w mojej firmie. Więc może się okazać, że to niedopasowanie.

+0

Mam podobny problem. "Minowane" pliki zachowują wszystkie ich podziały linii. Konkatenacja działa. Bardzo dziwne ... – Benxamin

Odpowiedz

0

Czy możesz spróbować zdefiniować oddzielne wykonanie dla jslint i skompresować i zobaczyć, czy to działa?

<executions> 
    <execution> 
     <goals> 
      <goal>jslint</goal>   
     </goals> 
     <configuration> ... </configuration> 
    </execution> 
    <execution> 
     <goals> 
      <goal>compress</goal>   
     </goals> 
     <configuration> ... </configuration> 
    </execution> 
</executions> 
+0

Wykonane jako dwie różne egzekucje. Ale nie ma szczęścia w tej samej sytuacji. – hanumant

+0

Usunięto cel jslint z pom i wykonano tylko kompresję, aby sprawdzić, czy działa. Rezultat to nie, kompresja nie działa po prostu agregowaniu. – hanumant

0

Sprężarka YUI (ujęte jako zależność w tej wtyczki maven) wykorzystuje "połatany" wersję Mozilla Rhino dla:

  • interpretacji javascript
  • kompresji lokalne nazwy zmiennych (the "łatka")

Dodając się do zależności od Rhino (in your previous question), myślę, że te " łatki "są nadpisywane, zamieniając tę ​​maven plugin w coś bezużytecznego: kompresujące nazwy, usuwające spacje zachowania zniknęły.

Usuń więc nosorożca ze swojego pom i wróć do rozwiązania pierwszego problemu!

+0

hmm, mam ten sam problem bez jawnego definiowania Rhino – Jan

5

Z tego, co przeczytałem, nie należy konfigurować miejsca, z którego plik js powinien być sprawdzany lub kompresowany (ponieważ nie używa się domyślnej konfiguracji). Skonfigurujesz tylko agregację.

Dla szybszej odpowiedzi użył issue tracker of yuicompressor-maven-plugin

roztworu (kopiuj/wklej z project FAQ)

Ponieważ:

  • ustawionego <nosuffix>true</nosuffix>

  • skryptu w ramach src/main/webapp i maven-war-plugin skopiuj wszystkie pliki z src/main/webapp na cel (regardl ess timestamp, ...) i wywołać wojnę (w tej samej egzekucji).

Obejścia:

  • Najedź skrypt reż się z webapp

    <plugin> 
        <groupId>@[email protected]</groupId> 
        <artifactId>yuicompressor-maven-plugin</artifactId> 
        ... 
        <configuration> 
        <!-- default ${project.build.sourceDirectory}/../js == src/main/js --> 
        <sourceDirectory>src/main/javascript</sourceDirectory> 
    
  • lub wykluczyć "skrypty" z listy plików do skopiowania

    <!-- adapted from https://github.com/davidB/yuicompressor-maven-plugin/blob/master/src/it/demo01/pom.xml --> 
    <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-war-plugin</artifactId> 
        <configuration> 
        <warSourceExcludes>scripts/**</warSourceExcludes> 
        </configuration> 
    </plugin> 
    
2

Wiem, że ten post jest bardzo stary, ale natknąłem się na to samo i to jest to, co znalazłem. Mam nadzieję, że to pomoże również komuś innemu.

To jest trudne. Ma to związek z opcją konfiguracji nosuffix. Jeśli usuniesz opcję nosuffix, minifikacja działa zgodnie z oczekiwaniami.

Jeśli naprawdę musisz mieć nosuksix, musisz zmienić fazę wykonania na "pakiet".

<executions> 
     <execution> 
     <phase>package</phase> 
      <goals> 
    ...... 
    ..... 

Każda faza przed przygotować-resources nie działa, ponieważ kiedy wojna jest zbudowany, to podnosi js z pierwotnej lokalizacji źródłowej, a tym samym nadpisuje minified js (faza tworzone podczas przygotowania-resources) w katalog docelowy.

Minusowanie działa po usunięciu nosuffix, ponieważ w fazie pakietu nazwy plików są różne, więc nie ma nadmiernego zapisu plików, a zobaczysz zarówno minified jak i nie-minifikowane pliki js w twoim katalogu docelowym.

Przynajmniej to moje zrozumienie.

+1

W tym przypadku masz minified w katalogu webapp, ale nie w wygenerowanym pliku .war (sprawdź zawartość, wtyczka wojny uruchomiona wcześniej (skopiuj i archiwizuj w pojedyncze przejście) Musisz wykluczyć plik z kopii: zobacz https://github.com/davidB/yuicompressor-maven-plugin/wiki/FAQ –

+1

masz rację. Naprawdę udało mi się to naprawić, dodając we wtyczce yuicompressor a następnie dodając, że sam katalog jako zasób w maven-war-plugin. ' prawda \t \t fałszywe \t \t $ {project.build.directory}/min ' – Inxsible