maven 处理资源文件的方式

阅读更多
maven 默认情况下,对/main/resources/下的资源文件全部复制到target/classes下,然后打包,对于需要依赖环境或可变参数进行打包时,
如下的环境信息:
    dev 开发环境
    sit sit测试环境
    uat uat测试环境
    pre 预生产测试环境
    prod 线上的生产环境
各环境的数据库配置完全不一样,还有一些配置,是依赖对应环境的内部系统,如在uat环境布署
的电子商务系统,就需要配置uat环境的订单处理系统,而不能调用dev环境的订单系统.

对于这种需求,有两种处理方式:


第一种,在proterties文件里使用${}变量,使用maven的filter进行赋值
http://maven.apache.org/shared/maven-filtering/
http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
//test.properties
jdbcname=${user_name}
jdbcpasswd=${user_passwd}

这种变量在打包时,由maven从另一个依赖环境的配置文件里读出并赋值
比如

//在目录main/resources/sit/下
//env.properties
user_name=user_sit
user_passwd=passwd_sit
ctx=somepath


//在目录main/resources/uat/下
//env.properties
user_name=user_uat
user_passwd=passwd_uat
ctx=

......
配置五个对应的配置,然后在build配置里配置filter


...

 
            src/main/resources/${env}/env.properties
        
        
            
                src/main/resources
                true
            
        

...





然后添加maven profile配置,每个环境对应一个profile

        
        
            dev
            
                dev
            
            
                true
            
        
        
        
            sit
            
                sit
            
        
        
        
            uat
            
                uat
            
        
        
        
            pre
            
                pre
            
        
        
        
            prod
            
                prod
            
        
    


//打包命令 打包uat环境的配置
mvn clean package -Puat

这时最终的配置文件test.properties里的属性会被替换为

//test.properties
jdbcname=user_uat
jdbcpasswd=passwd_uat



stackoverflow里web资源的替换
对于web资源,比如放到webapp目录下的js文件,不同的环境,需要用到不同的文件,可以使用
maven-war-plugin在打包时进行配置,
比如,我们在src/main/resources/目录下新建web目录,用于存放需要复制到webapp目录里的文件
比如我有个config.json文件,这个文件在dev sit uat prod 环境里都不一样
最终webapp目录结构如下:
├─META-INF
├─static
│  ├─bootstrap
│  │  └─2.3.2
│  │      ├─css
│  │      │      bootstrap-responsive.min.css
│  │      │      bootstrap.min.css
│  │      │
│  │      ├─img
│  │      │      glyphicons-halflings-white.png
│  │      │      glyphicons-halflings.png
│  │      │
│  │      └─js
│  │              bootstrap.min.js
│  │
│  ├─images
│  │      favicon.ico
│  │
│  ├─jquery
│  │      config.json      //该文件在各个目录里的配置都不一样
│  │      jquery-1.9.1.min.js
│  │
│  ├─jquery-validation
│  │  └─1.11.1
│  │      │  jquery.validate.min.js
│  │      │  messages_bs_zh.js
│  │      │  validate.css
│  │      │
│  │      └─images
│  │              unchecked.gif
│  │
│  └─styles
│          default.css
│

config.json文件内容为
{
  prefix:"old value",
  path:"/upload/path"
}





创建src/main/resources/web/资源目录,目录结构如下:
└─static
    └─jquery
            config.json

config.json文件内容为
{
  prefix:"${ctx}",
  path:"/upload/path"
}




			
				org.apache.maven.plugins
				maven-war-plugin
				2.4
				
					${project.artifactId}
                    
                        src/main/resources/env/application-${env}.properties
                    
                    
                        
                            src/main/resources/web
                            true
                        
                    

				
			


在执行 mvn package -Pprofile命令时,config.json里变量的值会被相应的替换和合适的值

第二种,使用maven-resources-plugin 的copy方式,将对应环境的配置对整个目录和文件进行覆盖。
http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html

        
        
            dev
            
                dev
            
            
                true
            
        
        
        
            sit
            
                sit
            
        
        
        
            uat
            
                uat
            
        
        
        
            pre
            
                pre
            
        
        
        
            prod
            
                prod
            
        
    




 ....

 
                maven-resources-plugin
                2.7
                
                    
                        copy-resources
                        
                        process-resources
                        
                            copy-resources
                        
                        
                            ${basedir}/target/classes/
                            
                                
                                    src/main/resources/${env}/
                                    true
                                
                            
                        
                    
                
            

....



//打包命令 打包uat环境的配置
mvn clean package -Puat

你可能感兴趣的:(maven 处理资源文件的方式)