maven 根据P参数值打包动态修改properties文件中值或一定properties

由于本人 最近忙着公司事情,昨天没有写博客,今天就继续写吧

需求:由于最近开发clover项目 ,没有使用spring,更没有使用任何框架,而使用J2EE的web工程,所以连接ZK和MongoDB、Redis等服务器需用指定properties文件,

而目前公司又分各套环境(dev、test、product),所以希望打包的时候 根据profile id 来动态使用不同环境properties文件 或者动态修改properties参数值

方法一:使用一套properties配置文件,但具体参数使用${key}占位符方式打包替换

maven 根据P参数值打包动态修改properties文件中值或一定properties_第1张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第2张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第3张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第4张图片

maven的pom中指定每套环境的参数值

maven 根据P参数值打包动态修改properties文件中值或一定properties_第5张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第6张图片

我们还要启动resources的filter过滤器:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第7张图片

按照上述配置后,我们执行maven打包操作后:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第8张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第9张图片

maven 根据P参数值打包动态修改properties文件中值或一定properties_第10张图片

我们可以看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替换到指定环境的参数了

由于 有些老系统会在项目中的resources下指定各套环境配置文件,如下图片:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第11张图片

但是我们打包后 只希望将指定环境下的*.properties文件都移动到classes下,所以可以考虑使用方法二

方法二:使用maven-antrun-plugin插件方式实现

我们只在打包dev环境:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第12张图片

我们要指定resources.dir目录为src/main/resources/dev
maven 根据P参数值打包动态修改properties文件中值或一定properties_第13张图片

我们增加一个plugin 为maven-antrun-plugin,由于我只要在子工程clover-core下面移动这几个文件,最终打成一个jar包,所以要把这个plugin代码放在clover-core下的pom.xml文件,如果把这个plugin放在父工程的pom.xml下那就移动所有的子工程下resources文件

maven 根据P参数值打包动态修改properties文件中值或一定properties_第14张图片

还是贴上代码吧:


    clover-core-${clover.version}
    
        
            org.apache.maven.plugins
            maven-antrun-plugin
            
                
                    compile
                    compile
                    
                        
                            message="********************** copy resources to classpath*************************"/>
                            message="********************** copy ${resources.dir} to classpath*************************"/>
                            todir="target/classes" overwrite="true">
                                dir="${resources.dir}">
                                    name="*.*"/>
                                    name="*/*.*"/>
                                
                            
                        
                    
                    
                        run
                    
                
            
        
    
    
        
            src/main/resources
            true
        
    

我们执行打包后:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第15张图片

我们可以看到clover-core下已经将这几个*.properties移动到classes下了

个人还是比较推荐第一种方式

PS:有的时候 我们想通过动态打包,生成的子工程的名字是带各套环境, 比如:clover-core-dev-1.0.jar

我们在父工程的profile下设置clover.version

maven 根据P参数值打包动态修改properties文件中值或一定properties_第16张图片

子工程clover-core想最终打包是clover.version指定的环境+版本号:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第17张图片

${clover.version}  ---这个将会打包后deploy中央私库后最终的version
clover-core-${clover.version} --这个就是子工程clover-core打包最终名字

我们执行打包后:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第18张图片私库

maven 根据P参数值打包动态修改properties文件中值或一定properties_第19张图片

当我们打war包的时候,我们也可以指定依赖模块的版本号:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第20张图片

我们这里面使用的 profile配置的环境version,但让你想自己改成别的版本,你打包后就可以看到某个依赖的jar包就是你指定的版本

我们把clover-core的版本改成dev-1.0 

maven 根据P参数值打包动态修改properties文件中值或一定properties_第21张图片

再把clover-core的pom.xml 

maven 根据P参数值打包动态修改properties文件中值或一定properties_第22张图片

打包后 我们看下war包中:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第23张图片

但我看下clover-core子工程下的target:

maven 根据P参数值打包动态修改properties文件中值或一定properties_第24张图片

原来是这样的

maven用的时间倒是很长,但大多时间都是一次配置后,再没有修改后,然后开发项目,但有些细节 最终没有研究那么明白

文章写的有点水,希望对您受用,谢谢


版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/stark-summer/p/4829825.html

你可能感兴趣的:(maven 根据P参数值打包动态修改properties文件中值或一定properties)