您的位置:首页 > 运维架构

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

2015-01-15 17:56 381 查看
由于本人 最近忙着公司事情,昨天没有写博客,今天就继续写吧

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

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

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









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





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



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







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

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



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

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

我们只在打包dev环境:



我们要指定resources.dir目录为src/main/resources/dev



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



还是贴上代码吧:

<build>
<finalName>clover-core-${clover.version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<tasks>
<echo message="********************** copy resources to classpath*************************"/>
<echo message="********************** copy ${resources.dir} to classpath*************************"/>
<copy todir="target/classes" overwrite="true">
<fileset dir="${resources.dir}">
<include name="*.*"/>
<include name="*/*.*"/>
</fileset>
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>


我们执行打包后:



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

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

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

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



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



<version>${clover.version}</version>  ---这个将会打包后deploy中央私库后最终的version

<finalName>clover-core-${clover.version}</finalName> --这个就是子工程clover-core打包最终名字


我们执行打包后:


私库



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



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

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



再把clover-core的pom.xml



打包后 我们看下war包中:



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



原来是这样的

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

文章写的有点水,希望对您受用,谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: