最近项目想使用在maven打包的时间压缩js,css文件,采用yuicompressor-maven-plugin插件进行压缩,但只是压缩减少大小,提升请求速度,并无对js进行混淆。下面就写一下这个插件的使用。css
假设项目包含以下结构html

须要把项目中设计的css和js所有压缩,可是须要配出已经压缩过的css,js文件,否则会报错。java
- <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>
- lt;/project>
打包遇到的问题以及说明:
一、include标签中配置的是须要压缩的文件,exclude配置的是在include文件中排除须要压缩的文件。web
二、include和exclude中可使用通配符,*表示一个文件或路径名,**表示多个文件或路径。apache
三、jswarn表明是否忽略警告, nosuffix是否添加min后缀, linebreakpos是否压缩在一行。app
四、net.alchim31.maven须要在org.apache.maven.plugins插件以前,不然不可以将压缩的文件打到war包里。webapp
五、org.apache.maven.plugins配置说明:maven
- <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>
其中
一、warSourceIncludes不填写默认是对应 src/main/webapp下的所有文件。ui
二、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 会拷贝压缩后的文件过去。spa
如下是maven打包压缩输出结果:

上面配置通过实际环境,分享一下。