最近項目想使用在maven打包的時間壓縮js,css文件,採用yuicompressor-maven-plugin插件進行壓縮,但只是壓縮減小大小,提高請求速度,並沒有對js進行混淆。下面就寫一下這個插件的使用。
假設項目包含如下結構
需要把項目中設計的css和js全部壓縮,但是需要配出已經壓縮過的css,js文件,不然會報錯。
<build>
<finalName>shop</finalName>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
<jswarn>false</jswarn>
<nosuffix>true</nosuffix>
<linebreakpos>-1</linebreakpos>
<sourceDirectory>src/main/webapp</sourceDirectory>
<includes>
<include>js/*.js</include>
<include>wapjs/*.js</include>
<include>activity/**/*.js</include>
<include>admin/adminjs/*.js</include>
<include>css/*.css</include>
<include>activity/**/*.css</include>
</includes>
<excludes>
<exclude>**/*min.js</exclude>
<exclude>**/jweixin-1.0.0.js</exclude>
<exclude>**/*min.css</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<configuration>
<javadocDirectory>target/javadoc</javadocDirectory>
<reportOutputDirectory>target/javadoc</reportOutputDirectory>
<charset>UTF-8</charset>
<encoding>UTF-8</encoding>
<docencoding>UTF-8</docencoding>
<show>private</show>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceExcludes> %regex[^.+(?:(?<!(?:-|\.)min)\.js)], %regex[^.+(?:(?<!(?:-|\.)min)\.css)]</warSourceExcludes>
<webXml>src/main/webapp/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
打包遇到的問題以及說明:
1、include標籤中配置的是需要壓縮的文件,exclude配置的是在include文件中排除需要壓縮的文件。
2、include和exclude中可以使用通配符,*表示一個文件或路徑名,**表示多個文件或路徑。
3、jswarn代表是否忽略警告, nosuffix是否添加min後綴, linebreakpos是否壓縮在一行。
4、net.alchim31.maven需要在org.apache.maven.plugins插件之前,否則不能夠將壓縮的文件打到war包裏。
5、org.apache.maven.plugins配置說明
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <warSourceIncludes>**</warSourceIncludes>
- <warSourceExcludes> %regex[^.+(?:(?<!(?:-|\.)min)\.js)], %regex[^.+(?:(?<!(?:-|\.)min)\.css)]</warSourceExcludes>
- <webXml>src/main/webapp/WEB-INF/web.xml</webXml>
- </configuration>
- lt;/plugin>
其中
1、warSourceIncludes不填寫默認是對應 src/main/webapp下的全部文件。
2、warSourceExcludes裝配warSourceIncludes中排除不以.min.js -min.js結尾的js文件。 warSourceIncludes不填寫默認是對應 src/main/webapp下的全部文件,因爲在 yuicompressor配置了不會處理min這些文件所以這些文件要拷貝到對應的目錄。由於maven-war-plugin會把 yuicompressor配置<include>的文件壓縮覆蓋輸出到target文件夾裏,但是<exclude>排除掉的 文件並未放到target裏,所以會導致打war包的時間未將<exclude>排除的文件爲打入包中,所以此處需要 warSourceExcludes將yuicompressor沒有壓縮的js文件就會拷貝過去,而壓縮過的js則不會拷貝yuicompressor 會拷貝壓縮後的文件過去。
以下是maven打包壓縮輸出結果: