Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)
profile相关知识点:
在开发项目时,设想有以下场景:
你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库。此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做?
此外,你的项目需要部署。为了调试,在开发时我们在Java编译结果中加入了调试信息(Java默认)。而在部署时你希望Java编译结果中不出现调试信息。此时你又会怎么做?
答案是Profile。Maven的Profile用于在不同的环境下应用不同的配置。一套配置即称为一个Profile。这里的“环境”可以是操作系统版本,JDK版本或某些文件是否存在这样的物理环境,也可以是你自己定义的一套逻辑环境。比如上面的A中所说的Linux和Mac OS X便是一种物理环境,而B中讲的开发环境和部署环境则为逻辑环境。Maven提供了Activation机制来激活某个Profile,它既允许自动激活(即在某些条件满足时自动使某个Profile生效),也可以手动激活。
一个Profile几乎可以包含所有能够出现在pom.xml中的配置项,比如<artifactId>,<outputDirectory>等。相当于在Profile中定义的配置信息会覆盖原有pom.xml中的相应配置项。
profile 的基本结构:
<profiles>
<profile>
<id>profileId</id>
<activation>
<activeByDefault>true|false</activeByDefault>
</activation>
<properties>
<fruit>XXXXX</fruit>
</properties>
<build>
<plugins>
<plugin>....</plugin>
</plugins>
</build>
</profile>
</profiles>
profile 几乎可以包含 pom.xml 中所有的配置;
执行命令:mvn [clear | install] -PprofileId
配置springMvc下的压缩插件,并且打包成war,所以配置如下:
<profiles>
<!--js、css压缩-->
<profile>
<id>jscsscompress</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins> <plugin>
<groupId>net.sf.alchim</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>0.7.1</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
<encoding>UTF-8</encoding>
<nosuffix>true</nosuffix>
<jswarn>false</jswarn>
<!-- 将已压缩,或可能压缩会出错的文件删除 -->
<excludes>
<exclude>**/*min.js</exclude> </excludes>
</configuration>
</plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<!--
<warSourceExcludes>**/*.js,**/*.css</warSourceExcludes>
-->
<!-- 将压缩未处理的所有文件都包含进来,包括未处的 js,css, 以及图片,未网页文件等都包含进来 -->
<warSourceIncludes> **/*min.js,
images/**,
META-INF/**,
**/*.xml,
**/*.jsp,
**/*.gif,
**/*.jpg,
**/*.png
</warSourceIncludes> <webXml>src/main/webapp/WEB-INF/web.xml</webXml> </configuration>
</plugin> </plugins>
</build>
</profile>
</profiles>
该profile Id为jscsscompress, 所以运行为mvn clean install -Pjscsscompress
<activation>
<activeByDefault>false</activeByDefault>
</activation>
activeByDefault表示是否自动执行,还是手动执行,如果为true, 只要mvn clean install ,如果为false 则 后面要加 -Pjscsscompress
采用 yuicompressor插件来压缩,这个插件有两个源:net.sf.alchim还有net.alchim31.maven,两个效果跟配置都一样.
当<phase>compile</phase> 中phase的值为compile, install, resource_js_css部分的值时,会提示不支持。生命周期不对问题
则需要添加:
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
net.alchim31.maven
</groupId>
<artifactId>
yuicompressor-maven-plugin
</artifactId>
<versionRange>
[1.3.0,)
</versionRange>
<goals>
<goal>compress</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore></ignore>
</action>
</pluginExecution>
这样的节点,在出错时在 phase节点显示提示,鼠标移上去,它会展开一个可能处理错误的 tip 层,点击第一项即可自动生成.
-------------------------------------------------------------------------------------------
但如果phase配置为package就不会有错误.
------------------------------------------------------------------------------------------
package是最后执行的配置,他在打包war后执行...
------------------------------------------------------------------------------------------
plugins下配置的插件,如果本地仓库没有的话,也会自动下载,跟dependency依赖包一样.
-----------------------------------------------------------------------------------------
Encoding编码设置对于utf-8源码似乎是必须的. jswarn 为 false时忽略本不提示脚本错误. configuration下include表示包含文件,这个基本不用配置,因为这个插件用来压缩src/main/webapp下所有的脚本跟css文件 exclude表示忽略某些文件: **.js表示根目录下的所有脚本 **/*.js表示根目录及所有子目录的所有脚本. xxx/**/**min.js 等等这样的配置.
maven-war-plugin 插件说明:
其实war这个插件,默认是有的,但是我们上面做了压缩忽略了些文件,在这里需要做下过滤.
configuration下有两个配置
warSourceIncludes表示包含某些文件或文件夹.
warSourceExcludes表示忽略某些文件及文件夹。
------
打包war需要将src/main/webapp下的文件全都打包到target的项目名下.
但是yuicompressor也会将 文件打包到 target/项目名下.
由于都采 compile 方式,yuicompress排在前面,所以yui先打包,war后再打包.
war如果没有配置,则会将 src/main/webapp下所有的文件都打包到target/项目名下,就是覆盖掉yui打包进来的文件。
所以要对war进行过滤.
warSourceExcludes表示某些文件不放进来,就是某些文件不覆盖yui的文件,这些文件为yui exludes掉的文件。
这里没用warSourceExcludes.
这里用warSourceIncludes,把yui未压缩的包含进来,以及所有静态文件夹js/resources/css所包含的其他格式文件,以及所有非静态的文件夹...
-------
最后执行 mvn clean install -Pjscsscompress 压缩打包生成 war.
Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)的更多相关文章
- ASP.NET MVC 4使用Bundle的打包压缩JS/CSS
打包(Bundling)及压缩(Minification)指的是将多个js文件或css文件打包成单一文件并压缩的做法,如此可减少浏览器需下载多个文件案才能完成网页显示的延迟感,同时通过移除JS/CSS ...
- Spring MVC Maven 环境搭建与部署
本文简单演示了本地开发环境的搭建.项目出包.部署运行.HelloWorld,以及部分注意事项. 起初的玩法:先安装Eclipse,然后分别下载并安装Maven.spring的插件,再进行工程模式转换, ...
- Spring MVC+Maven+Freemarker+Mybatis开发环境搭建
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 创建一个Spring MVC项目 集成Freemarker 集成Mybatis Mybatis自动生成工具 利用STS( ...
- Spring Mvc + Maven + BlazeDS 与 Flex 通讯 (七)
BlazeDS 说明 BlazeDS是由Adobe开源的基于amf协议的,用于解决flex与java通讯的组件; 基于传统的文本协议的XML传输方式,在抽象层方面会有很大的压力,特别在需要序列化与反序 ...
- maven中用yuicompressor和closure-compiler对js、css文件进行压缩
转载自:http://matychen.iteye.com/blog/1477350 项目采用maven构建的时候,需要压缩js,css等,网上找了相关资料,自己综合了下- 直接放代码: <! ...
- Spring mvc + maven + tomcat配置问题
在用maven搭建spring mvc时候, 个人遇到过很多的问题, 现在把遇到的问题总结下: 1. 首先点击项目->Run As->Maven clean, 这一步把之前不管有没有ma ...
- MVC打包压缩JS&CSS文件调试时过滤了一些文件
BundleTable.这个确实是比较好用,打包并压缩了CSS,使之加载时减少流量. 但是在调试的时候会疑问为何有很多JS,CSS文件无法打包,其实是因为调试时VS自动过滤了如下文件: 后台跟踪了 ...
- IIS7.5打开GZip压缩,同时启用GZip压缩JS/CSS文件的设置方法[bubuko.com]
IIS7.5或者IIS7.0开启GZip压缩方法:打开IIS,在右侧点击某个网站,在功能视图中的“IIS”区域,双击进入“压缩”,如图下图: 分别勾选“启用动态内容压缩”和“启用静态内容压缩”.这样最 ...
- 开箱即用 - Grunt合并和压缩 js,css 文件
js,css 文件合并与压缩 Grunt 是前端自动化构建工具,类似webpack. 它究竟有多强悍,请看它的 介绍. 这里只演示如何用它的皮毛功能:文件合并与压缩. 首先说下js,css 合并与压缩 ...
随机推荐
- 11.10 Daily Scrum
工作进度有点拖后,之后几天要加快步伐了. Today's tasks Next week 丁辛 餐厅列表UI设计 餐厅列表事件处理 李承晗 实现指 ...
- 团队作业之旅游行业APP分析
随着经济的发展,不论是在工作中的男女老少,还是在校园中的童鞋,都喜欢在假期来一场说走就走的旅行,来缓解生活中的各种压力.当然,在国家面临经济转型的情况下,更多的将工业,农业转向服务型的旅游业,各个省市 ...
- HTTP 协议(2)
一.URL HTTP 是一个基于 TCP 的应用层协议,其中 HTTP1.1 版本中支持持续的连接机制(Keep-alive),绝大多数的 WEB 开发都是基于 HTTP 的应用. HTTP 的 UR ...
- (改进)Python语言实现词频统计
需求: 1.设计一个词频统计的程序. 2.英语文章中包含的英语标点符号不计入统计. 3.将统计结果按照单词的出现频率由大到小进行排序. 设计: 1.基本功能和用法会在程序中进行提示. 2.原理是利用分 ...
- CI框架 default_controller 如何设置为:'目录/Controller' 转
闲谈 前几天,我的室友发现了一个问题:CI框架的Router.php文件的default_controller设置为application\controllers文件下的 一级PHP文件名 就可以,设 ...
- day1——js方法关键字的问题(onclick点了没反应)
<a href="javascript:void(0);" onclick="search();" >提交</a> js代码: fu ...
- Torch,Tensorflow使用: Ubuntu14.04(x64)+ CUDA8.0 安装 Torch和Tensorflow
系统配置: Ubuntu14.04(x64) CUDA8.0 cudnn-8.0-linux-x64-v5.1.tgz(Tensorflow依赖) Anaconda 1. Torch安装 Torch是 ...
- js手写俄罗斯方块
代码如下 html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ...
- NOI前各种Idea总结以及各种文本乱堆
转载请注明原文地址:https://www.cnblogs.com/LadyLex/p/9227267.html 不过这篇的确没什么*用了转转吧 2018-6-24 关于一类延迟标记(来自UR14 思 ...
- 【刷题】LOJ 6007 「网络流 24 题」方格取数
题目描述 在一个有 \(m \times n\) 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意 \(2\) 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数 ...