zoukankan      html  css  js  c++  java
  • Spring Mvc + Maven + yuicompressor 使用 profile 来压缩 javascript ,css 文件; (十)

    profile相关知识点:

    在开发项目时,设想有以下场景:

    1. 你的Maven项目存放在一个远程代码库中(比如github),该项目需要访问数据库,你有两台电脑,一台是Linux,一台是Mac OS X,你希望在两台电脑上都能做项目开发。但是,安装Linux的电脑上安装的是MySQL数据库,而Mac OS X的电脑安装的是PostgreSQL数据库。此时你需要找到一种简单的方法在两种数据库连接中进行切换,你会怎么做?

    2. 此外,你的项目需要部署。为了调试,在开发时我们在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.

  • 相关阅读:
    Gym102040 .Asia Dhaka Regional Contest(寒假自训第9场)
    Gym-101673 :East Central North America Regional Contest (ECNA 2017)(寒假自训第8场)
    Gym -102007 :Benelux Algorithm Programming Contest (BAPC 18) (寒假自训第5场)
    Gym .101879 USP Try-outs (寒假自训第七场)
    Gym.101908 Brazil Subregional Programming Contest(寒假自训第六场)
    Gym .101933 Nordic Collegiate Programming Contest (NCPC 2018) (寒假gym自训第四场)
    Gym .102021 .German Collegiate Programming Contest (GCPC 18) (寒假gym自训第三场)
    Gym.102059: 2018-2019 XIX Open Cup, Grand Prix of Korea(寒假gym自训第一场)
    【整理】简单的数学期望和概率DP
    猿助力下载地址
  • 原文地址:https://www.cnblogs.com/editor/p/3898624.html
Copyright © 2011-2022 走看看