本文介紹經過使用yuicompressor-maven-plugin插件實現js及css代碼的自動壓縮,方便集成到持續集成環境中,如jenkins。css
在pom文件中增長該插件的定義,示例以下:html
<plugin> <groupId>net.alchim31.maven</groupId> <artifactId>yuicompressor-maven-plugin</artifactId> <version>1.3.0</version> <executions> <execution> <goals> <goal>compress</goal> </goals> </execution> </executions> <configuration> <encoding>UTF-8</encoding> <!-- 忽略 js 錯誤警告 --> <jswarn>false</jswarn> <nosuffix>true</nosuffix> <linebreakpos>-1</linebreakpos> <includes> <include>js/**/*.js</include> <include>css/**/*.css</include> </includes> <excludes> <exclude>**/**min.js</exclude> <exclude>js/ba/**/*.js</exclude> </excludes> </configuration> </plugin>
一、execution表示執行的操做,能夠指定操做在maven的哪一個生命週期運行,不一樣的生命週期對打包操做會有影響,如配置在compile階段運行壓縮:web
<executions> <execution> <phase>compile</phase> <goals> <goal>compress</goal> </goals> </execution> </executions>
二、經驗證發現該插件運行時所在的位置是項目編譯打包的輸出路徑,好比項目名稱爲abc,當前文件夾應爲project_root/target/abc。maven在打包的時候會把全部編譯的文件、webapp下的文件複製到該目錄中爲打包作準備。apache
三、include節點用於配置須要壓縮的文件路徑,可使用通配符,*表示一個文件或路徑名,**表示多個文件或路徑名,exclude節點用於配置排除壓縮的文件路徑,exclude只會排除include中設置的路徑下的文件或路徑。app
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <warName>${artifactId}</warName> <warSourceExcludes>js/**/*.js,css/**/*.css</warSourceExcludes> </configuration> </plugin>
在配置過程當中發現不管將phase設置爲哪一個階段,最終打包的文件老是原始文件,並未被壓縮,後來測試發現maven-war-plugin會自動把webapp目錄下的文件複製到輸出路徑,所以能夠經過warSourceExcludes配置排除複製,的文件或路徑,如上例中指定排除js目錄下的全部js文件,css目錄下的全部css文件。webapp
壓縮js文件時,若是代碼中包含debugger,yuicompressor會認爲其爲保留關鍵字,註釋或刪除可使打包正常進行,也可使用eval('debugger')替換debugger。maven
[ERROR] ...\src\main\webapp\js\Scroll.js:line 371:column 11:identifier is a reserved word debugger;ide
[ERROR] ...\src\main\webapp\js\Scroll.js:line 1:column 0:Compilation produced 1 syntax errors.測試
插件主站地址:http://alchim.sourceforge.net/yuicompressor-maven-plugin/ui
插件配置參數:http://alchim.sourceforge.net/yuicompressor-maven-plugin/compress-mojo.html#resources