利用maven中resources插件的copy-resources目标进行资源copy和过滤

maven用可以利用如下配置进行资源过滤,pom.xml的配置如下:

Xml代码:

 
          
         
         
             
                 
                src/main/resources                    
                 
                   
                 
                  
                 
                    
                 
                true  
                  
           
 
       
 
   

利用这个特性可以解决开发跟生产环境数据库连接配置等问题,但有时这个特性并不符合实际。比如,开发环境我们使用tomcat应用服务器,使用dbcp数据源,但是生产则使用jboss应用服务器,使用jndi来管理数据源。开发环境跟生产环境spring容器中对于id=dataSources的bean的配置如下所示:

开发环境:

Xml代码


        
        
        
        
        
        
    

 

生产环境:

Xml代码


        
            PrdDS
        

        
            false
        

    

像这种情况,靠的资源过滤功能就不太实用了,这时可以采用resources插件的copy-resources目标进行资源copy,来达到分别配置开发环境与生产环境的数据库连接信息及其它一些配置(缓存服务器地址、短信网关系统连接配置等等),下面分步骤来达到这一目的。

 

第一步,实用maven穿件一个maven 工程(maven-demo),工程结构如下图:


第二部,在resources下定义spring的配置文件、log4j.properties等文件,并同时在main目录下创建一个deploy的目录,在deploy目录下创建一个prd的目录,然后在prd的目录下也定义一个spring的配置文件、log4j的文件,文件名相同,只是里面的配置的内容不同。添加文件后的maven-demo工程目录结构如下图:



 
 main/resoures下的spring配置文件内容如下:

Xml代码


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    
    
         
          
        
        
        
        
    

    
    
        
    

main/deploy/prd目录下的spring配置文件内容如下:

Xml代码


    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    
        
            prdDS
        

        
            false
        

    

    
    
        
    


 

第三步,配置pom.xml文件,内容如下:

Xml代码


    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4.0.0


    com.shell.maven.demo
    maven-demo
    1.0.0-SNAPSHOT

    maven-demo
    http://maven.apache.org
    
    
        
        UTF-8
        true
        true
        
        
        3.1.0.RELEASE
    

    
    
        
            prd
            
                
                    
                    org.apache.maven.plugins
                    maven-resources-plugin
                    2.6
                    
                        
                            copy-resources
                            
                            validate
                            
                                copy-resources
                            

                            
                                
                                ${project.build.outputDirectory}
                                
                                
                                
                                    
                                        
                                        src/main/deploy/prd
                                        
                                        
                                        false
                                    

                                

                            

                            
                        

                    

                    
                    
            
                

            

        

    

    
    
        
            myRepo
            myRepo Repository
            http://maven.infinitus.com.cn:8081/nexus/content/groups/public/
            
                true
            

            
                true
            

        

    

    
        
            myRepo
            myRepo Repository
            http://maven.infinitus.com.cn:8081/nexus/content/groups/public/
            
                true
            

            
                true
            

        

    

    
    
        
        
        
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.1
                
                    1.6
                    1.6
                

            

        

    

    
        
        
            org.springframework
            spring-core
            ${springframework.version}
        

        
            org.springframework
            spring-context
            ${springframework.version}
        

        
            org.springframework
            spring-beans
            ${springframework.version}
        

        
            org.springframework
            spring-web
            ${springframework.version}
        

        
            org.springframework
            spring-jdbc
            ${springframework.version}
        

        
        
            com.oracle
            ojdbc6
            11.2.0.3.0
        

        
            
                commons-dbcp
                commons-dbcp
                1.4
            

            
            
                commons-lang
                commons-lang
                2.4
            

            
                commons-io
                commons-io
                2.4
            

            
                commons-logging
                commons-logging
                1.1.1
            

            
                commons-collections
                commons-collections
                3.2
            

            
                commons-beanutils
                commons-beanutils
                1.8.3
            

    
    
    

 

resources插件的目标共有三个,分别是resources目标  testResources目标 及copy-resources目标。

resources目标默认绑定到了default生命周期的process-resources阶段, testResources目标默认绑定到了default生命周期的process-test-resources阶段。

 

如果配置了如下代码,那么这个时候resources插件的resources目标会进行资源过滤处理,pom.xml配置如下:

         
        
            
                src/main/resources
                true
            

        

   

 

同样,如果配置了如下代码,那么这个时候resources的testResources目标会进行资源过滤处理,pom.xml配置如下:


        
            
                src/test/resources
                true
            

        

   

resources插件的resources目标跟testResources目标都只有outputDirectory一个必须的配置项(都表示要讲资源文件处理到那个目录下去),而copy-resources目标多了一个resources的必须配置项,我个人的理解是这样的。首先这个resources配置项也是用来处理资源的,也包含资源过滤等功能,而copy-resources插件目标往往需要配置到resources插件目标及testResources插件目标的绑定的阶段的前面的阶段去执行,所以在resources插件目标还没有起作用执行时,可以利用copy-resources的resources必须配置项做一些预处理,比如资源过滤等(这里的resources必须项配置了之后由copy-resoueces插件目标来执行,与下的配置没有直接关系,而且互不干涉。可以这么去理解,在main/deploy/prd下的spring配置文件,如果里面也有一些内容是用${properties}来写的,那里在copy-resources插件目标执行拷贝操作前做一个资源过滤的处理,这个功能实现就得靠copy-resouces插件目标的resources必须配置项来完成了)。

 

第四步,验证效果。先运行mvn clean install命令,然后查看applicationContext.xml文件的内容,再运行mvn clean install -P prd 命令,然后查看applicationContext.xml文件的内容,比较两次有何不同。

你可能感兴趣的:(maven)